Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 1701 → Rev 1702

/C-OSD/ArduCAM328_19_Pack.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/MAX7456.pdf
0,0 → 1,5423
+%âãÏÓ
+0000000016 00000 n
+0000002870 00000 n
+0000002954 00000 n
+0000003144 00000 n
+0000003370 00000 n
+0000004037 00000 n
+0000004569 00000 n
+0000005385 00000 n
+0000005461 00000 n
+0000005536 00000 n
+0000005613 00000 n
+0000005649 00000 n
+0000005713 00000 n
+0000006203 00000 n
+0000006627 00000 n
+0000011531 00000 n
+0000011969 00000 n
+0000012343 00000 n
+0000012638 00000 n
+0000013603 00000 n
+0000013770 00000 n
+0000014501 00000 n
+0000015104 00000 n
+0000016377 00000 n
+0000017375 00000 n
+0000017609 00000 n
+0000017696 00000 n
+0000017956 00000 n
+0000018285 00000 n
+0000019317 00000 n
+0000020438 00000 n
+0000020536 00000 n
+0000020880 00000 n
+0000021492 00000 n
+0000021980 00000 n
+0000022985 00000 n
+0000023249 00000 n
+0000023587 00000 n
+0000024653 00000 n
+0000025829 00000 n
+0000026681 00000 n
+0000027509 00000 n
+0000031545 00000 n
+0000036565 00000 n
+0000039234 00000 n
+0000043490 00000 n
+0000047899 00000 n
+0000048804 00000 n
+0000049203 00000 n
+0000049398 00000 n
+0000049683 00000 n
+0000001336 00000 n
+273 0 obj<</Length 1443/Filter/FlateDecode/I 2072/L 2056/S 1865>>stream
+™­ÑÙt!pÁáSO\û<èФ½Oe«ŒIhZ _¾·ÿ\
+p[±Þ/!¹a*¼íґ¢”ü.Õé1v,/[˜ëH­F]ŽLÕ±ñn{y0E¾§I|zOûìñú&ìà^¼šf½q‡ÆÅI=‘Wó[C‡»¬'ßìÈjé#$…’ÇWdc¹µd\¯Ê¢©á5ˆ ¥Ø£¤cÏ&5ê[M¡ò¸·S³ŽVa(%¯œf¶;燬ë-ýيs*‘yFUÔµÜïV[PWŸ;!¿Gnzv£lüW©ž“Ö(¿q¥5Â'ߖ¾
+ÏíqqH‚1î˪ì”}­˜Ð›/½J½w¶dYz¶ZGNoa®×¨oŽ ´®³#qÚªrW&Î]´6‰çdC8õ+ª–˜´_ÉÇ˃oå9˜êïZb*U­,Ž9Wê]ÎÆP±ÿ¶;.Ç÷Ï$”J1 Ãm6ÏBQir²Ãl6›Éë#•Êl Nûã̙
+@Éée6Ÿ%%3ì,óˈ¢ìIGbäb’£RiudŠV4†ét…^M…(ý<Ø4=_-iiii™$×“G/§ét~ •[)ìsJ§q²NH×SJsRà +Ò ÑéVõŒûk"òhöÏô¤£0š! ¡b†§Žâå5 eLªQ_ŸÜ•®|ÝF)ÿ%'c
+236 0 obj<</Subtype/Type1C/Length 4819/Filter/FlateDecode>>stream
+ý¶nDË{í{Y„q¡[m@ ìAD d0ŠÊ*"qa\ â“©­˜ŒŠHD ÑAqbÔETPÁ‰…Š3£I)™)Ïë>Ý8©š²*uþ¼wï=÷Þó}çû®‚PÚ
+M
+5DlÅáÃïöí{ÿåHCº¶L8 ™tޅ°U(¦f5hƒõú ½^»`ݺÂlmdñÚueÆìõÚ¸¢ÕÚñY]°61¿¨Ø¸i]¶vAŒöÿ ÁÚ%ã#‹‹ ˌùÅE¥ÿKˆ]Y¸!'Ûø»K
+*«î…t‚EC3λó„«èõ§Ó0PI  ‹`ö0xl›íàn¬¨‡„Ð Í¿ÞîP·ß=ÊwIhZ`ÚzÌÂe™˜Žiœ¼7ìԐY, ºQù¯áìf4xÔ í!tD73×br2† yS’Ðu&Îd —êÿåB×Å¡ËÀx¼€Õ >æ ! â +¤‚:ܧÀŒ|w°Ç,ÚÐßsv _ì¹wìí0‡°/Áºùô‘.WêþfJe±Vê‡ZK?=ž9 .±òªN¸„ãÒ
+äz½ z¹“Ý ÁKÀ‹YÜ-Ë{) ȑKa7„DÂdôz$€öQ=8¼ä çB(¶É1C1׿Ð
+èŽZ áà¾É•úЁéAÚ3n -óãU·9œÅ+ƒ:Øò ÷ë¦+©¿Ô×}Ó\…6[C6¤0^Ùqiüô¤®g[Åqf÷ÕÁ2YQkyØ(㤄Ògb;؇©ÉAœ|–­izôûKx<+ûP.Þ¥}X΢O´ÜÏ£'ïuœO¶üõ°LžÇcoÔùDƯy9Û³øqË*77½÷ëå{Ÿ'©Sú; )Ò$ZH‹=uÔìËZjek%á>5
+¤t–z‰$ Q–£²ï’ø†ÏËÐ(;X ú»*Ë/ˆWÊN.æÐù+‘p P–^¥dKÝÚûCeËæfQSZ(´&)¾@؜›^Ïã˜4™’æšzYk¦|˜)ˆ?p;~ï¥ØÖØr¦þsþîñ‡CBA…~Âźïêë™öŽÚ{?qCÆûËo
+á£8é2Æ}.³î4bÊg±¢‚NP#?ób o\/›a=üxEÄkԆ°’”Âl&*EŸ‡/ãè:x*‡É`›' bcî7©Ç¢親FòG‡Aãñ3?€$tBG£1råÑÜ/·ÌTl ,œ/¢WŠld<¶šS)øT³Võx¥j
+JA7 oŇ 9sa)3ÖB¬7L†CnxŸN:v(è3Fu@£|¢QþÀÂá±^9Õ<
+‡owJnÆ#º×—-”°'– ·ô ÅÓBè! ÁcqDìÁ[’AK^´ÑÆÜMšÐ#‘\H[&5»Äà áºR 6ÙR¢=m²Öƒ8)NQÆy„AÆ)Jœ’xjËþ÷†¡Œ`§°lÅ>2Ó¤Âr—ôK˜Šç–Ç)c€4oƒ!•î>³»äP­@%7h¨QXÞ§üOàl?ùt*4÷Œ*s5ÊÿWÓ`¨aÄwÓ5ôI7LÐÆg†
+ʧëu@ä—ƒ
+ÆÈ%Ý3É儾ø ÇЉˆb¦ ß"ž“A™„¢#p<0Dn]º1R‚ÑŏPÉB@GäÖb(–ɱx·ƒ#:ðȀ¸øA$‘àÒM¤ÅBGp¸Û¡Xn•gˆ3h°t•7.à±Aô‚Œ©p©·²epýàw¨ãM6fÅJ¤á1±sL
+Gw˜9j ‡ÚŽ¤i„žØjÕ
+¹klÀæx~T`†‡ï úâj‰¥‘Ò7ÅQ¦aCGúþ$dãܓa9ayáv9)¹»ócXxUGÇï«Ê¨g•g¶Éß14†ŠN¾ê'°—ñŸQ~͸²#r›Ek1X†Z{á n¿;!.ÀœÐIç_x¿–¯jÑ¢sûlË|Îï*bC*ö\íó~œ‡{Ó¯ó÷ÔW¿;µÂ¬þƒ‡ð$‘ò~ÎÈb a.hsxç-ô„TÃÒ(Xe;ž2´§i7۔p^ýƒÜ5ÌÏ%–ß¿Ý7c‡3]ªû¶
+ š}íG†X+{…e¿™$|ˆ*z²ïÄMP iÝÉ7Í3¸¼­t+y\9ëÜ ƒ<ðx +ÇÝór°‚årâìƒdàÂt¤ÞU½:gq8ëëkW IÚôû“æ ù9fÚ>˜žÂÃ…Oiñ˜Ys›iñÏf•¡­Ä{ 7{L‹«ÌO¯Òà¥ÿpêo`=x™>P ¥EgóøA·š&¶ãÞ퐎žú1
+ÿFãjÓË0Lûé $=äp6 ³@cÌ¢ÄÏhc’>G ÔS(ÒRØÃsbe´¤Å@S¤1ΔAZSÍE´šl°GoC‘€"æN/¡ŒíÐ'¶3âaÃ
+ßÓV˜o©°LšT`öBÚJŸ(VÊô?ŽÖ*´æÖlºö¶óBCs…PQØt¶÷/ýglûÏTŸ¹RÆ¢ØɧãŒ?ºîñ‹±›¯
+i1ABXBď‘A¬x놵$šÍeê·Ôþ¨ÙËFvÞK}ÉA¸“ö
+ã7°„uÓöä¸ñ5ÌÕ£Ó¥mÂÄÕaíîýÝ`e½PtÚg¿_…6¸ˆ·Ò_Ô«dÐBCÿNÜô+8¼O8güÇ`%¦Âx‚Ým˜õBèzxéiîs›id҃Ýю[êÓ2-ìÓé,–?TÒÎÿ³vðún¨-9´F¸Sy*œ,E¬1LÊHP؄)dg<€­¸ÐôË·] {" ’è!ՁÆ"æƒÏ¼>´ånOϓ¡‹;‰÷Û@5
+RtkÔ]®XC͎Ð7üT¾—á6pž¶€:ƒ‘àm¨zŜÏ--,æ Š*òë³ê²*Oœ;ÁÂ&'(9;’#ü Êyµ¾Ú!ìÕê¾#9}»´Ÿ¨ÿEû+ Æ8#0aY®ð­–¡Ýñ'|ˆ/`F‚f|äBS·p©¬º¶RË®g~{ÈcO(ïå=Ÿ[t¶"VH-<Xž¡añ»Jà÷8j8ØËúÀš¸ëpùGpJÈ¡b9öÐÿ†×ÏlQxH^©LŸhø #'GË0œí*ˆÅç<¡N|Î2MrD—TÁ—Fžñ•›”Ьÿ‚Àc½ª'ü›o‘jEŽ“üuÂ²[çHb= ¹ÙȦG¡Ñ0ŠÄàˆù¶É¤i5ð†ÏÀ
+Œj
+ b“¢#¢üXpÆêéhÔÏgzòZ
+«ùŽªÎŠ'Ü]íî-åÂٸܐrÓ\hÐÏety×
+Ü^¡Æcü—hn‚ØùŽË6¤É(Šã >/$,¥ºÇžç‹B/ˆmÐ .£•/éBL|Ã4uJ3§)fRRJf¦„R¾dٜºÄWŒY:Q—(.•H_ÄŠüЗs·ó̺Op?]‡sÿ÷œûÿ]ø©†L„9ˆNh"öà
+®C"õˆ DÍõ%¬ÓL>žLª1G‡as-£cð†ï,ڂýš¶åžYñ÷øêôέaR*ԑeõI½%ý²TXZœ_’ÁƒûÂ}!0L–¸ÁL{¡ÝÂç¸Ö*èG×
+FÈ¥6¹‡ö»ŸK*ù“·ˆ^g¨ÈJ•L¥ùéÙçyHA+½ì ÒÍm¶/½™=ãßFºF$*dSÙã¦û‚
+è³0Éb9•KK¹x‹Ì1(ùn^1΋)sº dl;zØfîàÍ÷z‡4³왫ʳ‹]wÚn=»Éà =e˜ô ­Ê_äžÁL5Á™%937óa_ èsw̶jÞVýÂR¬‰¿`ÂÀ¨„Wc…båëڑGNžÎôk_€¢ü1ì¥ÎëïLâtÚ¶„ºB¡ˆk¬ªl¬¯oߒÈ:(EÀ…Ãè¢êeS$ZŸG$‹!ÇíI"ò  Z=o7¶¤kïûÖVOÀ ÒÿòÎPg¬ÊÏÄçôiýó·¥ûÃ_4ÞHNåRÒÕøXéu(¦K„]s,9äó0¸øŸû%&Úߋ±Þ^e•Š qÞaÐû‡˜bÁ­ÄÏ°ëïÃÓÞ>†J­ê;;,$S»Š +ód|¤ŸÁm/¢›ö–[1O òÌËӌ
+238 0 obj<</Length 305/Filter/FlateDecode>>stream
+H‰T‘Moà †ïü
+¶B1=‚dÛ;_=‚ZöéšxhpôÆb0UR.MèšÿgBEGÝÚ/DŒLZ„ÎÛEç‡JoØýÆG»V[
+R»èڒKYÒ&‚=,%å M d-¤ Ô¤ó˜9{ä̊AŒ -tÁw|GÁ–2Z
+240 0 obj<</Length 896/Filter/FlateDecode>>stream
+H‰´VÛnG ý‚ý‡y” ˆž 9—ÇÔq‚0’Ô CQlÒºµ\¤ùûŽV«Ù(y’êA«9Ë9<äpH9s۝?¿væv×Y“Š£R²Ù6¿7݇îŸÎ™µéE“2S-S6ó”À‡Õd󟦯kO6˜è<̊W#}o^½ýºèΟ9ãÌâŒç®7õk(d#ÉQJ‘M”âTÌb۝_ì¢YîŒ%’}z'©>…‹Ù-ûnnÉZ â%ˆ»ÙՓ׉%ž-þê.Ý«1ð²Ï&q¨Â½…ç>S
+FQgÖØ~A ?'»¬¡¸*i šö0v&¹L%€‚Y(fìH¬à8F$\ Á“rØ´ù‚DO9"Äê#9áJ< GbñTðë+ÈH̖$ǘòV_ŽGøŠŠø–‰Q*¢UÆ1KÊJ¬Î§4•:áhÒŠE™sB®Ãˆ(s3¶Kìœ"¹PÑsVх«žpÚ#±¦0y
+腂«!ÙçÒD
+9Ò¦b*EՅb)´qH©¹ Õï‘#ÄD¹]O öœŽ8¤ )H|{L#?6×d:K%·Y€QÉaËÑõàçhÓïPWi4J„+dPk’D«(uÖäË@<nì•EëΈ¨´ZÎâ9ÎÍéˆEO‘/x6•[H‡bœôòHP¦¡:Ë戄Ú9Áu
+244 0 obj<</Length 1203/Filter/FlateDecode>>stream
+H‰tVÛrÛ6ýþÃ>*ƕ &O©dÚ©O¤™v&ÉLÁÞJÐVÔ¿éGõº)Kr’'qÀÙÅ9gI™’pª¡(“ÐdŒ2R3Çuf4ъAÁˆ)KŒåD(
+ói}:CVÄX‘R0P†“bA˜aÇõÒUœî?-_gwY¡ˆ â©ŸCÈ qA±q<¯
+bø ÞÙñO3vÄ+‰äÓú´Ž)‹x?Íþáü!|*_"æ¬\DËkAÄñþœh„Á’08\dTnÔÏVޅMR(µ9$°™Ä`Ȇ™Úá“:H‡'‰sŒz†Õ|¢œ&É–œ%ŸÍ $%Ŝ§2O O‰c#ȋVçuõ¬ËYb®šá‚Hú´çÙíÿÎ)@—’hSBA%)!×Zc×)hƒ–Ä•&ûÚG°gŽÛ ›âÂÅÛ‡ûýºÎ.ÞH`°FM
+‰¯×c—«Ÿ2¶º|‡4ýŽ·ÿ‚9ïˆ0
+×ðñ3…M¦‘
+·{@ã4>Ðë_Î|K(×:A¶h 4ӈݶÎm=…6÷mtC‹Œ<úë`3D.¿­ ¸Þ@ '/¥>–óþ°ócµ ûúõ͇÷×Îqã G ¡ÊbëÚdi,û6õ1g;|u#úҏ[àˆó€@y?t'í ûf֘ ô~°Mcok­p<"S¾…wëÕe*róê#>ÙaÈé’øŽz®*Nœ¯÷0‹NÂCµP‰æØj"½·í%»ï–P=„±k{ì·¾
+245 0 obj<</Subtype/Type1C/Length 914/Filter/FlateDecode>>stream
+ÙþmŽ0Œízle][¯Mm禛,C¦ÓÉXÑfаR–ܜN·‰ ?ÀŒAŒ1YâüðÞímÕk¿}?ü’÷yžßŸ'²t€ ˆÇªËÊ·UÕ¬®ì^éY§½Æ+ɳœnñ
+G(˳”/Å%Ø·pt¡ŽDÞGБŽ µ‚‡¢³{ Ìéò˶¦fÜ׸®+ÞT”ŸÆ,Ncq!,µ:-Üíw{¤V7ÜæhtÊ.§löHÖKív¸+­à†»$·${µj&ÇÖh†674Cl¶J­f¹:ÀJ›Ãéñ»$XZÍÿíÀrAX žëAØ6ƒlmkÀ‚ |æ‰åÄû:QW¥{M‡W–*Ùj8™
+S³W5õ¤rqmÀ?Ô YÌíÔ¼I§1™20X¤Öùê^\ÏÕ쏌Û×ŎéØ߯'.ñ±èð‰QîëD»ýŒlëùÃf=©CW婆1ý7;·œ9qKKåa{yK>^ÄâEт™
+249 0 obj<</Length 260/Filter/FlateDecode>>stream
+250 0 obj<</Length 963/Filter/FlateDecode>>stream
+´Ó Ù Z[šÕ—„#X—“@xª1aG:ݔY½…è1«Óefm+t·µBÁaÄõ\ˆÏTGÉ
+251 0 obj<</Length 1051/Filter/FlateDecode>>stream
+H‰ŒUˎÛFüþCšéyÈ%ë1œ¬€‚‰ÒÒÑRŠ(Ûùÿiª‡¢¨åb‘œ(5»jjº«›Ëw•­!­ëHË7ÕB+­µ§åªzu×mwmÿpóÍò£Ä±‰FY£í”Kê»úPwMßHêݲú»²&*ȹ "žl³ÒŽ6)Ÿ›ê7ê*›£
+6’³¬²Áë!xhåcÐ,iÖ•ó”òXmª_*³2Î\òz†œ‘ òêò>+F®u陰¹„APbr*æDA;…’Å%‚Ñ3
+Ž7åùÏ
+Ɯáaò*ûŒˆÃHÇ*`Z®#OQ…)EŨƒñ«M–•M8«Þx«,Ë]¦HÀ·#”ÈSTa2â0ͤ½Òl¯™.‘ Ó %LÆc½+:}¶`B†Â}‰X©‚»D>Rò†™x„Û”îŒ<8ßeåÒÄ#ŠküB4F"X‡ Ú«ËF˜‘R¢½hõ™hˆ q:œ™®QÂÄì‹eÊuYÇ,Ó8–[Ú;E¤H©Dž¢Š¦Œ‘ ñš c—S¾fºDF¦9j`
+(!œ dÑ “9Sš Ó9Âf,÷¡
+“ÁÅø+£b
+¦/¸I>FŒËYªMÿ
+256 0 obj<</Subtype/Type1C/Length 921/Filter/FlateDecode>>stream
+Š¬m# n
+,¬SAB”jJ€È:Ä:×-)!!qÆB¡+›º=ÌÇLq³™Sƒwn¸Äx%WÔtê4ÃA܃$>tÄyîå´Ñ_»lñÁø{>ŸïŸó;„ÉÓ0„Ò'Îæ–Çïkôt÷{‚ÞN‡ß×åñõµx_Ølí÷öºÙ1‹b&ʖ<¥ÄP„õعvtí1œùðüÆ3k‘MŒ–íŽŽ[n›·Ïæ¶î.O;ð¢Í¿Ïöhw·×Óesø½þ€;èõû*ÿÃêÿRÐG˜MLSÆÜÍleª˜ŒÙÉ<ÈÔ2hFÃä3ÍÌ)¢#?™ÑiBš3š_µw¸Ž©Ÿˆ¤Ni[8¦|$‚W$à—µÊ~5eÓC<|™IÕ¡v~µ®`yH·‡Å#ñ‰ÓãïEuéïxÊJjþç?‰$!ÃпaÅNá¯pŽ—â9¢[]…
+»L¸±uoù]–ºÚ'ý¸Þô4/D%µZº ’yÎRý¥œ~šêK¯›¸ªPÌ3cÍ$ôŸz :•°WOZe
+„š|#Ãg”¹’cþ¤ÌÛ7™Lñ(3j1[K1µh‚ƒ“™"V ^Ë$²ñhýaJNçÈ ”|…’oòûb¡xìôèÊð‚ý]Ýÿ˱“Ë—LpÅÇXbÁrª7¸¥ÜsÈzð©Q,Œ·è•9#šPóÚKä ±Â]Ÿó¡Æ*ÜÚô2ÌP«9«sÔj Se„-5 Ԝµ¸¦ÙÆxßû?˜?_ºzÞõЖyÖEꯠތBÃô7 ɎT§uÙ»8ˆ¬©²Õµ½¬ëç•qK3‡›CÉmPb†;¯.‚1»ÿ˜j϶ƒÝ·OçUj؎uF)½Õõ™FYmä…ðoj¯H”©Ü„H'£ÆØÂá#™
+éaƒ*TÎÿ`cÄ
+258 0 obj<</Length 269/Filter/FlateDecode>>stream
+(ì?? û"Fdw—Õ"ÑηēÂÙ
+259 0 obj<</Length 997/Filter/FlateDecode>>stream
+H‰lUËnc7 ý‚ûZÚ¬EŠ’–éØd0} 6
+PÄGÞ;Y œKLH.K ¼Nï÷*sFF7 ÅZ-нӚÖRluI(›[íøä%#GZŽ¥Ö%£ÁÉ
+_¥ðS˜¨—ˆ.„¬% y‡°¡i9E!
+Èx[‘3Sz½! ­–æ[kkR†lŒeȆ¨¹ ebÊã`× 6+²Ø€§9A`j[l2º³"7ß¾\›±|(ªëš¢2îê‚Øü"–YCÅr¶=–š7ä: {q<ªR†È¯"e¬âÿˆØ¶ÏfšÞ7Äl¬«³„öºê.ˆ¹³~+ÆfšÖS^L:H¸"ó¸«oÈ,º+ ˜æ•Cmя@ТT¹Ò°s—1?%žb|s…ÜžÚ0¸U'Oƒ ãB}€0®ògA†8BP-߀
+260 0 obj<</Length 1106/Filter/FlateDecode>>stream
+P %•2Q §ªn«cw¸þ®º¡¢ ¤3A蘤%¿ÞYÖʔEé¼ÿþYõÕ§¡òRï…Âþ%AVI£¤’TÁj1üªT®w\µÝŽË-”$N¨¥ö>ˆ¡­êaµYmGgŒiæ|ì¶Ý¡vù®¹Ê¥œ 2zí„vIšd—ûQ·«~¿n¿ßý>|©†ß`Üt¤Ðñb«_êþÐlú—»’™|ÔÂHtN¹ðòssh–C hÌnÕ´í¡ë{vi#]Ô^À«cñîWÏÝzìG)=;¹Üµ]vi‡^U@I;•ì¿o—ì̔çHeÜ»œÁÝæ܇]ñê(}
+Id˜Í‡x;ƒø8±~^á¥Þ7)MÒn7ⓝ»¾-¥¥ÕÞÍSú˜ ¦³CoÖC' -YS„Ün ÷,7›ÌµÜ®Ø·[$Ô#­m³_÷Íãxͬ…m7|Ûž²×ÊÀ:ƒj¬ò³Ô»s›¯Ïٓ¤‰2'‰Jãm“éZÀð|™œ±#•ýÐm
+®Ìþz×ßÜÀÄhÅÂá[ˆ÷³$¼@A–@ª”êÑË(:“<»’·@ßl2]UZ{€c„ƐiÌS„h,oMÜDñzeI2ZbËÍ©×êgE +Cƒ{­2ùå±Ò8ˆhJ­¢;[^?¢;y,6‡öÉÉ Û÷Ë7/NoȯMÀA|“v!;ŒÕÛéîl¤‹À‡™k1ù¢å†§âضYÅAZÃÓÈù|¾yÜæÑGgd¼É> ­-Ÿƒ/Èd0oê2ÃíxÊaWªÈ‡T
+261 0 obj<</Length 783/Filter/FlateDecode>>stream
+"ãŸY‡Œe”"bT0Â#rcՊ‹Ñ¶ãIOJ»aÔ¶Ýî¶.47OÈl511š$“˜ýÄ4 ³Uc
+Š•ž˜B"ìö`°ÐmFwd6jD(]+e*˜è¼Ž€Ý(±ovѶ<OÈl5Ï Ñ[[B!.¥•þŠ@B#¹:‘ÖôÃ<—»ºPÄC[•ùšN äSë'2Öd½bŠYŒ´#N†ÜXÝÑh%
+262 0 obj<</Length 759/Filter/FlateDecode>>stream
+H‰ÔUËnAü‚ý‡>„;Óóꙣ !2„² gˉ‘Á°ƒø}jƎ3Dâ@$8íNmõ»zÖÅÀ’YqÍ;ñbÒo“9‹­ˆe_€ÄÑ;ÓûÐÀÎïžäþV¤À9كPÊ)ŃP™½”P†E¥ j8GßrÔ"H8@ ‡TòZÎ>Ã[7w)fóŸe¸%5 ÞYe–PüZvA+’X¬ÔØ^bëùÖè1+^£î«A<6Å®¯ÿ”و¶“QE»Z…¹d¸x‘bŸZ`ßáC'óGuœ„u­ã„‰ëÁb¥?ñÀó-rëF!k•›ÛnÖÙSv‘~þåtÐ1íȏväß:¡upBš<kNçD=ńb!Ò,œñeÑ}¤e=[6Ž"Rëὐʇã“M¤“!ae±w¡<­@Ãå|¦áÉŒ_áœþuÇgCKŸ6]œÔ’³ n-c؆H=„mªþ‡auR¬
+263 0 obj<</Subtype/Type1C/Length 3951/Filter/FlateDecode>>stream
+¨‘6Šx‰
+®[\ÐÈ_D¦)QNG@BaFXB:aõ£Dq9¹§•’Ì”ÕEã®úý7 Á,­wÐ!wSÀGJf
+ޓeAŒugÕÕ¤&¥çXÓśfxŽ`D#iòV?,¥ÐŽÝ'›Ú-gÎl\ùó¸-Ëv)dÔIG:윚S“R°fßÁŠ¿ñ`Mó»-z&Ây<Ç2M‚dܧ ,CÐ_©Ñ"‘:-îƒYR@1CÆ3ÃGÜF,¯Ngt¢Gƒ­Â‰÷Oýê„å“cYi‹í9)¹öÆSUʎº;̔[!OÛ7‰oÁ$„ßd飭ɲhÙ;Yʑï\C¬s‰È ƒ‘_h`5Å*Z…b¤0žáþ,_9™›žZ˜›²4«ír×Ñóww(ha¬0¦ˆLçèU -!-3½ˆöÂDØ ã⾝ ‰¢©d®­Ê‘®<ÙÞòÇ˙–Žŵëû™Žnõ¦F¬¶ÈäERÅ­¥j=
+Å=¨ù9žë1Áy“b]ÚÇa„`´é8”Ìè& ƒ’ÉçpÂ"/¨Nj¾mþ}ۇ½]§ó®\[°â?©°gä9‡®(W¶·5_¶\j-^¾4§t…Bi™²t7!?Û6ÅLáðOdµ>¦‡°>ʾwœeþ¡ùè•Ûf¤yHY£šO¾~Ouù16VfÕ(Æá5Skƒ3ËVI*úUyñ­Ý×O´Þè8o_’Q’•P§P eË4æC˜²ñªK ÅXa/™ !E’1–âÆö“fWOßÙý§»•ðw fÇZr
+¨í? ¶žY•Žþ:òÔäiÐäƒmº_@»å{a‡ˆÎQì­æ°Ï*òÙFZJÇ°[u$93IR3ju™ÌȮÃ[ø|]£é*P‹
+é·8ÇþŸhÍK ¬k%HØçô°†aTÐq/E C†UŒËȓŒ©:A½.¿ØÙ6&ØLöÈ@Š¡{òp?øí@‚LåÆÜ
+ªCù3ð|Öµ~¨ÃBòB2íS؞7"›mÊD¶•= 5k5¸ úʘاë¸W37Ù¾6C v²@9<t°?ùáx-è)Ùúf¨Œëc&` C¸Á–¡BƒVyp»Úʖ,ulˆWƋŸÒy¿0,i÷Êݛ¼}X,ÞÙòWœqLùÝUÅyƹ’ÝECi¸×=Ìîd+Tüˆ‰b‘
+È7x|EÅ腢"pà¢G‚'
+¶à]lp×wø`7>~ÆP£öUáãâw•Y'…ñÛ¾ƒÆ·`š…†ÑÇÔ(¼Üñºã€ÕøÚþ†µ¸6,=Èæ{w¿Wÿ¶Üñ‡/QŒ#´°K¬
+·WÜ>×zê¬Ò˜Æ±`ä¾×µu]º³õR¹»8u±¬3Ê Sœsq.üÃØ)HB’ÓtØ£w¼…ˆÅBÊÐ.žu/ïê³|)ËàK-6g%+%e•f­QGð+1¦ôêéß8?èJHK-‹Qɾ?õtü6ÐÓßø{²›§ý7E˜eÉçÐ_ÆEh ÀŒS0<0á,<Û¦b.ÏZÖì(É͐“7öÿi åÖpg[EY‹ÚòjÃ+µ›½þ'ô
+;œH””K×îë aÁ];؟³²5NFßiÈáb ú3ÓœÁ^ׅãj´ÀzÐ@4Sváԙö‹—/;Íɛ“#õÀ×¢O¾ÿ˜ñ Em…í0$ž>|xàø±ÕY
+X&‰Z‡ã@ÂLÃPÄ_`Fi:MªL<¦#*fñìí|ÛFÛz9=ëýu Øÿ½GÁÏ8LÁ®…?²oà=Í%²¼ÑoÖ\’ÁoŽ€OFnÄ$5½yvù²;,ZÁ—D]>¸’¼Óû!€ZB ¦¥¾‚tC+apS“Ä‹éæ´âô„:5­¶ðx¿t©½ÿüë
+‡iS¬žÓmm²øqÝ!s¸´nuZfî±»g]ׯ*x'‹¦YÔ a`ºCB/„Ž×€IH6ãu ø,¹Š*Ì4~ø_Pðهԡ?ê!nr°ùÆÁ„°FeÏAÀB ëMJDABRͳë÷î'D֓‘ÿÑõ+‡ú>:uÄBðzd^vºâƒ#5Ú¼=ßûÊ=îß)÷pûÁ<v?ÙÓ¯'dzàŽýë^Geõ^5¡Önße—YUè2Ëo
+àm¸­ßñ˜*®çÍûúTHýx?Mµ}CÂÑ{7 ×c….‡^à¹8…ÄŔ%ZZé£YÁ È`™ÚOTd¬Ý<›j]•²¼¨óšGhåšÀ*pÚP4ð
+óýâ„óZ¿Ê&…ÓùC†^Rœ†Fí¶'¤›ÀFšLsq˜ÍÏÆÑY0ÊéC£ ¤ìHi»þ-yjçtOQ|(Þäªùp“ù]äü>G
+264 0 obj<</Subtype/Type1C/Length 4935/Filter/FlateDecode>>stream
+H‰lT{TWŸ!™I  ÃàšH&F”GQäÐ
+ åƚ
+®#n©nEnÍn2‰,FV(k’]”Ýs/rïöðôXãÑîñL^.?*ðôñ\è¹Ò󒗏—Þ«Ý{‚w¢w£÷%…D¬X­Ø§d¤L³†9ÉØ|d>³}Ö³2¼-^h©ï‚Ò®ÃÎ@^vƑ.XÓ%²Oƒ»lؼذ™ý±Ã®ö—Ð?“۞ɚÛó22–æfdæžî²œ:mápìf‡cûgΌ›Ö;<Üß7¬ÆÙH°yíÝÝí§»»Oçfdäæep|2|Å.¡“_ꩳ´ÜÁòïÃZ,h~<¤è-heŠ˜0Ý^Àºñá_Óúšwßݬ^%9Öøåa³RŽ_ØõÍdgªíëX$Ð?'aŠ3Ï¡7¸`ˆú 
+~i³•0Ç ³FA­þ†Ñ Ìbÿ 0 R”™Þè!ê\úúÃpœ­Ä98+°2> Z1 ’mЁóŽ1‹˜½çíJ!¹ˆõ1ÓZŒÿyއDëg±ÏþzCÒ:
+\uè*‘wÔ7Ã2 tÀ!é`D£Œ`´ ÒiAýú!&µŠ aˆýc¾Psž<‰Ž@»>:/ùô´WÀøºCñáÎ'½:hÁQA–,7½¼B}KËß3ñ`"[­ðÔ*âsá1‹Úµ…!¨Òƒ ÀÌC
+úB˜
+éY“×7ó™ e§U¾V{v.]ÉÑÔJuð–D^oâGLŠS¶e68w…¹~|;ºõâíªA[N¨ÐK0c8æûåK¶älO–ò:“ÏþëåãG¾i‘>€å'!] Dì jÕÌ"äÂB‘ã&Ðqö˜f+˜¬V†‡?Ã÷,Ó^{T¸ii䎘ySUSæw½àRhŒlê͆LÝq{¤Ê‹U7¦T3ëmvö*Á-ì[edÔêW¨—­¨ÎMUZé¡s¾»Õ³êu$"ËQö¡Z 
+3L¼Û$Œ TÇ|­ÿÐįΠñ–£˜Z ý>VìpÃ=gvh‚,ɧYE-Ââ´Ý?çÂDH_܇@˜:}ٔÂͅ‹¹6ØLA» ¢3dG-u¦õ̾ ª¶8m@J´64éÔèÆq¶OL`0)ŽZS† ÏÊ<ãëù,P£,(R¡~)®Áhlx“aʝAÐÂä¨û¨õ×eeë9˜øq¤AœªÿIJ„O8æ"¡? .g"9KŠ2”®¹9jx4^Ð1+ !WDÝv9ËKiT 5òÅOßÃ|éz¨¯Ãç°ÖK-Žìq¢fì4)ڄ@«µÈÊüá!;Òÿvàô„”š7/þÜ{ò!ǔÔA7ûã7ºù‹
+bæ&ü{ðŽµí&‡$~Î2W£Kò#”¨·Ä§üð:¨o¿}1f¿š)¹|èÀY¡BÚ3H¨Q´#lN°2â_F[¾Úùs ž9U¾ÿ¦ªt@(‹’Ýw³ÁEA‚¯½à}È˄pÌÄñ8ýî‡ÁŸî^h½zœkØF!óA¦a´jîŠ#ý8ækYfý£mÝó§(C2¢üÓ­/ÔÌ3péì¢A=n5èR<íeö¾²“ß˲¯¬÷Ûáîº'Ü]ld&ŸOÿ
+éø ™àëDµ‹å£ ²JuXIåHø:Ü$|É;ÀËJËø6þ/gué|Jñ/ƒWgð7 EX„J*EÂGaš#
+¶"› HüÈÂ|î®ÚÇ;qsGóOÄF ^ 2­{ý<ÔrKCµcËԂßÃ]ÚØÄ5H˜揻N<œÜ‹sÕØø²€–ƒd½Ùîk&OÙDö`~ AUHÜÄ@f¡ÿ܏ùC˜=®ÀäæÓHc"ÐK…¹‹`¼1ýBnñày}zîç„ëÍü3yËÆçÚD0à;:òIß%îÒµ½ÏG•?T€&¤Gݞ»3Z…Û…lNÞ´åüÖªãܓì¢D« ªDÏזªËçlMSa-ßñ›©"þ²¯Ù­¼Äì@#ÿÆ«(ªó
+¢^¢+fcL4ND$1@³Â*~²ÝÌÁ8x§xê°hˆÂpŸB:y´_Àt<M‹¦ kÌ{ÈK„cô˜ Ö¤œš¨œš,P ùÜà½÷ÐÁ/v™ŸT‘!X¾ý8vŸTõ ŠG:õU±E{6ז€ªôzñƒð£NwëNžô‚qamªÅST4Ü"ÛKö8Ó%;]ʶðCgà·Nu,õ¤ÆÂqÛ$ôʇtmï‡ÆЊüœ‡Ùø–t‰çò¨§.âԈ`‰?Š§åÙ0ß÷Š™7ƒ°{kj)ÓRJ,ê}JOPoA¡ÉVó¦Ëß5¨îXä(‹ú|.`êà˜éC/A§•ç%Ù8ŒËŒÄôŸÝ 3µrBGÞ²:Tûåkj¨Ñô±PIŠE
+é›2燊覧…UàÐ Ž0æVËâ¸é߶ÙÖ ¯¼òi›èžˆŒß´ДiASlzn"¨ºüÑY‚Dǎ 'EÚuƒ/]¦õ¢»nÖYNI,Ÿ5ÙlÍÑÙ}Ó2#ÌnU5v‚rÀ*8'<ÝÕ6ðZ‡¶H?©S/@zyØsôqâtÃ@ º†£
+ƶ÷=­•’Ùø¢ô¥48Ý8–Kvñ–³Œ~^õĬ~"ç ¶<³œ÷ÌèßÉ5U4·Wï.-Ù¥½ÀUnØP^$F¯ùU¤§§¦Â¼Vð!È–·¾©ò6U¹S@ç2gn¯@³Ê,ïëy.ÓˆîÄ9–²–¼˜º£“É¡o
+«ñI\ %—ÊX£ÎÕ3DçJ½ÙÃ̙™Ë½çÎÌwÎ÷}Ik£ìnüðt°;ÚÃÍ5¯ÚÿŸ…›
+nÇù2Ž2œwL›6HäR0¢A=&é݈‰ðhF¬.…u™ËÈˆÍàg~²1eÞ;UXàõÞU &}©ù©É”rúƒ5š¿ftB5o†éš0‚¤•¡ºÅ)?âaØb&8Þ³ )°=-
+265 0 obj<</Length 2575/Filter/FlateDecode/N 3/Alternate/DeviceRGB>>stream
+[€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤ 
+@8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ
+Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)뫔ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW=
+߁Þô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(Š‡R¡,¨*T2B-Ð
+»—½‡}Ž}ŸCâ¸qâ9
+N'çÎ)Î].ÂuæJ¸rî
+î÷ wšGä xR^¯‡÷[ÞoƜchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö
+nßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾
+266 0 obj<</Subtype/Type1C/Length 4171/Filter/FlateDecode>>stream
+X9
+ìë–Ád'b0t¶\â™^Eî…²½¬ž†"ãE«vꍜžl`Ÿ kiN`(ø@ðßa9„½>ë:;
+ªW$dÆ¥ðEtÙwÿ¨¼¡ÐUžÚ4ŒoO]Ü¢r¾~±äöôR×Å·Ÿg^!û)&Cˆ¹ÃÆqí$X
+¨o]¨k>Ãké…îŽæbv§,Y¦aJd6uðËè)·#s´.H² Æì†x æÌÏûº™u0Y\ȎŽ!SÝmz{VÁ{:`tdµè*ÀĚ\cDWËу
+¢¥ë¶Á ~PEVŠ›eà—Ø!юÒÒC&;
+ljñ,®ɧnÓíGÁ6ºó¨N×ó)3Ø­8ipì`¿gV-ÙäÀnÔà˜E©(çý •6XÂÉv9óäù£|É5Û°-ãùt“Ëìo`jaÅà†;^Ҍ\¾W_ç¾úfž.¡kH\^£Aߑ|‰æÁí£§¼-€´;Å ¨`gf¡
+-58÷ä‚üå~Øž/Ïyyâ˜â°×¨ÑàꭘŽÓqv †4p`"Œ)ä¥|%£Ê@ö
+áÖ©”Á>•`@ã\û@JGã,ë@
+eö\‹³
+X‘ÅAâ^XMVÐ=è1—d:IRè ‰`¹wœ‚
+|!H™è2Àˆ0PpŽÌ]EÙ ”’Œ<áù¯Ìé÷Ô4
+u_úö®
+†©Å‰<ö#äµruѯtb
+Ò*TÉFù?¨ð&—½>=wúÿÞ=«]—M&·&Æ=§žqMŠù«ê?*HqVPÉ×ê<Íÿ8û|]÷ˆ–æ–Á3ΉJ2=9·¢,¬ “Õõô~žw‰P¥ÃÞ§ÂwJéUe;¡¯îký‹/nuh]vÇ¡3ÏÚUàç_ýyLº ohxþá ú·¦µè‚*tÙú¹€´CGº«QV߈±Àž¶8 Û‰D’B*ÖUÜS=©k{ʳѝ&MpÐFCÏ¢I±‡ݧ&3ìz7îå
+¤G9ínõ$
+j°–7Èî‰rÈÒp>Öò®ô·Û €þ×#BžÅâ¬6ô×vÙË}´Œ{çfs\£”bVž㿃I­‘½_–[^»î3>=;uc‚z~vm³eß±k'„ /î¿P®`ýp0œ©Tå‰Ú\öùê]Bq†A[¡ÏËÿ2· &cÑƘ [¢IÎZª
+±çŠÝe“¼²*–‘ž\P.l[^ð85Rxø,F‚¬Hh3T†BWé煋ŸU£NÀ^èaĉdÕ).tý¦ÿ/Œuï0&I{¹7;ÑkÊäÝ8ßa,òÁïÑýB˜
+.È·r:ºjíÒ£KÕ84g¢å»q »r©¼þ1lÔbњ«é ùf˜g–AKp¾†?s¯“A‰½Ñ/琓t yÁªùå%‘¡9ù[&U#½&ß`/{͜e7¸þü¢™™¼;jÌàA
+ž5ÁUª4Ž%)mu4HÖ&B©ÃÍSšÉ\>V}¾YÝaœ*Øú‰Ò'̅ë*ùô KöÅoÕiק.WÀÍ»Í%•–½êR>º&²¿€—§dÒØL ;¢Í:ˆ˜£®?Ò­î bÑJ®põ„8¦å)ôÃjª…ÌüJÜÐr2w8÷QR\w^ø݁¬*±I)Š q|zL^ŸB˙Zêî—,œÇÛ‰’7óCÃ¥[âáX-o/JAÌO)mC£c6Ä'ó:ZLZU§^—±bÃ‚>v 5;úl!Fdëá#ɗk½Ö >ØÆÛ‹Ò\æOšÆ ãS—§,ìífç9'1M"l$U¤mæàa<ñýnÙ0Ð/ƒhˆö.Æé0AЛ9ìe„‰OÁ÷Ðˀ~£‚õ8{݉Hi©
+¨ä:óÀÜÞìÀ‰S¦â(”aO#vòÌá–WTe™Ô0j„+ô܁蛐–*41l„Æž} ©*ërl‹ò¶ÈÞÉÄEÐð;͎ø©ZüYÇ·0¡… ™k5
+"ÎSV^‹aæÕ¥"Û^Gz°‹è_^Qi’´á<{|Frý÷ùB=ðJ|ð—–æ¿AÏàÚaõdÁ$X{¼NÕ|òÜ·-•Z¿JwE]÷ãÙö!ŸFx—
+îÁùRœYv“ôI{‰ÛTµ}“Q‘ºSwêˆJò}hž£58úÓè&ÛHfQiº9‹/ÛvÞXV¤xÇÙ!ä¤„y4xÛLÄÛm¢"hìa‹tHû»°}ðV7<-4zC-ðp
+267 0 obj<</Subtype/Type1C/Length 4324/Filter/FlateDecode>>stream
+H‰ŒU{TSg¿—ä~‰<BÈåÆÓsïjDŒŠEÝEYAQßÖS!$‚ä±ëc݊/@»¶§Øvµ´‹T
+U¬RheE]ÙU±߬ں˺µºâƒŠsaÂ9û{¶{úמä›s3ßÌdæ7¿™Ë2J†eYý‚™sSfŽKtä9
+„¦ –àá:Ƈe«Ît”ºr²² ¥°Ì±RÄ´©?CršWN{UŠ³;miI©»Ð±Ö-ÍÍÏtº
+{ä«ñ]à[ê{Ó/Øo–ŸÝo«_•¿Þßíß` (8¤ Ó¬ÖìÑ
+z'èšÎ ³{"4ô i›{aRo™Wè>òÊç^Áß•Ë Výuô“ÇßÜyúdê×ac¦E…šzõÍGöّìU«²²ÓÓ³7›ø6O' ü¦wåf˜'ÄÏÈÁµÜuBÁAä×u‚ħó՝ò?¦‹ìt”eÍ-R[Ug«n7€Îð %•0¥h ¾˜= f|…v!øù`„Ld¶ƒ± †›Ì$µS1WpE7†ßCӏŽN=ô»„kȟG#f0scq¸©—|Úo¨Á
+¢)¥\ J¶̐N‹¨‡ÇVÞB5DCô-PC%Tƀ
+£1:UXi³’>è¼}ûƒÙ˜„I뢣×_†$“¦ºHÞ؁Œß¤è”7
+í\%Y¿8ÃN}Œ¼'|Ç3‹ÃhÀ â–j(í}ô¨(µT—áe߯ä.šÀ×c i•qª=QqÀx½.)ù—öʼnóó>m/Q"8j/psAaG+Lz‘èÿåøÙ¹E¥ëÄ¡È{A™UäeîcÛAÇ UÞ-×
+›nl¬¶UΎz;߈»Jq åkB&RâŒxø=Lù;} Àᘘì5ëJL;+¹ûoTÿ­±í 3s¸ÏãVÚ­‰«ÎtÝ;Ýpª¹=?b¨÷W@ËB-A®é_ xv¨å ¤$ál,ڀj0“?PRÆÃêK×ÕC9ºû`Mr¶Ê@3 ?mY/mY½%¤ä}ÞÔÖpäBKcÎ2kîê¥"ß ;1K¸ïh™ó íÀÙºš¶s†žéÝ8µ–x ˜[÷ڟ&¾™Ôò YËô£Ì„…í ýKDs™æLŽO²·\êjm8ù·ƒ R_rG¢g7¨Ø:úd÷6!Vv
+Ï.î?rõpjTä²ì´å+>|aBvÈUu'@€‚A>z²öã.ÍQ~·ÌrâLՉz±r'‡cw-J[dLÏ«n}]¬ð.:P¡ºû`á«aÛÿŽ!Ÿ.¿¥üq(¥nšC§ò˜\¡Ë‘‚§•rAFùÓæcJ¾0:K‹‹Ù÷ûcPaì'Ÿc‘ßoã0Žà[ƒ6&˜'Ÿ*É=lä0‰:Ó)„¥@é«Õݤ£O7]—þùM=œ%0æӚcÇÅ£<}Öp¥ðòä/×½Û~¨×pý5ðÁY&|FÀì ` ៟>íNŽÏȍ1™Èk”0ƒðò¥¦Ò…‹W.qý»ÐË[é^j† Šþr±Ð÷úÃ\#ÎÇÑŒ{°F ‰Ïè@½Z'¢…L.]´rªy+ÝB¬ê;q´F¥W‰CéËk(ánÂ8OcÒ¬;l9.ºhCRÁ†ÛD¼Lë@­@i×ñôט¾6 Dˆ¡Dã.Ð3xo…ü´ß&xjmrðž‘ô®xì…qrÑDS¨ÏPã_ ÓJ
+:©n:¼9hóö­»ø)Ep€[D¥ÕBœÂ ØV9»¢ ŽÎCŸMkŒ£¥“t:“_!ò_ôŒpŠ4Âc
+Ë(,0â¶
+PƒozpÃû©.ê·ÿð" %¿¼
+äÕw{õ[`»pù*¸ðË^øÝÕÔ䕅á¿Z3Jø¡›ÀA¨‚ . ¢@­ë[ÑúŠŠ2ˆèj@-µ[I‚ÅF°Eâ³ê
+¢¸ÂꪴÁÇZªø¨à£¨Kg•ž?=éºç±3ÎìdæOþ{î¹ç|ßw¾+GÂ)ø›€3îÅjª»©Ô&jë=뚼Š&ç‚Z™¼M Ǒ¶Ñ–CH­yü•d†®¶z!›¡›\/`
+3ŽÂðèֆz=¶Øk(kèÝ·T+VÄ&™"Ёã´
+ qv–ùÂ)n™ðê ‡a0eÞ¿ÑyíX¦‡ð"–d1•¿Ð‚6©dJ¹¤yñϲÊ+7µ¡/N—ð%ÇóU‘¢MVµ~9}I̒•#ôêÕiąÏiƒ
+Óµ£"×Å »¡©Ò(q^È­TkXÏqׇ,$ZHI’m­vXñvübP\'&”sîë9mÉ,$av¿Ø©';$ù#z^©Ê‰.œZñ¡cÌ¥gëu0X LÕópY”Ðcxóߕ Êà/\Ø|láB7„ð–g‚²‚»~í¯¤±Kj–™åL HŽ9¬ ¥±7ðŸB0Ÿ¯ `ïÚô'në˜ÍÖ?Þ|,L–iN²õÚ4&3Š¾Ì¼U;XötÄ֝HU£”Ãd'Rà™]_ÝqºÂÇ2HÁç¸Á¦ šAÈ&+’-Àø׋a/S”ˆ°Yž!àH†Þ؀~Ð `,³mº€eœWd+g=±.¢¨µ&Z™½Ÿ ñ¿þ`|‚½Ùï¿Ó úŠØ{õGã à¿÷©U˜ä³Jù,ökmgg«Ô¡Å´µƒË~BÈ4ðԤɛeÜѳ4Š¤Fø3†­—@ÇæZN\Ó=¿eJòʬ5[ôè’&gŽ›é£ÕTcÏÛóoµWŸüú¤IۚœóÉöUŽ0¨˜­ËË(¨×¢ç}QSý§ ‹&®\RXSwbç™|©.¿4¿à GuD¨ü Íą(ƒËw”C!´F~
+Å «ü‚‚oܼWö㓶‘afÈóD"³fñÊS¥©¹œ£š|øâÚ:7ÒÒ0Áç:%ÌY¶FŸÍÔnÙ%·°Þ„D˜)®Z=6¦o6¨êK[[¥†Ü’¸¼DGðfž‰Ò±0¾EÓ
+Ý®', c:nQÐû܁äñaǐbvÒ\xZª™7¦™êMNÀžú#}›m1@wžLî$‹á õ¿xA/—JJ(NÚ¢yJøÞ/jZ"³UGÖ-ªØ}ÔI?ƒëÝ#ÇK¹»¯
+]º4*|ÓÞ½ŸJÄ$òÀqôÔAá6|¤§(f•MÀ
+½ëŽù¡*6tÌêðrmÃSn]ÑÛµ#Š¶2(¨§ñ\ÞOÈ"8…ç3jòâÓ¥l؎^\塎µœ®ºØ–3n±„M<{>Çäý†;àÆ/xîW)c![Þ¯Ò ÜIy!€×ï*¯Í{yD’‹9<ç>àìr‰vÕõçê¡©±^îNcØâ)©é҅¥‰ûFêOKL'´iZ~@-ß š©Óuŧïš&̗ð{ú溪~Ï©kǏ¤F¾J3âõ¯Î¨©þýMN"{Í4ÍÝëTšê7Jxt&4v;Ÿ#æ_ÜFġ؊>ô‡bƁ8|è#¶Bœ„ýÜƱö0ütåÊË=vŽ%¹ÆIka‘¥ÙÞò‹´ãba ِmâ½Ò.öÙÙ¸ìÆMjt@íozm_[ñ呙Ϻ HW„..ž“JgPã9:ꈵàj8làÕ4_¢úÃöÍî+ ØYhʶHà­2ge™³tÒ>˜±‚×òñ#Ԓ6u¾ì±êß®/{dÆê_öXÞÐØér€¦Pðâ™/M;Ê$“úoÂÞå>: Ÿã;B¯iǹpçr°Ö°.1šlÿД¯«É擬æ‚{¹ô;࿏_hÚaþ8鮶tÇþ&:X“eé²<NO;á^‡â6ÇÆ*ëpNð~Ѿױ‰½W½¤¯XI‰Ù\¢ïT?þؘ¥›f´ÔCÕýŽ®Æø<—I$xEæÚ[[E0¤ß²€‰©ñ æîº-Ázþ
+=š&¿¸qþЅC©DZЩMWƒb§¼W)Wò…~Ä"›7F=e>Ò`ºm?wDêû&²YÐO±ÃjRZwð—û±á6z7Bv°/‹²? ç~ üùº~ìŽüÝCïØÞáü®Z½
+ ŠB¹T 6(!
+268 0 obj<</Length 730/FunctionType 0/Filter/FlateDecode/Encode[0 254]/BitsPerSample 8/Domain[0 1]/Size[255]/Range[0 1 0 1 0 1]/Decode[0 1 0 1 0 1]>>stream
+êú¹^"×÷Étb©N$ÕõÏö Ï
+Êfûd³½³Z½2,Ï –GË=é–ÎtýÎp¦1œS[€N)tǺC2Ý>™ö5‰fLl¶M Úã©ÖñÔÏqÔOqMc›>Ä4¾ßmÝ`ix© ©Uÿ:’|IyAy^÷<¼îYùiùI(ùqHí£Ú‡!¤Á¤ûÁ¤{A$Ë ¢e ñn ñN@Í퀚[þ„›þ„þ„ë~øk`üU0þ
+269 0 obj<</Subtype/Type1C/Length 315/Filter/FlateDecode>>stream
+H‰TŽ=KÃPFskš8”ú‡«¼ ¸Øj㢥…Ø î*nӘCr[¥Pt(%k¡WBg'¡âè::¾i¯¢ÖE<ÓÑä„DY9.êeÝØ>eÁyÉñì*kð™?ˆ)‰×äx=µ‰!U_¨r›Ü¸—Žnƒ¯(ú[)ít1XŠðuYš#$is¦iڙY¢´BÇ®7@+
+271 0 obj<</Length 216/Filter/FlateDecode>>stream
+3 0 obj<</Length 5767/Filter/FlateDecode>>stream
+B'$Ï:ƒÒ«’0Ê¥Ú
+®møÔ*!åUÞé1Êì`ǝîIÿ½UÚìÿÙ ølÉVÚPnˆI`SžÃŸñü‡î(Ëo§ioðy’ç锜yqõy¾Ç-uÝb–’³¼7º
+Š‰½ÂPÑýǟóL9ãâo;Ê&”-¨ÀõZC5Š*®ô¦ó~A$ýµ†@Ñ>8dB´¥ ÷¡9bÇrb •ÜÇTØP–Au2Í5¸q‰
+- †š+Ê cÕNØj£†Å7¹e£†åœZÍkØ5ÐÈã(sv‰Á©Jš°B 1ŠÊ¨>$´’Á&l #À
+ø&эÄ´E^OÄXVðD ՙj®ÑÁšš%Èj½Ò'´°mZ悔Q±E4<£W2k¶ù5EŸÇ
+
+À…i‰·† NÎDÆCaÐ•"^"~V(è0À¸˜žã±LHê »Äžªáp,—*(ÊWêUgkí}åÂMC_©MU—øk ð Þ:ÒàYÌj‡Íê%THL¨hVM—Wրl!DHxň5؆ßUu Úð¡í† Âj¹Òo2F‚†
+3¨e
+òÙc_ÿåèìøíø`þ;:y{B.úã£Ó×£8r©ÈkÃ<ˆ’"™"6Žƒ¸&4HÆS¸<.C.øh1OË2-ɧô±È¯ÉâsQ¦dš•~´»Ï¯Ó9ùwÿSYLï)9™|Ëf÷3r1Y`œ,ÿCf˜¯&÷8q—Îg“<Íäz2›Ü¦dQ+%×é×ì*¥dü9…Ôdž’20’yÀð6èYŠ6ȘY’"Ÿ>î“ ”¹¹Ï¯Y‘O¦^®Aéq˜QX¡‘Yފô/IŠ›-™,ü
+ºîZeYRéð(`µdxöv÷I /6íÛ@-•¸Ü(ü¸Æª¸JÔ}r|6ªÊ]BÅSw·ĵð.Oô;£[/G‡ãucñ·aESͺ”`üÁüûÁÀØϟ˜ä!€Ñ6A±N¶ùãCwpüWÙø±ýþÕKXˆ·”讪ð!Úýa»4Cmf˜”˜8£r±Dns¸2ر£ž·ìx"‚GCodž¬E¨·?ћ:h!þ‰¥Ù†‡:„o¢[äÒ-?é
+<¯äºf>•ÕO¸b9ì Šø¾¸/Éà~>÷#N–CÕKÑÔSáý)™†ñò²[Ƚýk
+i¸…‘ã•©Mbþ/Jßf4×b çùN‘8ʝøʍÚ!&uƒÚ±F¹j¾ë¤Ò9š(tÓÍ+\¦X­Àf©b “\m±ðäèt£X!’;
+öCŽç‘3Ûúï7Ë¡¡F©d‹5|ÍJƏwx2NÉ×Éô>-ÉdÞ¨·ˆÊN£6\ú°=V«„о'lx>ÜLÌ1Æ'͖„Øž œâG Ÿ áLQ͂jÛy¶…$˄-"‰[ƒcvÓN«ŎÆō¦VlõÔªq Tý}rŸOÓ²$Åâs:ÈʔäÅ"½¦÷POñ•ðØÜÇNn;¯Gø(;ZSý‘R ьùX’r!È<íÜtÞt¾D?* )V2½†Ð;’¯à¸CÉõq%©BCSmu’ Ý jl÷",äB”™EHÔ©ÚçLó”@€'ÚµNù´Ú$kó"ëdí=¦J“Œéæ9Í1ÂòÖ±7+#_ŽQäå²ÈK-ªëú/ïå³Ü6r„ñªÜó¸¤
+Æ^ #ÓãÖCuqƒ!*o0a²¸ÁYWx,n0DƒyóV´$ìrŽw«Mï Âbdâøé۟óóùùõ|v´œÎN³w§ïæ—7–°Ñœ”èµZ§@q+¤x]"NJž‚%¨«ÙRù–Â{jIç„Æ-J»pðÕf•]ÞnàÛëLJƒ “²VE/·½¾Š)I!`U˜š*Gqoµn-ÀøC-Y[Ìä¯\ýçø`ÂKY±‚Y7<˜Q–ùÍíêéë«ÜÀzÚ}ÈnAxÆ^•:b"uÂ>v šœð
+™Âè&f…ϧuz3,ì¤õµ°ˆ÷9/àGŒcJ/*—fô JôhìYp‚ôüÜßççUáù§G„ãNÏÇN/8» &ïBø¥ä<íBnMàBTw!¢ò.&‹»‘ÑÊûdq"²T«ÄÄ-*6¤Ñƒ8{üÖsX3¥wpˆ ÒbÅÑ9}ÏN£Ciû¸]GÓ¿ÏËÂ¾å¾ CF¬yÊH܊ˆ^—4"‡¢ž2’ .£@’ê…–èÖ0R]F¢ò0†Éâ0Y_9M‡‘ÈR0b5bŒg¿}ÝÜbXZ‹ª´3\ŒEYˆÒ¢Åð¥-ߦäÙÍ"J¤âE¥DXCÙfWpÇÊ%ó__‰%~Íño8©Š¥[1ÀÒë“š ÒqXúèá¤f,ƒº<–ŒðI,ݚKª‹cITË0YK"ë+§ÉâXYKV×(Älul7«õm{v»úœ2;~~zº}Ø §²RÉBçY„S‰3©j½²izàÚùmz}q¨Òr;k²Ž2{|BB¨ƒ|G3ÈgïE3Èå'×''q«6¸F»3¾ÏÿËp?„ÐXŸÿïèu÷£D'Öz÷ôàþ>¸^•˜ˆpÜÝð±wOAMþfà—¢N_ŒvIp/ˆ*~-z¿A¢ø¥èE´æ.QüJô¢Ô¨Ð¶¥[øW_VכÕÃG;²šZçÇÑA¡´.k7ƒÕÁÀå]âÈXC-Ɉ4Òyó—ƒ
+é7%K\œ¯¬Q¾òõÄ40’»Û°ÿû€'¯JðD„ãxò±wóÔäÍ¿,MÚ Û%UÜ {7 QÜ{­¹KwÁ^”jÃR½Z;’¿õwböø­¿•õH½ºÐÖ;™”Eeh;žÏÒW‚dN]‰6noΦ½ÓóŸãÓ-ö‡ÂOz¡¿.Uw^v†O¹B¾z¥ÔvBïþ>€Þ«Ðá8è}ìÝÐ5yèm
+ðË ÆNýB*ÂY€º¤Ã¿Áþ£ØzMÖghʄ
+6 0 obj<</Length 5449/Filter/FlateDecode>>stream
+H‰Ä—Ûr¹†«rÏwÀMª†µËÎÀ\셖’Ö\ë´­ì–•J©ä±¬5EÊ"Ey›<B.ò~ù9’°¨+¾0gFø»¯#7½ŸÎ¹™÷(1ˋ’»àyÒûØûÒcä–ôD®‰±27ø¬©Ì-cðñ¡ŒÄ!SÿÎs*ˆfÃ
+D.¬RD–£ÑJÀ°)Èø®·3œkr='4gÂpå~9SÆÿ*Yùõ´7 9¥†¯axüÔˎv5Réþø÷ž÷@Ií¢rªt®­.ˆ.0%+g‚W&Þgç·Ó›I9~ºšNË 9šMgןúÌä6›Ý•äd:8¿öï&+Ëiÿ¯ãŸ‘*£aj{½lïv~?¹z&O·‹Od4]”7W‹òÙß?=;9rqíð*6—ˆ÷Ër-„$Êæ†KÞDF‘VÙ߾Ϳþ€1Æs– ?—ý1–ÿ¦‡4!‘S
+D®¤%DXáVöcï$Û³$Üêz^À†± ™KU€ ‹D3 £r‹÷‰{W…$®„g¹¦Ü
+fÏ–[8‹õ{k jWß[‹€WÑÖblÏyį-ÜõÀ„”ÅBM4ô1»¿n
+T:±Ü´yAõÒ £<"ÈH@Ø©Á+£H±
+´s@JUä†ùW‘Û"ø+͹GGî]@Z‡9»k߀r
+<è0gxÐ<°ëk‹’ d³P êw–+ëfh„wÐhÞÛ
+ÌÜFa¾ó¸72§m8*FûêñTºl`lÃ_æRi˜[œæbÑ~5k‰‘Õò ’b“Ú¬äUÒ=¦ †Õk^‹êÈIáfÁ\)•öÃ2¤ÅÈر¬&úP»õ‘p™3ڎéLÿË7èèucÜw1ü m0Ä$›â¯ïáû‡ûÃñÙh¸{H†ovÏv‡ãý³Ñùx4<'—Ùõlº¸>–.ûU3•«Í´ŽCˆœ×qT>¤ó‘]fNiò*n÷«•Õø˜u$ñae»{{N:AGÃLD䦭ŸÄä;äZ]ÅŒ|§0ââ{²â—$Â¥9ð[å`oG†5QºÐÈ%7è)Lñ5>O×øäh*ÌUìË]Ž».…köZ³®Ëf½w»N…E's5¼º„ÜËÂVÜI
+w‚É53<w}Iìå‚ҍIÅÄV=†ó[ʇÝ_W< ´t;ÇÊlXg69?ßß^_MÈ߯&åœ\=”äj±ºŠJè¼Ðr%¥OëY­ Âõ™Õl"‡«ž¥-ÌsÞÖrXëðD‘…[´—»aèCŠúÐÖûY‡$ãèÂÜðȑ#q-| *e•Œ\ЪªW,£¾6S¬žÂw\ýkø=yœNÊùœÌŸÊ‡§ÛyI¦3òòË>:Ô1 «ÚS}žjŽÝ
+íšà! ú4¥neà‰kޜ«š¾¿Š¦³ ÅëݓÓcÙÑÄñ.ÝùÐ[Ÿ=ï³SôÍ£}4Îþ@q‰í$;ÿíèǓÃþÇlš‹lxr¼7NŽÏû‹C
+°µ¸öܯd±_ pþ˜£‹d+®GtntI€év7ÖSGqµÃ`¡tšàzL„pB×2èZˆCÝ&ŠÝ2úH·žã@—YZ¤T¯€ÜÜמ°g×L—WŸÁ3>><”Ó¶qFqйðÛxÈ'—"Wn]¥ÕË+àòš2:^G'÷•g6Ɣ‘½ ³²R
+³Ø$ÿ§äêjk
+pÅ"²Üd¢?°Êr@:íc¨Îæ¯Ô!‘¼—4#:€6º$ t;@ë)@£¸Z@ñ•É4ŸÕÏͪ–Î¥ª…3Pmbs©
+ãf2MæR•7SÜh)«<¸šL$èÝ
+ÉêØöçRbr6µ#V:T֪䞸nÇdm;µ+†1µD‬éW¬ÇDL&t-”®¥2ÔmÂ2Ð-ƒtëÁ t/:BqÓr‰¨hŽPÜïÃÙÅhoÿ„ ßìžíÇûg£óñhxþª”ÀvÕ¹žv€©GtˆitIdévÌ4ÖSÐDq½è0Ÿºà+÷8ŸÑ½!9=•ƒóÇûûÉ39+/¯·³©Ë*gèBè95Ë]hõ’%YŽ›ó%sÃe÷’µ»á’ÅÝ9»KÎOö¿¤—[oÜ8…}ÏÐK›V$’âƒ}Hlä2pï:ðëه[q´c·¶<žÉ¯ŸCI¤ŠR‹¶:OéÈ<d‰úêT•’ãªiçºéaJf¹½ž™Ãæ&:fdÆÊbÙa¼(05–³‡ÏÆñ™t?¬<ýÉJW8‚‹v
+D–Zæ¿gnx¦tgæé‡O;_WèLtk…%fWÅô;ÎÚ÷¥'tѯŽwž£LVÚT˜;çer]­ïî·ÕE²n’S =-[(†–-m¶ÎÚÆZÆ6Ñoö+XÅM´IéWŒ’Ûé¢M
+•¯ƒjˆ›ª UùZ0¨"M
+irOn·HÿacXL8«Éˆ")áýŠáN7Qd€‘.#ÜíŽ(2 <ˆËn7dqÀ»%ßó*÷ òtÕ܃ŠÆÍXíA²_½݇ŸEwYè|ê ïÖ5³ÐÆ`ß)aBJŽ¢[à
+„qù¤x2n×nMO
+¢óIAu3vMu>úP·Ó®©.–e\±qRŒrâä¯ÍyrX5Õy;UY ¶î ¤ÌྺvIƒ…ÌʲPÖ~KÚo˜F¶}Q6=t¦¹ôírnú\:9ŒgÆ7£÷È&>—Mm[ó„l¢ÿx6•˜l£ÉÔ-åR¯Š¦Ò \–IýÞ±D¢1ù<ÂC-.ýš ":ŸGDçóˆêæŠ ÑÑà‰nwq!ºXøÁôtnü¸þ³¾¾¿NºùqȨT´Î(.Y¹³¶ô3$+4R[.!§ñ<a†™$A¿ÀØãøÓÐ~Žš8-å¿_1J§e€
+h#Òe)àvs@9Äå“À¾Æ#µ¤[¤À¼ÊgÀ ò @TsudPù¸Õî*2¨bðçðúéD™Ž™·UäK}ÛÏ`DÀ<P°¡+gðaõb¥ŠB‘î7E2”©[0â¨WE1„Ë(ê÷ŽADcò áa®E¢~M@QDç1":ÏṌDt4x¢ÛÑEX* Ïr!¦]úÑzkª/7ë«äÍzsñP_4ßPÊÑÉ]¼±•œ)WKßü‚ŸBÌøª@Û"Ús
+Âe,õ{ÇP¢1y’$ÈÈ㭟[Ñy’ˆÎ“Dus$Ý| ÛMÑÅHÂ`Yˆ|Ü¥ŸO“_¾ÕM5 ¬°¥L$9r0W¶žÑ¹£-{Ež?OZٕ•%5ÚEôP·Õyƒâh·É-nÄyø,ýíj}þ{·xt†6ä ÕUNô‘`–•ÜÀý° ·ÿQ™À_¸Ìu&öa
+;"Ҕ¹#’.֔Qé2–Ý,ŒËӌ§LjB%Ҟåz–]ÐÑyš‰ÎÓLu-̓ÎÓLt4z¢3Tçi&ºÍÈ£óq‘=Kßßlëï7›Æbý'Àü¹nšj‹ž-½¶LÕ<TÕ&9¿ÙÜUç÷MýG•|DWõî¸2enÛ~&ÚŽelïóqÿ&)j݂i½jä™2ø¢ƒpgýÞ¡gÊ3“§Œ±Ľ½CLݚ€²ˆÎSFtž2ª›óL¢‚t»=“è"”aôÁìØ;`}QÝ$WëëÛä¤j0s™|©¯«É Éً•’B¥G-c{Ñd©“#œú#žœ.
+‘.#ÊíC*ˆË3…§ì‘qÒ­ ˜Šè<SD癢º9¦ˆŽFÏ'©îÉÕe`‚*x,{÷KèDTîˆÊ]UuïïUîý‰Ê½~¨2Tåޞ¨þ×ç Si‘)ƒ[ȱK²R
+9 0 obj<</Length 4785/Filter/FlateDecode>>stream
+H‰´—Ýr¹…Ÿ€ï€K²¼„ñÁE.dÉ^)±,­ÉµwËN¥T2-)EQ¶$ǵ“7Í0ƒé!gÆâ¦Ö& õénºÉ®&Ï^Hvõ0ÌÉC¨Ø-ù¾ž|ž|HvÃ&š;æ+Ã=†0¼bsï=ïWñ{¶I¿š9©`T4Š@4£½XNž¿’L²ågËÀa–þ×\WÖ2#¸RÚ0k°Rš-o'Ï»|`‚K핍ŸJZŸ>­ ìár3™ .„€ÛK¸]~ŸLO~óƺÙòߓä_4Ò/ë¸tÌ̦21FÔ«¬ÿ0]Ül®Ö«ùáõÅf³Z³Ó»ÍÝåõýLz^MïnWìl3_\¦ß~ºZmfÿ\þ}‚d¼Ó˜ [M¦G7_Ö°ï7×ìd󸺺¿x\}b/_ž¿=;I=¥ò*TÜ 9Áâ'Òr^yf+î•QMb š3³¹TÊq5ý×_ó/Måå51>pɬâ
+Ϝâ6AfEÅ6’*˜4Ðñ1´Òp'¸­Tr[´nñM÷ ´n¥äÞÊÖí–Ó§â¢òÄQ’›@Ý*Ì®sú°°F§ù•Üv|$·Êò`u §« +’é\РIÒlkí|‰­tL_ú< x@&dÆî;’N154]ÈÛv›.£ÈT ‘.¤A!pž¸ÝòѸ58 Ä-Ž›O6ªÕ¨&ÍXˆ§]“f d‰ÍkÒŽQvèÚ Ée»*
+.]:h a«%Âû¡¿L¬†WÇmk~##•w©*L‰<€µ – t\¬k§8Wi%2Ë+QÃPkê,M+aE
+Ó8)¿KPXå»aMÞ£î@5%b±2¶ØlÍýë_Pôër'Uªv²©ÁÆ n¬ªþt¡_žœž¼ù™¼=8\¾|{²Xž.r‰5½%6FżU5{4Ñãôãô]Tzž³ŒŸ8ì¢r
+w®®’9÷žчgˆ4nÚÓÃHTÔo7§I‰Ë‘P^uE{ᓸgÙʚN‘OõŽggq'ë])YOᙲÿ=ü‰}Û¬WìîñzuÿýæaÅ6w¸úñ3öqú_™ü8‹ÞëkVs·EV¦ZŽ‚ö
+è. jÊ.Q٪ʻPtÍ.YمN°´ EVvè°öÛK¯ÒJ¥¢)|ðeɛ²,¤MEhq~ÂrÓ®OAÉAùXŠæÆxPíbŽÇ*™-nÓå ‡Áâ€܏‹g… õ–ãnðLX"Ëô“ÕLSèxõwmp­Åáë°óÕýÍÝ'<Ù$*ñô11Ñi·õ9^¦ã¾àEàÚòsxžëO7´ÁFȸ;±m~J!â ѱŸn
+( ƒš‚H¨j"kÓ¦ÁP!ºÔ‡°cH;4™›Çtëá‹åÆ[ŠåQ·Q°Wëu|˜%¶ÞÆ[êbõøíËlnŒ
+j
+iDTH£ª҈¬¤Ý 6@Ñ=‰4ö£¼'ÝêG¸¹æe!d¾vgÐPÖ⥛‡Ü9ëÂæâ/Œ6mã"ønaKúXÝäXuÛÎý‡ÕÍà‘Fß:ÉþÜß#Üç„;ƒÖ3Ö>óß)uCŠ]+)ÌÍr­¨M˜®U=‰7¥±\aÏʖ˕-1¦2c¹¶áM6ŒX®m
+@FdmÖ4ØfD÷$Θè>ў
+j
+¿UÀ”ƒíy3¼ÉÐbçh¬Ðظ{7ª€4;Ä-FšÍá‡}/‚äNjRm²?0Å÷0Ä9&Î|—ôg
+ˀ}A¥
+j
+´K†ËY˜Œ“´ˆ½uuv}=HßgŸV󂒺¸EG†×]n*Š¥ÜJq6¿orÑw•IuyUÉ¥Rä¬ÂÍÇ«…89ËÄzyº\ý@hÎ,²³mrþ”çO¸y?ìêE˜Íh˜ešFRvD1Wůj¨^
+@5SEM9Wý<W»›.ކï{ð:M«Ÿ ÍU 99Ì%šr
+r‘‚õx·˜9‡^DÐÇK0†bE ÿa\‹„Úþ®"ôz¾OÄ<CJ¥vÊÒ'd¹Ë?-zT6_ü#Xõ¥]‰g!cq*.¿Äâæ»×?dJÜŠ¬Ð%eÉ‚¥ø@”‰H º¡Užš»s½tg½«ç,ÕÕÉÛùú|9•çïÏçë·çËl½Ä‹>O®vÛÝÓææóQ£ˆÑDË:1• Ȩ*](®7ùõŸ'í’LL§ÈÖ«(n@
+Ž/‹¢k#à¡f‘èb$½ÞˆWÈ¢½ –ôÊâÄÅTtìJ‡P™ÝB¹-z,æ«Wâ“ÿdM#AUÍ=6•‡°LÕ!&×m“2 e$Û&+•zÜ6
+{#%Ë'¼RöïùT<íî6û½xxüuóÇóv¿»‡ÇÍMôùj…?…,ڍOqK-U†–je '˖Šq ›Ž:jØõtÿ®G½×Å4ଔ:è]ÍþóãÓ·h–G3« Ì$ûtúýÙÉÑÌ%6Ær2?[-–ëåÙ*£}E§‘Ë+b¦l
+W&ëOð·K}Îã™R }ÿÓj¹Î*!\Žèe“@5”s½¢ÑƂ
+´Zšœ‚ ÙóöñúךÂ-M:¿[j*§q—[©wŒ[Ύq “\j?:7ª3‡s+\><7øåŒ[Úa]ÑãÜ*Ï4¸5‚ Üb¸À-ŽâÃÕÞã·î d%ROc—+¨÷FÊ3 ŒàB.ã*%SâB.a‚ÀphdáRüæÓ\:¤bæ‚Bˆoty_îóxÐÿØTH¶á-ø»
+12 0 obj<</Length 6258/Filter/FlateDecode>>stream
+H‰´WëRG~½Cÿ”Êžqß»'µÙ*8!eÀF
+„K}9ÏÙå"N³ëçùbðÛèg¤ÊY¨J â¤×?™®gãoìyZ<°³E‘߯ÆE~ËNO?^]ž“_ïÞË2>Õð3ú
+¹VJ3ãS'µ¬=ãHkðìŸÍß BÈTôMˆåt„òß÷&x¢R®•í™"¼¢ÊÞõ>!ÙKŠªðl8oQÈT› ¸ðH´tLêñ<£g“ifaJ…g‘Z.Ãyeðܖ' z‡è%À‡r+ÒX=7QPß}n4¼m4¶õ‘€˜#㕆y˜Ð:ҘY@Ç2 HŸé÷ŒBàš´ÅƒBŸfÜn
+.S¥¢,à€Èvîð(8Rl"+M ðÀ(f²Ô‰ð¨RŸE¿òTÚøtË<9dmœ³yó  Ià‹s†/VFÛò•F-"…²Y(ªg‘O: 4
+êçƁ ‘û–A¨ßzŒÌ;ò&cC÷TR63`lϯ±Tˆt‚ŠS¿€/6TCˆ1º,Ò¡eô¢­cV©Õ²Lz€©Ñˆªæ•Põ9É(
+A­”EZšO§Û†uU˜Ö‹ÊlðDêTðæÌVø¿ÿŒ¾ƒÆ`Vô*gÕëX\nXübYäL|ÇJºÔ¥ðl†ôp¢Ù˜÷¤—ĆyΊ‡œ­‹ñâv¼ºeE¾.Ødºš<M‹5[Þ±÷Óû§T§ìŠt»0!->%|ϼð}¯ËÄ7>} 8V‰ä"¦n
+ÑÜô«æV7ƒýIêÈ©ýÑQ]u4Ö4؍lým1A>‹|RL—‹]áM–óÇåz
+k_§·ù²îxQ÷(éª"†ŠÇ¥mö\äqo¶ñ&ò­t‚€
+±P`¤}&lJóåmþ¶¾ÛéA’y‹m_s^§´q¡!X¢M–rt~ã3ù
+­Ê}ÿéªìzú»ûH‘2ŔL)ZJ>(9ؔ¢(5´Ub\*ý°ü¿<ô'zgw´ŒŠeçD.@£ÑxÀÍLbdK»ŸŒ×ÈŸØÇ72hÚð5F–•º(†‹Œò…ø
+øHæwlp<=f՛'`8ö0¥ƒà‡À!Ä"8,vZà–À‘uîŽê|Ì9¤c·æíGÖéÀ±`WÁÁì*8¸Ý!p0;ý!»
+¿c«}—6ÔáÙ¯Ÿ­µrjãPÞT¼¾å¨6R{$
+û6ÜZ¦Y§+Ó»Z¦Ì®–)·ÛÙpk™2»ýa»Z¦Ìn¡LU=Ú]ò?¦Ç½zýÃðã§ÿ~7<þ폌V»·È$4ŽSÐ4†!DꃯÜWiÚ¨eƘÊZÈX@`äû
+Ùq{rW@YçþT/sÎ
+ý•Â¸ø— ³=»‚ñ_€’A†Wù<ˆqøaxó÷qx»úîb+‡÷w_{‘íJ ïIYe8þ\R—ÆÂÊxèÓýÆáVå`‹s5?V‘'¡q]zIm©ƒ
+‚ “Là^ Á€Z!û^“Žò›€‘Q$¤ƒP%YM»¨£œuU2á”|À6Š(£q¤¥E"qXLM€:!LL‰’:u+|Ô GOR©û¨ÓKHÿá%2:½„ùAðµi&á~F r×ùIæ4giGÂü`š»I‚=ÉÙÆG]Ñc“ž
+Z‹“яTU‚B½EV4¢Ñ9šd›´ d2`fšh‡fŠ±T$ƒÏJ#Ð`¨í·ˆ€ºY5 ò/ìP=àÖVcV”3òo²P›˜È¢ 7uØ”ßíˆ")A$5Æþ”¥vªÈ­à1Ø®Öè?+ ԐpÈ`ªT—LU"‘m%ŪI¶i‘u‰Kwû¨²hÿÉ@$v蛻ƒúîæðsb46ú¡N
+¦ëpœ¬’““Ë«Ù®iêTz’|æM@¢ÿ"Í?ùOú’£ŽsQæOßÓ§5Ê iXƒÙ›(~ÙEe$1b:ÀMSšŒËZÎôAÈu^>NþÔEE­Þcerhð2.©'?ýíÑpyõâÕõpýd{=œ]¾<{uyMVˆ¯=º#QC(¿NÜÑÀJcèI‰Â¥#pv%uæ¨Î(•˜­ô]WŸüàŽÁ¥'µ¬xg¯íðeE>$“L3‰¤iG)>Ê÷v
+ e¼jq`öi,q~™E>QcÀ¤¥Ò]ñÔ¼Ú]qŠUšYTIŽë¶YµØwŠþ6öê‹Ý”
+E¢ˆ8Åِ%àæ¸
+N;Gÿ,¸–·ÜN&§­”˜aÖ³øYúËh®neÑJ™¬ Í]øœD.!Ïf3
+àW ØeLôŽ„ùÉå0Í$ÌÏbñN3 óƒ/vTÜO–p?ØYÆÐùI’½¯9¢gÇ<æ™î}L,€”‰ ôØ2óª­ö¸Æ4½Y5 qX†â€’-ÈC>!ÿ&
+Ž)àodÅAùݎ(’DrPBì®YI=3¹ VÁ§–´nEªíhžû£¹Ãöô‚†^€• N"Óôî(…F¡b$G¨³ó“g»Ã[{ -â¥àÿ²¨Iù1º³Âƒ!›ÂÍ ‚Œ©žіgP“ *‘~¹æ ¸]Þ¢”{9‰R£–ÄŒ*Iåg°„çWO†íõéÕùéËóáõåù“çóç§çÎÏÖgÏ_½xöä<Ñ!ѐ‰6¬_?u]xCæŠ
+ÛAS8ÊuôÖ"aðņ˜u±j’-g"ÊÒþ˜fq0Ô6v%Ê¢x… À ãÓwڌ²¿›•2!m´Ì¡¡Œ5ŒŒ3…¡d™dšIÈDt.ò÷vFÔ( ‹Âkµ(¿ÌâÞš
++ëî‰yb-Ó¯’Õm±aqƒá™–ÌRBp$ºdII&Í~גY°%“èChɤ™­»dÉ4“”d6å{=$'³E‘’Y¢ü2‹{2ù=Sêš~•ä¨J2yÜ)™­ž»d
+Ì{O|O¢çIšUBÛYœyÜ
+©¨E7 1)œ!tÞ%“³]ç7p>£›F@øÊWõg:áfU HÖPÍGÀ ¨äß8 „P4JˆÅÃÎ%nVwi²“+ghŽkê·U@žLæ9A—ÁÖ"ã6IΩCf ¶I4;À ’ )tIù qa´ËDV‚J:šú|•TÚQƒ αèr¸y7åýÖa´LJ·Ž£§ÊåÅÕiìÞ(´å5ú¥µ©ï_<)klðˆÚÇŐØ¢
+»V´kõn¦vM}atÜ5ò©úǨ’ꉾ)³Wbb³˜fžÓЦdc»ÓˆdÅzÀ©*D‰_ jÏwɖ»h*Oíd§Sc¬~ZÔ}<ÿ1&-cóVO‡¡a'?˜TZÅÓ}ܞv½<°g‰\ÙÖ ã ’=`QÁœVŠ¿6!-y‡¥íɎž¯
+l—5Z‘ï
+15 0 obj<</Length 1612/Filter/FlateDecode>>stream
+H‰´WÛNIý‚ù‡~YÉhCÓ÷ËÃ>€1„(`‚'d¥$Z±ÎŽŒMl'(Ÿ³±ÿ·§ºÇöŒM²l´‰Dì.wª>uë–ì¦Ø;Hv3/óQò»k|×ŧB²+4wÌÃ=ÄNØ®÷ÂYÕR~Ã&i­¸ÐÌI…mQÑ&úÖY;(‹½#É$+¯±YFŽméÍu°–Á•Ò†Y ƒAiVÞ{ݹcÃ9\j¯,}*i}ú´&²ùpRì
+9j•¼†×:‘`%ÙXA,×+ 8Q®i3[ØÔ&“ vµgãØ(fCÅü©PhâJ+cUjMJ óI•$ÿŒ°šiL% Ñ¢Oî$;œ¢+,;Bnôf»Ç)8®-U‰ÜZŸºœX7î“Óýã{sR>gý³ÝA÷¢×;cÇûçÏOºƒÜ9}F5Üeÿà 3
+grDH´Ü œ°Ë)ÀÓ¡¤ŒÞ&Ø1þ^@ï#“Ð|`†²·ïûP›qBZqkÂJ’¨œà0È_0·­4_MWÌPtMl !ùJK©RKG·ÖÑ747ÆRd3™j‹Lìͦ/օ3øâ5µDbGŠÌ\XL7²Jéïu`Þ'òè§ùއїZ³˜ç1»›¾xÁM–i 7…óµ1ñ ëö_ö/ØÁþŀ]ôçý³A¯egÃkÓ9pgW]ð‰Ã½Ó½<°þ뒰f,Š¼€ïï:àòî’Nðn‡~ƄA‰4ïÑ
+¤µH]ƒ|ŨQބœm7íÔPujØ 
+S¯~,0ÿ­€LŒÜJmS܂w†ÍÔaKW¤ÔÏ(4ýÑãcX ¶ÊfKBþÿ<8ˆ–îà›´ ºgˆ¢×õ.Àê‰B—p\>h„GrIÃ!ýJ2ޒΘ¦wcKK€¸,×Ü2h=†pCu4j1ԁœVY%`èc’Gå~ä1ô¶SÐùz?^Yÿ¾ÂKï†×Íìj¸¨f£ùb4œ§›ÿÞÑ#»æC+ÜLÄêMB7Pà#.)øž«:ß]q #&ž–*”øPÙ¿<<$¦„;Òm¶i¦óûÕ^>c[¤Ä­ÈÐÕ¦a¡sø,8ÂU2>×4c
+l÷ü1\܍EЏ㖛¸
+16 0 obj<</Subtype/Image/Length 14626/Filter/DCTDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 360/Height 254/Type/XObject>>stream
+ÿØÿîAdobed€ÿÛC   
+  $$''$$53335;;;;;;;;;;ÿÀ þh"ÿÄ¢
+΄î‰Ô¾§žŸƒvië3$R7z]º×kÆÆ¥êR¿ŒìÌÜ.–Ì ]EY¶ìsçmŽ
+Ù7»u?€p HÑÀ¶u‚Ó涺>_úÑm=™6Y…ˆ78Üâqñ«7ÁÐ@à.Ÿ¦õ~›oÖ¿« ¤n³§ô{meyo2ëžö;Ôp›<.S§Ÿû1Ç|ûSo»¿óñÊê¾±û뀞zÅCñjÇú±§Õ?­³Ðc·Ór‡Ôú:f&Sú˛Œ3Ñý!ŠèôÝeÇk^ùçiXK©fõlû³óìõr.2ãØÃZ;5½•xI(M
+UÙm62ê^êí©ÁõØÃk›¨sJê~»äde`ýZÈɱ×_oMße2ç8¸I%®kõêÃN ¿/NÚ8vQ¾ñ¸Ã‡X´áú%‚ÌœÆbوËln%®¶O¤ç·è¹Ã‰—Kþ/úN&vnffE-Ë·¦ÖË1pì{k®Û^HÜý!±+¢úÑÒ~³õ/©¦Þ¦ê_—Nu™v5·0±”
+™jü®™Ô±©n=µÕQµeböîHMþ0[ˆÜ«­Âµ÷â·§E6Ø!ÎfápìW-fVe¸Ôã]mÅÇÝözœO¦ÍßKÓM{Âè­ÿòc@ìz»Á?£Sèf>¢õ6öK†­U¿ÆN¿\º™:–úPyÑ1t{¦SÔzÆëq_Ô,Æ踖ӎËYs‹ƒ .nº²èúµõqÙXU;"Û}÷T68~‚ÃUež#ß— 5 Ô­þ…õŸ§]Ò:¯OgT閿Öeޛë·I{l@ÕWúÅõ‹#®çW‘é3¢¬,jÀÛUm2÷2¶,úëÑzƒ¨Ë뽝C©Țֶ[é 6iu`OŒ¡ã}zyë¹½W¨á7*ŒÜS‚0«w¤Úè$m`tºïԒÒõ\‚Aý­Ú4KS­
+ÖÇ>̈́ωòø©Z]µ “Üø!’ðgïN,F„öQ.& ×ɇ´Wîä[/ŽÚ„ò6îì¤5Õ<'„¡<'„¡<% áEî ~åXNˆ­p y©íOµ>Ô¶©©±š¤ë˜ÝíàÊϱÒ|”4J7k÷+8¯.ö=åXˆÔ¥µ6ԋT@—Ø'ڑj`Ô›ls´
+³¤ˆü‰1Ä8ÅNÃòð{¡º„ÕÚXý H×❶—=ݚáD˜™C%JAL]ǒ@ë>j^¤ÔÞQ±Ý¹y"ÂxO
+µ›L{&m­ˆ'Ü9E€G}P/wéVë
+Ãx‘Ý8ÔHóü[_¸ë¢¢Ua|Êìkš]Ùº™KÁk\{´þ€´´¸p9CfEn,þ^ˆ¶¸UYyhšpðê=F÷
+ƒÞxPû&=‚x#D|imšºøš‹IˆÑaL[¢6?]J$&-Ñ%Ƽræ˜<f§Sªv’Ù*u‚à'ÝMî‘R8C'HPw2iÒ>
+@úGâ•÷6 Xgą_vJ­Ûhíã](=ÁÖ=ÜjEÍeO“Æ£âSc[¸OD”7Áy>)D¬·O=
+`k
+™àI? ºáõ¨QÑVsØëv ÓCOÚXÒu$nüÖûŽœ,ã[ñˆÐíÉڏPÄéC¨ä1˜ì®./¹æ+­ŒÕöZîÍhV,éY[gO°äáb~Ñ`¹ÌpvÏ7Ly)SÓ:»ív#ÜìaºèüƑɅÏäíõIgYCmÖ5¥£F¸@PsœîIÓ@¢Æ8ègIR¼Iq2L™BRokâ ËG
+_g§÷³Óû/BŸÜ ý
+ƒ¤v\Õî%íÔä!µ²<Lö
+Ú;ɈòM[š, B|§AÛŽB®ADZ6€>î>iìkšÑ¡&B#že
+âÍòÎ
+p‘»²]C«uŽ¥S+ËÈ7ÖÇnh-caÜ~cZU6}¥¡ÍÐñLÊc]ÄF°;&›íÔOÙ/±Ï>¡—wø¥S\“¸…+Û«LAñüˆ.g•,jÆí$"véÑ@†€ q®ž(D05´ÁðìRvîòQ‚Ó DJpdL¨ºf>äí ²ëèæØ×é«Xdüa0ˤð×’FöG¶w~éø¨}¡ÿèÿéþ«Ü4iió ÁDY|êÁà¤çÜF­ñä§o­ÜƒòLæ\NŽÛð§ÛtCŒ?xQ ´ ùàí
+ÝÜ·Ìíýéök;‡Â˜= ðRÚù‚G"
+ x“:8»CäPÆ)i#nƒÞU€ç†±¥Í†LxëâTےֈs›´p­øWæR̋Æ-$Ûxný¡ »ÚÞîtC|Ôº·Q«3ѧ¿³ôÌB.÷: ¥–»ó­xúGä‰ÕÿbççY}=OìøÀ–âã7
+Ð*¨Â¶†˜ëUç}He='ö¹ëøb-†<¸ƒ “»té
+Ȥö±¿
+{ʋ^_[œy×å
+ø•!Ó²{ÚÑø©œïÎÉû‚À§½Ïw—Ùñ˜~$‰éÌú[tñwûT>ÕӇÑkOÀ$2ê'ôxåÇʳüB˜³5ÿÍâ¾<ÀÅKÒêŽÿÖÿYñùo°õ}++gÞ¹?ì˹~Hø5±ùJ›:^?çÝc¼ø+Tô|g¼1˜ÖÜóÃ}䟐VÛÓè¥Å‡ ¬xеí’ö•KH~æQKšuʏ>PÔØÿWz¦Lz8y“ÝÃlÿŸ
+àú‘×Ýmâíþ§r«gÕvÔýÖæc±ýÍM6¿Ú†î“†Ý‘m¾;?X™#Õ{jXӸ˴ñˆ@-£³‡Þ‘Ç`nât<F¯§Ôö0î ºCŒè< MgO,¾ªÄùŸ 9(V*´ëoÁ Î'ÚÒ5ƒ=ÂU´ú„´@¬jrŠH{€oq;O
+MkžÙv¾>Hvbhgºù%ßÐ&s¶·iã´(¼C€&$rŠˆ'×sˆsÐ|Ь5›k$´’GŠLu3^÷5ßcÁÃY´úgØx'”ˆ`®š|×NrpÙϤ߉
+ômkCÛ¯™ÕbäÒæ9í~ž›H™ÓOïTNžèÔóã
+´8¹ÂD4Ç~È­ÅÜ~àŠÌjç‚~kKÌN˜Ì|«X×ddÞÚ0k wçØ|˜?«ýG;«åõõ|¢üL \ç=Ð]L&b<xT2ºÅcªt<Ѻ¬{ròEÖÔÇ0V#ñWqq™n]†×
+è¬:Ëì<6¶Is–UÍÈêxìêö4׍“ÔNgój¤4>\ù­þ¢ìFtës:€ßWM¸_„Ãü‡hÚµüÓôœ<–ÕܖY^knŸÚ6¿Ô¹ÏúNoÏ]
+ÜÊßXz»»IãVWʟKº®¡õYIõ:I¥øøÃî,>­¿üTú£‡—cò¯¸=Öz7caÖùÝÎÐèç…k
+¾ŠÕ™_i¶ë Þyq:©Ô%Ë{ X–4ß §ináÜJÃêÏ9ѯe™ÔY=ÿ å†öA?°²E¦ÇK‰ÁÔpªŠïòÐx«}m¹‡è™Í#Û¯åV(˯#ìxmO‚çIè
+Ó#ä¶húõÓØâÇÄLOÅW»ë/F¶KrAípÐ÷ÕK'«t»zu4אÇ?Ôs¢{,ÒúÞøcƒ‰˜…š*긗á6ÂâGèôLþ—–àC0¬hˆ$Iû¡PGÌÆ©•¶›a€Ïl'I
+«1ncwÙËp€F¤I) w
+"
+>J]_¨âSŠïJ¦´5»›læ6ϊæéÊvVXa†2 pöG³‡èº~*»ðŸù°~üP‹på²|¥&áåžÑæïà^.@:Ú~ ގ)p9Î%ÇTŐ.Ög²`Çxþ
+[
+n¤ŽN‹_£ýo»·UêÎ>ƒe’ÈÓG7º\ë®ê¢·€h¸“º[‡Œ®>¦4ÐẠ1¯Åt¸ ·2ëë¿(^ÖêFðkGuaý:º¦×³Ð­¦%ññ÷ªx8ŒËÍuMkžàÆvë÷&Ïkk¾ŠÅ²Ã©lo5žëwî¯`1ŸÚôö–´4ŽÞýKªu›ëkœÙl:Ä8 YwUfeµdõ>¢ËS-`$hf=°·)úÏÒëÈ.½Î%Ìô͆]¡>Ùbtìg^ÏÅpý•XÊ6ýêG:,λs[èÈ/¤‚Hï&8ó‰YXWŠmsñÂ%h ¶˜¦n1"ä֓üRe¶Y´yƒ*fÆK€ø'amƒ@èñp€§è„â¡à¥é½)엤e/E¥ ¸÷ …-&6Ǟª_g?¢j`‰)
+ ¶Adp­fgœÒÖä9ö
+ÁÜ@3Ì÷*» CKZ6´vˆR7i˜ÛHçDôÞʬ.v÷r÷3_[Ê+³½…­fÆOHø£ÑÖ²qi}Tíh¶ $K¼4UÎe³¹À¸êa®©mƺ{<N¨8·bÒÛZú½OP‚ÒOÑ ÎŠã2ºelõ+¡ŒÉµílÕڹғ?g[•’÷‹\]g£%£ÃéwZ=)/<eQg¨Æ‡1‡MC„+k>®§‘NEà±ô6ZÉ'ÅUÊêaîc-nè?£Ö5Á±*…™®²@¨‰(-°–Çs© ‹‹¡ { ™]Gì!Ðî§//"ÇÚGèꨁ"=Ã]ÃÉsj§XËlpØn±¢#°ábZÛ*#tŽ>ôzòÚïçò$J#Ðã±›vC~‹Éò:¢ ›ÜXÇވ?zËy2æ¹¿Õ Ä+5ÙC‡ºç´ÿ+ýˆ›ì'ôv5Â{¼à¦ç\K|'ï:©}¦†?²P‡Ps·"½€ý †ŸŒ¶ci!Îø
+lÌ©Ú4–ùA•KÔ§÷€ð‘
+í~H9øƒ-–ãb5ãÛ鶌Kq^ÇÖúš6ó£Ï ¯†k©žÜ§§q¯Ôt‚繤jÖtê0ðn·̋²è}ö¼ä¾–ËŸKZÖ1ŽìÉBÊf.(`Éèy6Ѿ¯W*æÞfêõåWsú C¬eÚöNìW=¬¨|/lØèííÕG«cbãg†b5ÕÒêhººÞíå¾µMµÀ¸0]¢$£N¦J‰$˜øܝ&x•1߀8”a;A’5lóóH“.hŽäé÷&‚Gù§2@ ùGe"çáÈÐÂ-¡›„ŸmœŸõ
+Ûóqï›`’àv·ý|ò.
+K€A‰’
+‹6ú.Ä̶‹ˆ/§oÐà‡5¶4üÚàQ{ݏQ–‚\í#B¯ ¬LK~­ååTnǦ‡XüxíWû`é§?%Òý{úÑÐúŸEvGí«íÒðÐß²4D´˜bDsªÊúÕõ£¢õ?«µtü,k}b³SSXÌPƁck° ~þZ9́Æ&¾«V©m%º¶]ØâìØÂdH1ðÑ
+#Í[©µ6Ñc˜æÚ8î>?;²aÍ0ÃAŽšÎ²€Æ_½ï0Ó |6TÂ'•a÷6w»HfWõ^¼ÃY®ç·¤Èu¾çû¢±¯Ítÿ³ºƒq6¿¹>Ñ?ÙCȳêî 78QXHË3#ëWMdŒzÜÿ0â³ïúÑs¿›¥£úÆ"©gÖ<ÇÕø«xY˜ötn¡Ö:†-y®Ã¶¼\|7Ð.‹-»lªÇ­ô›0,.éTtþ§[Çûǹ§éWxv¢9îQÆwÕÌÖ>Ì÷eâØ涼LVÜ͂ ¹åŽ÷x…jϪÕ[Ô±z^µÛûB§dàæ’CCïÒ1±í¦Š'ê6kéeØÝK"ËņŒ6_a¤Åµ²Âv¹ÌüVPèÙ`}2ƙ‰–A‚ ø
+ úgPa֒|vV®.B·ê_Y¶Ê^[,°ÜȵÖí¯Ð>`jyX˜x9}C.¼LÍù7kø—͹]'XèÝ §ýTÉ–77«aåãՙš†ºÍ]U.ýÐ4?ŠåۓuBǁCÈêÙa»7îžeSØ6‘2Ó ðó(¬¶ÇÉÀ¶&Ájãàe_ÑòpØݷٕMíõ\ڃ˜Ê­cˆ}¥­$&W^Ϭ kÓõ_¦¸´OÚ±5ÊÌúˑoZé§ ¢`ôë7‡úôåbÚæèefu^•›ŸvV-^¥VzaÜ>UÖèŸå4ª££uQU5ˆ²·¹Îh ûOÏÅiÑқ–î‚2}‰‹EÕæÕuõÔZáuö1i{_¬·„;p¬ô©5tžšû\ ½¼5¬tèﶝÚ$þ’ìž—œ×a`af´TpÝNS/‹‡¿%íú
+éôÿ"üÞÀÍ҉ûfÍCGm¿ææ©¿sË£™â<õÍ-.|;S«ø,nßvßëG*uô.›[}­vŸËÑ1éÝ"²\àÀN¤¹Éã£Wê4í ¤z—J¬hæéû¬ÿb úö?£mû€üU{>°Zt®ß2dªWuLÛA›iìßhUL¸î.ùòJ“eº´ŸŸ‚±]Í" ‚>iÉùC{Õ¦<%F²˜8Ü×ÒZuóR™2ç9ÑÁ{œâ>‰å)~»^ö© {š>搣«bí8‡8<º‚yÐmqô@q“ÛòJ;½0q
+17 0 obj<</Subtype/Image/Length 11521/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰ì— \OÙǗW.¹¥;äºÓxå2]„ŒÇ¸•GÃÈxºMR
+`ž/„ÍÂfÜJ8
+ØÞÃËõWÑ\·…z¢(èÕø!€^.{âŸ‡²)%œbŸ<Ž’‚òøk”?zÂm…‰^äÞzVzà„½‡¢œÚr…nÏøå;JÎ<|!Eí+â¼ ÅgJuL™Jg™³ä#€õUËý(Ÿ¯D ˜Ž6„^ˆ¾ìÎôNÍ螡4“ælG/|+ŽØ¼H¸îM‘æÎ|F3éÍÍë(k#PöQêÓ¾ôj(¿Ê-Ÿ&ÑK”•¹)î‰%
+7fÎ#z %+è ½
+(½¤qôžéãvhHÙcëƳׁëÓ;Œqœ­_Êxœ&1žawÇÕ©\—5'¸‘Ùås€òç‰Oå<Ÿ3Ž\€·ØLÆQxº<€èðððˆ²èJ.¿Îæw¯ñÀê–…‹PÄ,Ñ>€m´JÚ¡<Ïu‰¿Íy.<c9¸7p'‘ v‘›х¯®™ÂÍÄÏԍ,.¿Ê|Ϫ(ƒ9'¥]JnÌ¡Þ\šagG¼i1ãña§à\@ʂrAŸ§ýՍ \°Ò¿Gº¸q]Þ[W Ô>»¾%öµà,ßXþ'æV@Oí؞gª@^×%ùÎs‰‰õU -‰ vùãÈ+_…64jüWh©nÔ¼
+V0mNƒïüðÎWùdËQf«øÉþ ë&ÜMO½K׏3„‚ ¹ÔÖ¶öÏ„PMÓ&ü±ô}Ê(.ÂÕDɟ/9;]•$„š¤ϋîg=K)»L
+ÁÕjýâ ô‹»ÈàP#õóN.0n¼© À{ø·Áô”+•Ö†|ʸ4Ñ-Eîrÿ©#~ò:øñ÷xt
+ÝÖ(m½AÆEð›Ðt!]TÐ/ïº÷êö/åJ\}óÃ×¾¡ýë!­ù=´Ð‡ú¤|ä«x.x§Ç§§_­ã¾ðßÑ€SËrüAƍPT²ÊFèBðº‰z°§¡›¡©Ù4—‡äJ]]#åM0>é s{·fޑúµJÖÍtŒ,iSä׺ºî²“ºñU ¥ˆq䰓§Š*à·\€~O¦
+ÀÚ¥\»n|²Ujècû.h^¿bûp“U-?â{Â]õ՟«PÙÞ4€ÒÉR£° ,}»2Š t5Qü7=På®õLèŸøÍ$ՃA:ÚHŽåÒÄp‹`^8·¦ß/ßzI[v…ÿþ_߀S>
+²âÁa#Š‚Š²Q㹋/ê^‰Ïc]ÐõáÆ÷„xpÅ#$È!·"g°·úa柿3óc4[ïYö_óS]ýýÝUÕ³Á'æBQ³æ×#Û%¬X@\Ý-ò´õÎSͺâI–@ƒ¢š£åH<9þ·û_ý€¬û²Áˋq-•,Œ
+   Ç •]ß1þæ֗Ã7x‰pÈöZ„ø»ƒÕiӈ­û!¼XÑõ“I૆ƒ‡Øõµ±¸+
+`»é 176­¿›·0ˆT”n`·%ìUà(°[»ß…ç]?™Üsڔ«©O\´~÷ÎҋóNF!1<ÿäkmÃ9ñ«éÅÈo‰ÖÖ«ºÄÚÚ“¿hMñ>NÕ:¬¢W|Á(úèCŽ^ÀßBµ?”.fªô)x*[CHݤl|ž“„j5qw8X2G7§P¿#ê y6ñcÑL)€@<ªöÖ`cëö'ô~Šõk|úõ¡U`Ñ?PEF£:¹Uò T¹±
+Ԏ£ýÇ|úâz:Ú~U|
+ª„³¨22dÙºøÍTE Á(‚ 
+Ú Ôsu—kkR•Ooƒ…]Ejè;E/Þ ?MGt~’Ców¶£hÁ¶@À8îAN視Ñȕóü¶H¸˜Š3© ßó)¤¡°íç\îmÚU£*/¥Ñ¢ ¯èúËN5³Hí—åð ÝDh9þc[ì…ÎCaÉøSÚϤ&Á°tžAÿ]€/{UÀƘà)Ø]H ÷Sñó^+B|/k?g+
+ *gÀĆ`þÕ_ÿ´'óßptj\!³d–ʼn¼ËF“P«%zߖÆ3ÈÙ(ªÏ\CÀ6Ð~¬ìæ=Ò,d‡ÄØZeä^žaƒP~Ɍ¬ö[–ãïèñW€ 6éêÃhqØÐ-¼fvuù@D,#²lVd\l“¡QícšÉ*¡(ì]®
+;»?5MàFTە€U€0ãþ^íèlµm^®ØXEð¿à‹ÈÖ²"ãÊ`›Lþª}N«YPRÀº 崋PÛ⑮ëœUa †ÊïRxAR“`p&Ï 3´È„E€Å/×k‹M{$ÆÖ*އxE„*U5/mãR6+Gºnì`&wŒØÍ3¬ŠBj#ôG¥ø¼¯a=—;oÚõßÊΆÊÐm<C¬™@ÓKY=×
+
+mM#ähéµdÔh±½Ñ ’€k…E»
+ŒÚß>æªQ D¡EØwzR¢ ¾mY¨LÝ)<?wí*0dKû˜«uöQø%1ú€’dÆ,$#[(Ç
+Ï `Úå
+Æ2}Y—¡¸]¨Bù·Añô6B y“˜—!͋]²S~ûû24»¡žá­ˆ€ÐëSTšlz… ¦\ÐLC~¢ñ Öx`ï€å,gzäe$A%±#ßbÜ*pæÿÀ—¯)€`‰î£²x†*ÏWQ LòÎOrî_øë™Ã¨NG JY‚*ýCTÃ0á֍x€Cïÿ¢šzÕ²¨Â|PŠêNìWªz=ñ6€ùp†OCQ\Œ*ÙUö|œðé,Z¾WT£Ú\ƒ*†ÆŸ‚*á,ªÌƒ$Ñ¡2
+GÍaté\øÔT`’ ÛÉ·H9½Õ¢zŎ¼6•MKn!›Nx‡¾“MçŠ<ªìªš,MÉM^Æp¿gȧË,¦ATÐPS‚ª±€†—Ë)šáói1+¢/–Ó}Sów@·„œ¢ïdÙL"µÔ9d„1ȏ€bIð5`Ü*ðºX-Ñý/Àô›• y,Ï\üpIPP¸$(€Ý
+«Ü¯
+¨M[’bM9+°¢',ì* î›Í QÛYº/ @Ü.b@˜—/€Å#·Þ›à³°xä¯-ÕmU!oÒ3FdñWXZª€­¶ÿà¾Ü–v-µ•\cÌBÒ³ 0÷¡l¦Ï¸†Ã>5,‹«oАÔȈ¬Hsoèî€ZsP™hø÷çþ³é,@°˜¿˜Aö;-{-¤ÕÄo0Ø.Ûêæ€æ0àö€Ýh€7úcúœ›fX€‰©LßXéVΰAvT·ôêHùȈ ….ÜNœâ\¿»Àã#%˜Øìî1´*Àf^û¸Ã0À:û†8Ãñ$9vZ`厅z1çú½`Ülo‹uS€iw×A«= ÷8 ÌX®ýl²A.€n–0·¯gGL°]¾ø3çvp™ ›“XžÓnR™Å7ã'êîҍ¸E*@Î3ørÕ&²’àÃG,wi$‡±æoêØ)ÐþWÔÝÉ¿s^àxK$€ïCtÌS~ëîÔw`pP¯Qs†iòË ý
+ža®\ÎN°j°s‡þ3©»Ö$HÅÓ_äÈѽD=9³ÕÕbËúŽ_øì+‹ÞÙít–lêPAŠÀˆÚW³b›Ëû½rçÎZÑb¼Û<Ûv•€üX°ù)Ȭ¯ÇT~ì›;²8|Î3̓  ¸Õ¹u—HAlcc퍒c֚ÞeÀF¤}XҜ&€:‚gu_Ð"¥•ØMr£¼N
+ÐùÀœ÷젓yB˜Ú%AËû´,IfýYF6 ÀµjèH*uÜp…Ù
+kίÛ
+pÍRÓ¹ÅqjŠ¤«[…êþtT¹°wz晋Á4ÃxU nÿ2uŽÎEu§O!U½
+՘S¨üÍ`ßRÙZTÕKiZ £Ëˆ¨Cµ3Ÿ´V„³¨2’D‡Ê(5sïpU šÆx8~ž~¡¿µÐtލöqU´EªýžªoQÕ]Çiš¯Ó®W¡Ê(Dõ]^;æßÃQÙ-T5)X.š’ë_¼“VŒêÞý>²Ö÷†Ž\¡P-ö!¤‰ë‰P•KQäÓ¹*P^Jƒz„; )ïėw\UG€Uª(Šˆ"®ˆ€Ý(*®Ö.–µDcl(vcb…°‰±¢‰}-Ñ_\ YËnÖàªÑèÚł
+‚Yq¼jÙ«”'_Ž¶À
+КëOìº&<ó(€¡]¼ËËê{ú uŸšÖ­€ËþÿœÒÏAEb• ÖC°•| ƒ_ˆèÝÀ×[Ü´ò<‡hÕ§¬”FÀŸãNˆÖD‚ó0ߎ%¢u¨RQP'|(ò0†°2
+d×®Ð Ø-`-˜)„
+N1¸ý\nñœ)R¨áC “R8$¸oÃ
+ˆdÒ ¼HgéHò‹¥—5[ÎØ#”VšÍ1Œ, öàÄÐX‘:B£ºîàU\–BÓaUz@>êÈÚG[5ll÷Ú €äSÒOp¯j
+[ ü…v­,z‰•)k7ç
+àA…Ñh¸ ‘Ë!¥’TT;WÒe[Ð%f6º$}Œ.?â /ÖEÕcJ9€ /o€ŽñÚ”[(é²@ÑdTŽIq/ÑeöstY‚Ïl”t’R¤}•cíßgâi’,°Ǹ!¾ ]2¶¥ÖMY߄>ÎA—"l¬çܧÇ…Ò£ØÍÉ"@N4.Ë ÏaÅSXç$Ö!Y ãº\Å +n :#*÷hâ3Ñ–yBƒ€&—µ¨φԃ·ðÉr·EÙo°/Le€í÷¤^¥$‘‘ÔI²@Ž1ï)¼O®àÁÉ´_(ëaÇGK[¿.¡÷ä™ ¿2]/VœR›‘ý*6°5ˆXÙQ¢@§ëñi1k‹Ò¯mOMOO?_¤v¢°O’Ö} •Â~£rV jøW·
+•?¬õÆDû/Y@-“}é;¿ºs¿{Ã!Ô»\)VN®²€VcÊCgˆ¹a}@h’£$)|™v*™¯V.mö6Ü”Ö]B+5]*ÜÙýYÒ[#‹’ÊðwIªbòÎ2€jJëqjåÖð–()”ò•ÞZ€€¨"„]ã$Éo‡Vö33ç´=í¾v͈nß5r¹*å?Y°ýÇ˃Å]£kœZ
+À¤Ë÷겚ëëéV7ž Â$=†ïsfüU§šó«¦‰òXîE ;EÐ=†ü8{¨L6±Q(I¤†z&MW,˜?ÎxgÁE=aófM»»¼"£C©‰FÀå±Ëîš*VvO¥ú-ðƒp졘ߙÒæ†È[`82:FÈt7 \3ªªD3¬üHWG}m à$¾ž¥
+/ <¾Àõ!¾ž˜FŪàÄ™ŒÔ8ó‚°Ì£JM œ•¼¾s"ð
+ d)·`ê&Ãmò¥™Ûp„ö‹««Üð²ÀánV €ç-Îdl°(qà’éOLÔ„ò!¨Z©ßnóKâÿI, T¹±bè¬+*Á4¢X‘÷5ßVä:`•þ p?èMDx¿A™4ƒ$ÄÍÔ nDv»è a§Fþ¬×ъCð¬ à5KÓ‚ø¢Cp¡». àXòûUåuÅHã—TMÓcÌ9F­Ñ¥1Imc¥.‰¥­‚h떨).(j%¸
+
+Æ!Y`,Ì O(U ?EkšÞù%c–MXaj¤¨)³@)žC¦Pàl•\ž—.„5fæ&vA¶­Ñ¥[ùÆ~7qc—ªç2LðFû&1–?F Ày4c¿zŠ—õ
+Ó ³ü«)›ØôîïÉØhfe\S/ÿB7ì_à9K”©ç!ÍS_Gü ˜³±^Øøc¿6§b@ØnÝøR?;§°däÄîo
+ú¬b÷Úþ³êxË_Ï/‰]øäDB‘=þ)¡ñXN[”M(
+F;wñ”¦º6юìûTBëÆ=x]Ae¿à'\ÙÄk¥ªm¯l½7äêRx+ÒzîSÚðoÔ¯¼3ÕS%ñ
+a\À?€J„ú¯¡aÔÁçw'^Ã> ;Œ‚h€r æÕA`¬áb#çÏðޮθ‚S‚
+¡PFR¥pAe,VF("4„¦´‚2–O”Šˆ‰D1žµ…2vä4¥ÙP@(¤N„<ðel{
+Ôc£‚ÿ' ¯èkÙÔ×ôµ˜Ï–ˆ+²¬¨ÌuН26+PdJh¼\(c¡²@É\* œL¦Œ ͐ˆHfÛTS¹»Œ"€? ÒZB¡N¦Œ•eh(…Š\R©¤4ÅD®©ÞH-11ú hô}°NªW4äPK
+EÔÃ`íí×Æċ«
+m(cöÛ)Ídª¡Ó ÇrÊØôK„¢p3µ¤iðS£Fž§¾v ¯Å¦ÒàRø Y¤æö H)c½T
+„æ|:e̛xZj0¬4WN=˜¡Ï2\¨P¨qŽç°hÂwðìÀÓ\xßϲa8ò
+@æC€;Å¥yÕèT"cš$4–‚Æ2ªîâÄ¿/ã†upW\×,ÆOp‡R¡‚?lxTþOMy«£¼ŸWªDãa°„VWàAù*T—"ÈpF%k# ;†žíCc®¸!ֈêuµàÏÖ;h<
+18 0 obj<</Subtype/Image/Length 12250/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰ìWiX“ÇŽ½µÏÕVn«,
+² î,´
+Ê¢RiU$(ˆˆ+^Û¢­{¯>}à‚Š+ë.uÁ¨€²Q!È&¨x„„É{'DH0 ARŸúþøÎ÷339óffÎ;ÀG(çŸ+:cÓ#Eg `üøPÑ(?}$@h‰ÉBË~ömEæÓãh!àßÎß\؂h0LšPO£…€€êßUÁçÖs'چ+8¥žE ‹Lì8žîîuýO)8£F «“ìӛZ
+·í§íeuô2nœïlٟå¿"}rÐ;óPCy‰’ŸûPnü¸¸…>‡ù^´ ìљâÜé½Ò„¶¶ªÅÁKÿc’‰æx£túµ!•È'gǧ×Ñ0é1"ô«‡`ÌÐ*¬ÛžÕ2¤…3wVÜا6F͊JÒ:fÙûŸMWÀ°à‰ñ2Ý „öòrÁ³Š>}¸Žq¯@.œ.ú¿£jj%6Y!D¾  ˜´ ñ;}_ 2
+dÖÔ6Ðû-C0ÈKûž›”L˜pBœ7`·ÐÜ3á#Ÿ¾AkXÿÛYnßK£Ýh0¾€c:ÀrrJ|–. `r°´i}§3`=̪FAÿXúOÊ# n6á¬KNJÜV{%ÆûtX­Ðú_®®bÆŸý+
+9Cï )¨\@@$™q$ Yj|xÖ`ÿ¿8x9˜¸|óü’˜O töo.êÉYÉ·¥â¼äÿFª¿‘ÅQÖ õ&,_I\+PªÌÁÓ£‡ vÛÙ&„xU|>Ÿ¶û¡L“¦)u³Ã=
+ÅôxÅûŸL—0z›'ûQŽç¸ÐŠ"¨ñPû9˜>¹âN ±Jðå3D…[ýylӛûlCœúX݃/»9÷nÁJk1μ3³&)§f‰Àº5àR
+"Ê{ÉÎú}íXT:$÷ä…r«®u˘Ê%Ǧm3J%
++W˝¿œ`/ûz~ëô„Ê'óß½€,ѓä¬b{Tß®õM€ëJM¹Ðq é à“2rô4“¨lé7äJ¿›q>1fg‘†z“D 6Š´0ûÒo«3‘üq#R À &
+UÎ¯â²Çc³}]^ K
+© xµÙöʪLJ¬˜ ‹Ü
+³h$ÿ.óÊ«1 œ.`ÆVœs“åÂ8ñ•Œ†8øñ[…ÿ€àªÄºm• ø<ºã6KQ¨„4¨þñn<CQ¬MòF.¯aCÇV!¬‹Þ³
+^È»?NÔù 8KïÛzp$à~·èöÞ²i䘁Tqää•IF&n”ã^IîªíCéêì¶4KÍ&aQüxª|î#=ou#dč#™Ú£ÚjåŸ]Á ¤W›ïÕ·}ä騽³Ý¤ ë§ o!¬Iú$«©3\*hØ`cà®bâÀ&îK°%yyO{òœWu„ê¥}NŸ\S–FÐöu~Ÿ£äŽ#è‡ýƒYï% ÀG«m'TΓÿNà´ÚŽBðØ´d>/(}F>t9º éðçÀï”ñ¨î´H
+HÓôûZaaØÈÀrÐyøšÉúŸ)𠖉_•¢˜ÌhÞÃO„Žq]'-5- úòŽ ¡ ê×ìcE–èŠ'£Òéø;”µ¡Fٕä‹Î#YKïhA0«5<”Çka¯èíˆs_¿Q
+á®OEZÐ
+(„7²ÇÖÑ3~ìú¼C¸úÂ2&qÄÀ<×áÿ‰Â›Rgø Åì «a—.X“Ýqf4 E¸ZWo …­öÔÕ¿BÆëƒf–aMŠ@¡CÀçÍaõ
+¬kB™m69õX@þ$LÃÏÀ{£³‚6­TX2Ýñ9[aÇkÃ]½í…`×fYÁê£vü£ ½šÖLóþ&´VØ‚4"ZȤ½ÍÜïcEEåߍ•S°èÁ6#¡‚Õ›@–ù·(—/݅m{²z,§‰?i%‹
+¸¢_MÛ¨t’a¸¤„viðÁ̑|ä8"uª
+wˆ=Ðюþx!ÊcƒtGà¯ÌàpŒ×¸1×ákpHù„ï
+zÖ^£¼dw[ζÔµÌÁ‹°@O?"ÉàW܅I»'‚ª8sx_º±—ú^^†Zj¦¼¤ê¶³ù@ž©
+‹£,
+è“Ý3ç-Û¸·yBƲxÄ$Ð?/0#O£³Ep ÿx¤ç?@˜¤³Ÿ1E9A/\§•^2mPñî>y€Ð'\ „e{ÙaÐ4ÇNÚñþi€ýµ ÞX
+¨‰uí靮§XÓ»o=ÃpÚæ9g¦=T>î­Pþ=Ocá¡#ºŸXù9¹+* tÈû+céˆ7ê»ûb
+B¼¨4­ pNÄÒAzȧŽ»–I‚4^’éèŸY¨\µBö˜¹••ÕDç“>nÈõ_h™ÐäñþÎ% Ã(ã†àÔÈ¥Rž¡Œ¾ªN¢ÃÄɃþejhÈ%{‡i<ƒþŠ•âó;–Èç󍍌Œ&pŒå¢fNŽŽŽò {gŽ¥‰‰!vž€xL£GcgŽŽ³ ¹}(
++²˜)™·ì~Y˜Àå`¡ÄKÀ`Š¬Ãñ\ TO¬¿] =
+…ÂMxÌÐzDódRуéBÛ"ù^N öÝQ¶Ê×÷±è6 =«cÁyc”Køcü¡#—oË}‚ækÉùµ0Híë‘âº8„«ÔâçÆæ gbG×ޛºËîq^¹ãüÅá4
+ìFš”8=Ë7`W/6ꛯ^“®í Xùè^4™ì 9:7t3•èIA‰Lª¦dGÌçÈïñÜR
+1Øu&¦Í%IO@\t¯Æ
+~Ê\ç®^#y-)CVȲ^óT/~|Ç:%üz5<Ӗ¶#ûՎvÅ0zā…jðœÆ(ìKÔo§išiŠöÿy¯Î¨(’-<îÏSôì>%ˆ 0Ê¢ˆ ‚bAA "D(
+,bB̀‚ñ)æȪ«¬˜Vy+¢„•QÅ”$’s®WӃ3ÓÓ©zàøýèîºuëÞêÛÕ÷~7[ž?Û«yBr‚<7gFô˄N}ÕÏ£FHñ£åßå¨ZóZµ½ô­§U¨Ö€y`ñ”vI9E·Gť·—Ô9:él©Þ5#¬gï„ÍÉõÌډj¦o˜tÚgùþ%AL€î[™Ý" ;ƒµJS1ÝÂ>ï‚í^41êk½8f“ÎvSï"H©ªÀymf‹ð›Ën…BFŠ±?A“AÞ›ˆ¦JØ·mã${‰œ»D!e ánB²Jæ$ÿ)›vI¹:d!ŸµôÒGàœ9bÃÐgi7ï6AJoî)4»thG®5t$!ó ¢ly7¨øuÜSJ…;¹w§»£Z{Á©è2Ø')¥&B†£š¦Äæñ»ÊÀ9/©I…i~‰§âÂ
+Êù~ã½JPí׀|@)WBJ€6-RZÉ
+/mÇ»:GH½þ±’úfšn­Fá»d[õJ±ðš­˜‰ÓPá̱‰ÈÖ)QyPk²ô«ø¯_’INËÖh$l'¶>TØkŠÝª&â—ÐõW´Ùö°xT=ã_/€‰+> 6>d¸¤\ÃÂR¹l™à¡}f˜¸œ¶
+9ÎÂo¦Î±È¨3§h’ðÑ È^ûY?¬ëÔÈÆÒ%㯽Õ=MqšK€"Z6>$ѕìmâ°g &€»V%+až­s+;íÜdás–r†h‚6 µ!ƺŠU؜S">Œ/m‘6¯pÂœ,ž±´³ÅLlPÉñú€Ýˆ€ÿ²k- p3‘c€Ïb_9›qÉÇ-\Dê# ™dñaë á¹dÀçi¿±õ%B¶™Ü>å2é×cˆ®f
+÷ø^È%úo²¶²}4¾­Œ’ÏëbØ`Èڙo­Ô °\€e&°73VmëãL–é=䚄ä•R?`
+@ˌU¬Ýaˆ8 ¿Yõp¶ÿ*•“n‡j]ïÿ™:<ö&êdŒ…´Zó>vg
+ÂUç§Ü½¢Aõ´
+üÞÝK ©²¤?†6½ÀãïŒ>žâZ„{
+’ÌRàYuÛö´‹¤ÎGKa†9+©yà‰ËóâÍÓï;É=õ÷¥æ/ù7Þ!u_ìÜOª¿~×9[à¥p‡ËSz5fTY݇צ†¦+·Áð\‘üsÐxؕD›× Y©°Ô,®%×úÚ µXa<ËÝ£tÃÐþُU8åë±ô.ÏÃÏ99iÔÈÞâÖ
+ŠgPh »Á†Íü[LQ]`¸w&êI[‰S®Ý@Ãnê`真ÖÅyPeD|2ÆRWmbbÒ¥ö#EIù(|#o#Ý(šu™óQ¤¥øÈi…š0 rŒ 4¬2±-†÷âýªvI¶x"éuœÚ¡å)XºlÍgä€Zë2Æí¡!•;dd ^´VÒCõHr}*ù—›\\Æ*¬£P ÓuR¥øŒ«!,üþøúZ2ö¥Ûî%0ͼã Ö» ð>½ /i˜kŸ¥–œU½~ ªñä+Š9D`ÕBÂt­\2nüP/` ™™]üº±zMʏ¤LuPñPÌ¿?e*Êæ௩ùÐcZš9ñ<’Ï!̯܄vLÖ8Lf&tü¹zËZÉfe)¸8µSLÿ6§ „s8h̽?¯ãccã ËN›K°Ú‰óÇùÏHí<›œ
+BBÉכ€’ [ LåûsßÜwÎ}ßùî»÷œƒ—Ÿ\'{ÛÚߐÏ0םhAuHbU4|!¡Å4ãZÄÓdڒšéæèuÚÊKãNCš¾g9¨¤‚M5nS˜œ”´ÃÈ@ÏÐð"«üíd¨_3^­/÷”‰»}·µ¬Þê@ÔÌâ,FÑø‹6•ëÞÿ,ùÏºN9ÀĊ)ßÏDǜDەM¹d
+×éÓ¥H8FvgzûÎë‰ØG\‹ý¡G¸2ûÝæUxJZŸ{C×\ h#ہßìoÈÈé—‰7¯~
+6ÄÉ߀¨©bìøZ
+ߍǿ:’óîû›­mB:™>i!§4ˆâˆìe¨I5mý>
+
+´\ŒÃkÀNúÏ>'…Lx=9ªà¬b’XöžòKú Ê}lދJÊsˆ˜R$Jl•
+ ¬F6¹N—z@¨[ 9ÜYzv?>VbZÐ땊٫yl‡‘C( ðiÙtá¼¥´”.@å›Æ†
+T‘Ór§MùÈ´H<|Ÿq³hÛY(š\Ý؛ кAéUÍyøLµ´Œ Ÿynš
+19 0 obj<</Subtype/Image/Length 13162/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+dýz±>þR)ë# ‚ d‹`…”õS(ßar¹ëý
+@ù»‚3›™#ï–Ãóš¯'ŒIKàw4 ¶åÔ¸¶jµÛ.—¼°-àLÀ—¡…2ÓÒA°zÕCsN6Àfԉ¸´àÎû(æ‰3¸´ê“v• “)—„o ‚gx‚ù6K$ˆ«i”ˉjŠ‘’0«)¦¼’ lu”KQåÂÛ¦­ˆ«{Ú¥ '''wd´]YN¹¨Í#¦˜éawÖEïÚ­*œ¼€g¨¶Ç5Ó¥§|ª¨m3R.ú‚ÖL9¿ñ©࿯Z0¯©«"çïrÝoÐz̕[=חR‹8Läßvg&A˜%ÔæÌÜI‰% üÐ^Ç0Mk™¿Ž>Ž \|s]÷Ifí£|¦‡ý‰aZ62Û'/°dšç€)€.ƒÓæ€é^‚Ʋ… Ÿ¼ÀOT íAWv%ötÐÍe~ÿKæÈèÃϸ
+g]²‚)±§«€pn~÷FۓªÓ|Béê:›“ÚÓ<LÙ¦{˜²Ñ—!‘˜tšŸ§lK¦ù]`‚ýŒ«Àÿí68Á&UDÿ}}DÿØp¿Û5C'Á:"m
+öÕXÇÀ^c‡çF҄`‚>ÁÜЃv;mFdÐYhè°ô=lwjJàk5dsk-èت­N¿Æñq탏ú,xŽi×vT&̄]Xú1ZMã+C Çj­5#c Ô K½Ý©ÝŠ}-B{K«×²•«>°…ß‚Žç¾8½@·ßÃæéóƒÐØW–ÁóG806 5àÆÃvnJœU„DXÚà&\t˜
+«@J@Ö.€‚õU°ªNßN@â×c9ڕ”‰)]†‹Ø±èI×vTdxYûv´v܈OȈ¸õ@ÙJXS«„oÀ±Z°5¾8ªþ¼bÕ¯ÖåçØÕÝøÆ-åµ*|W3úX4ø•Ôø¡µø¡yT«¨À`ã1¡Sƒcpà`ÃÄPÁ×A+?¢?¢Ëtõ=Ü>@o!ÀÇöpøïUÔá{u`àúòqŒ·aýÄЀD‡[L!ôM΅5ð¸5й_»Kƒct¸KÊл¶ —Ü]T};ÿö‚hAÜæ)ú$(úüÍÝ+p³y®ÌyèšéÈ£|òîÄðÊåf)A æ LéMJì
+uº›G¹äu¸îWç,\ŸÓ隣PzŸ G—¦1“†«¡nƒ÷©0?+3UÀÝ+p³ÍTÑÿDŸ=U®¹Òý”Zêe‚J£\åD¯ª—`rQbiCq9•rÙO„æ¨jÞËÌv IY_XŒö°Ø_XŒ¶Å¢O‚3p÷
+ÜlÒ}î^›mɼ÷n»ft«)ŸØ ‚H \¢2 ¢Ó—¨ÂBf%–0@±”Ëjëþ³6<ìrÍÑE½‰"lFŠl'k-•íÛ©‚`¤Îôʨ£Ck£Ç^ÊG$¶DôIPô}Õô¸fºô”Oe5A،”Kq†µÃÓQD‰‘I°º’rљޠõ˜·2ß5—ëK©Å^"º žýŠ Ì3Á|u–#Ëà%² ú—± É,ÑÿDŸE€hw¯ÀÍæR¨ÕÙµÝÐ,5Ô>h.ƪ@d\«³N1V‹²V€ª:€¦2€ÎB€Ç˜{ðj3¢d=‚qàú©ûôX*i¨0óè‡çóÑ* { Àc:¬h@Ӂó÷©QûÀÈSÚXšP»ý
+ñ6Q†ó×U´âÂzŠÑO Çl[Q¿0VʛÔ˜Jº¹Z­Öc‘—d™]…IrK:@LÀÙa¬
+ÔHáDþø­Fhz¬½q õÀµDŒÌi\Ï ÁYŽ Ð&áubŸ`'^†bptR8À•øÂ^‚³
+ÐøÄgPŠ‹pT¬+q¨¾_0æ‰D2k §Õ Í êÚÍ-¸üG½fj´=qŽiÀËP½ñGî#J´cëö=i£v€¹×9¦¥ù…vždºZúq—N‘˜çLp÷
+žä¢Ò‚ ³ÿÿú¼Âs˜sïÇܹߝùÿ¹§+n~èú՘ø5ÿø1úP–¤—cŽþš¸£l'"ÃßôŽð’r„‹ù–xˆµÕi¬Ê`i ŒØGçç +Ï6ey”]ùu¿ôi½ØÇ·l7F€Å€¯*Ûð¶ìšÇA&ܙ¹Œ¹~‘AçU`»ò!úûœad¬±Ÿ·Ó?Qô˛3*r`u€5,‡ˆð4aŽ½¢lÜN{+qàÙÚÝ×¢o„—•#T‹§[ †±›BƚAŒX<À«Eò_;áŸÁ™¶Â?>UXá4ƒdyÃ˟¨.6E€lø/c›áš¬Å볺»ò¹Ëß3£é< ̗Â'æîސè2;øT‹=ð å©ÑX„³$íl<ŠmÓØSn^)ù_SëØ
+na/\{Ûác{졟þ*NÀˆªÙ=då;HÑrÿɐÁ¾þfCɤYàæL9p.4,èzü”¨zö†‹p#]àC÷mô,v©RÁ +‘5ý›0ÆØl¢1P\½¥1°ËUÏBW{ØXŽ¬©·—¨¶$Á|vðb,ÈÈpd_0´WO]ß(ò’‰Õ·G1tÞ]ηŒ&€¹°V
+ð <qjÔOL-³1’ß˜àƒˆ--ŒÀÒÙÍô#)€ˆèEÖ²‡S°ˆØÌØ;xh£Ð§Rr.4±' ÓQ‡Pϵ$Ax0vu½³ÁaŒ‹X¦èú⒗túŸ¦¬n¼Ç·@<¬’<G£§S7º³Ði
+ïë(òk°K©IÌõÑÝsï¿Âcùaé¶WØiÚ<cýy§çÓ%_Ošîn¶8ý¼å3ÀÒ+“hM*›Y“wïòŽ+êøƋz²{^Êõ¾ƒ½|¤«ç:ük2P”«eÀÿX÷dÀðnwmI+tíö–ø‰ñÝÛú`Æ _8bÀ>ˆbdÇÔÊù ÚêTOâO)ÎsïS pʅz² ÆP=ëý û>V@jÔÊOKó7’dónÀÄóÀçã\‡ŽI
+±@I ðeŒÏš4µ€yXÐ_¤6¾Xëš×ôT¤r©0‹ªåZ &ԓmT0¥E®lÃm¨.€‡9€²­ò£—?Qdú˜²Àjʅ÷èB#<rJñê O=7ˆz¯4HfÌôÆÄçé¶N`¬.€ëzr3ý r ˜|Þ¨`ï
+¼ céœ+;u=½¬¨Î€|¾imd">»o 랺D’ô« %Èy½gë¤ì+ÆEñ!¸…[çÞG„7Ù0?&|#ìeAÐ1+“È×àËÖ
+¨6®™ÛÙjuě±ÇIúÒ ‚ú”Ap×R9+‰}ç±:‚ýì‘?˜®ÄÃoAp%L„1ÀI0(Ñ¢
++Â@Ô4ƒ >€\]A°Zèô©z)z’Òɜ£ÆHúšò&W
+¸–¿NKb—s³ÃYÍîó.R€’ñðè\bpOC)^`
+q!ü ˆÕ°³×[tüx¿K¨[Ùª°¾÷&üFèÈÝØ$véTN8{´íœ  &JB) 8€+XÀJ… ŒÝœäv’4˜ À¥]3ô\tn„ª…öÐ:¥ÆJ;Ûÿe[x€p‚øŽ®ÆàØ?„ÂÁU€ÏAl
+ ,Ü% J#,ówÙÀØdKaÓ¦’{hŸÐK€ÝA°-â1.ÏAÌ^¨A-Eah Ƀ`äYÃJƒË`Q diÜÑàÝK€Œ" ¹SÀâõgÀ>½õãÄ¡r:ÎúÏ¢ À2¬ 2†ÁøÓdH©W8«  —:¿«…æاíúÚ^à۵܇“6€¯ßöɄª™Œ"€°Îƒ`ÖpÈ5ñqƒIKqQpÅ ¤ûT–€P§Ú€qÍRñ¤`]¬r‚®ž“pUÐ)¿Q&TLû]:™ÉmÿÚM
+®ÓAË^gڟç“_…¡û­Y¡87YŒ0VWd¢×ég‚azñ,?{›X
+å9àÅ
+2R‚Ø–î ªþèÀ­þ* p“eœŽÅÊuÞ´~¡tƒµ»& pv›º¶…Ö =2Šg3àÜD5@ÙìF.Àn…Ñ&2«(ÀK9Èþ"V€} ‰ ðç•Nf·\bJ¬n`
+€3Z¢4o¬ žð›@4Ù×~bxÐË0À³qmò:.À(`SÛ؋{Àc¤
+PJN$ ´R• Üok¦„­=È`ô!Áu&øM‚P0’B"@=NaО[’€2µ°gf—6hÏ j€c§äSñnæîQod<ÒÖS#+¦áC’ «Ýé¿í{ŽÜÆý„mY@CžŽ…‚wìÈwŠÖÓz‡Ó­éª
+¨ð@Ëۑnµ²¬”^`¢M_ss…I!(=ŒUK@¶¬ý(€Àµ(œh¶ã–Äl»­°ÓèIJp
+݀¨²ÀO4óŖù/Üɖ§Áãbº˜fÏ“Ûv9^–Ϻílo§Éú•WÊëër[›/֓å½&·%¨Î%þtoQNÃnMh%IµEàìr+,ƒ‚ð´¸s¢Ù3;yO5&@ö§"¥xÒD3Ý@¹û»+A(2¤M-" ­~jgs‹/ë<·ßOºCçâmÚ¾* ”Ü ·×yØ2§ñ"™Á-¹uˆ
+÷W¤ðÖÓv€çñgäÓk2bc4Y@€Œ¹x2ÿxÚ ¨/&¨>sZ²¸¥‡—U¡ç†wi x4âÍâh È÷] bS©ªÑc 0_/Ð%༯KKà-bxÞÊ[}%jžµY XÐ>iIŽ™¼¼e~ñ·(@~Ùòo¶‡ˆó‚LܲU Z)A „4 t
+€ì> ;Ú#' lãÏàioí<i°h¼êeéØÈ̖}_ëW€å 'ÀN˕Å¿âC·Å`d,UÒ¦Æw @Ґ÷ÿ83'sS—¡Xϐ•S¸´»¨ª—ümv1îéO®;Q€³'QPØçÀx¼ò((v¹`6L £K²CY ‹:Y@L®Å¼8“Lì×Pê Y |ºáªùÏþCÔפ¸¬@§QR¨õÉJüàU§È8.6sÀ<– ¿À2¬ù°3ÎY@@èõÌn }9 ¢xUnçÞG“ÐK "Äp ˆä6À[
+ÜI°h»=Å®:\²J>n`Ç>#cOÎCšy–@¸ê3IþwŠ/'«)€EQ S ð˜DþR‘ÔÎs÷@à‹&ü¼3Օ¼&’Ð.GÂ:úr $5Xd¯Q“XÃÙÊϋ­—þùr«9Ûø–'ª#ä1¡T"ä"Ï c>®÷äÃ4MªÉ£¤‘÷ŒGŒË˜Ìàúèc÷27Ìm¨¹¸hԌT×¥è¡<¢¢òȤ8í»öï÷;ç÷ܧs™YìóÛ{ýöÚë÷={¯µ¶
+
+-ÐHŒ$BÁ9wÖØR
+ûJc@"rÚÌʏêÔå
+x×G¢´KŸ(Ìtë8¼ßµƒ7JhÛ
+yšH²M6%’yû 9¹šô¨ã ‚‚Ôì`
+TéÝǀ™E|÷‰€Y3„âÉH­¾Ñ’lVÇG¦
+1:ÑҖI+¥(jSk)šÒ4š±B­¨Ë¸•ëFN) 3S;ª}/(뒙CíIÏ_Ó²@™KEsøkš1jø.ZCà¬lê] 
+Èé4cÔ,PçtöÀj³€Ë%eR¸¨
+Ömb)žÑ³€í2DÏñ~4cÔ,°bIŸö®21 ˜´.#Kh§¶æsQ EAß%E4côp×ùÌf{„:[š°L‰ëoØ!3'dûÊðœ·,‚pÊ.g9Bü­o=Û¤,°úá€)(v»Z;=qñF´{ºfôl“.CÑÏûí±e~F‰.6®ÄöÀø[÷øàáFÏîbJ%…s*qÅo&:ØØ"ç±ç4av7S²@ûûÉ
+È™4cÿg¿Üc¢:³~å)%©»‰ÉšnºÛP@R«­ÙÆ­›&6ô¦ÝBwъ+4 øB©h”¦vÝÊÂÖZÿÐ1Ånm@WËkê ϙa` à s‡aåý†Ûsî< fÎС­CοùæžïœïÜsï=çûÈ.Ðs|a⢠¸÷ ¬DyäpS"Ü)‚+>ÿ}Îmk·ºÀªLÀQ×ú„} cíÊL@úÂp9ŸÀž&aÇbPõÔ]VÆيàddÇÍ ±ì6³§9©‘³AÖ0F°ŽOé9{äJZÜ,õMØçð[ánTëp—jnŒ5pö"Ø0hE?rÜkÑ¿Äk}€ÙE¾±ê1&ó`÷€ålEÐ(…Ñp#Æ$œƒ˜Dضù"(Ã9]j@¯
+oÐ0)
+gå×íÑÉ cÁ{ÉÏL@škýµ¬cü×=n»²(WÜO@x\ǐsu+<µNí¸’mýÕ›g΢¥–™XÆVx‚rFn…Ç—³Þðbsõ04âÓ帒9býMý7± }J)#ôa¨,…rF†
+7î$L\†.C‹p²ßú«PËX´„‚õ
+èQÎÈ7@sboÀ5`ÄGköe]ÏõAäñÃåԀ%ºÀˆïŽÜZÎÔ$ªŠÞ4î~tA^(ªª,ûÖ\øÿ¼g^vÛz©.0²žyŠa^f˜'~óĔë¹’­ Êþˆ|Åmëð%v‚‡lX™ x~!Âe$ â·wkÔñÈÅ xҖ€3Ty¢»@Q)¡Œ$4¥E”³GºÀ_%à%Â$^íüú‰øÇV]ÀŒ‡µ%ÀwÒª‘ˉe,Z*f!ÕfêgM¿röHøvQŠ “¢Ù6Ö.Õ†™-òeâ^z‘ÙÉâz®‡ä~¢€Ù\ö÷-ÿj½|Ám륺ÀøŸ«DÏm4ÕÖtŽ,3Â_[tÜ+ÿãŠ*Ç ÝKÜ6^ê0„ÂocٕY¶„ñt–ðWoÝw®é¯¦lªÛÅÃ
+ʤ’z7§oMI%嬂Ú=·US&ÕD®¿õûð¢¦K2)oy_Š™O)“,â0¤P•åvåìSªq|‘G™dà\ʆ£”—ÈæŸPWµü”.°ªe-^_¼¾ ü’ŸÀü8©šsÛm1>ï¶3Z6{ýNÐ닠×'Àë»@tmmÝ|ý  ™Ð-˜ã ”£úI
+@ÕèmŒÜÌÔãœ{Ø
+šzí*€F èFkqŽ
+âl·Ã·bâtxˆjÀª+xhÖÛÓµÐx²ì,œÓ`HÑZ-0ä!‘ª¦¶æ©¨IYó—ðäUV¨ËÁPãÌx€1î}ô-80ÎÇôÀÿÔ.À à:àë|\Mô¦Îc|و ЀS8;§PT
+¨¼ˆYÀîÚµÀFC’£áæ¢Yø¿ggâ½_ÄpJ‹ìát‚¾àð}~
+Ðï gÑR&&BA¿¦ Êù k(o€×׀µ.àé<,áÇ=‡%âɐzçº $¿G(è.[F(è.PK9#»À{ɔ‰‹.+t{ ¤Š­EK™è–Ñt”3² h””ÉZ e­ x}ÖºÀc鯕
+èE;zhÇõ??0ÊÃXÁ§DsP˜0ˆ ƒt«}Ž9¶ÃÐ7o„ÎJ^Ü ˜BQ2ØÚØõ`÷ÀÙ}€r\ñ^>.›…ù"”„HÃøÎw|‡OŸÍaüÜò£w°ÀvG`¼‡LûŽ;€ht–vPˆoàwX[§Ó¾ùU²ðQäßÃçÛì}gWv¾ÚhÛ
+
+Á‰¡Ø€‚n^/ćôÑۀo :üoZ±†MÿL¬5Í”êLW“Ú{Lß$*YöË(•¡·éÜÀJS$Fƒ<YhÒË÷V™zZÒ/²iF®IӚ÷¾¡SRqB§Ÿ¨”K:/³í
+qŒL®ìØ#“*ÕÉ·%lF‰¸ËZÔÒmú$Y¦5•'(uÆ»‰z#ï»9²™5È5ö:ïYEB¹I+KþÄÔÝR”jè—dèT’ÛÉj¥T¶§C)—ňíìeu›B•ø½X¡;Q!é4¼Ÿ×ª1åfH5ìÅô–SÕ^™Þ$L–Œ’”6ønê5¨¢¾dYeâ7¦yÒU“®íôY“VüY:«w„1> Àø1>Á Ãø"üw2ëa
+22 0 obj<</Length 2257/Filter/FlateDecode>>stream
+4wÌÃ=ÈNØÈ{â¢ì1¿có´V\hæ¤Â±¨èm@›"m߃ÃSÉ$+npx$#W,ý7Ò\k™õ’{ï,sVC°¬¸/›.™àR{eéWIëÓ¯5‘-§óÁHp!O!¸ø<¾>úÅëŠ_Iƒ`µŠ¬Ô:ÌE\)RC"Tñ~8™Ío«rt|w5Ÿ—{ý0˜Þ-¤çaøp_²óùh2Mk?,ËùÁÇâ\åD âd0<™-««?ØçÙꎝÍWåíâjU^³ñøâíùk²ëðTgWn`nNöÑBj8\kÃlà^՘Wßpøïæ/¥ºF‰dµ‚kÀvìÉO<ãX¹À§8
+/@FskSŠG¸0¸ü–<MPHà|p$UÅDEgøÁº¢µ†9Hñi-¹*÷ë>?¡6xxI©<:Mëu+ÑÛëV"î€çVb_iâ"SK¸@Æt$Fœ9æÁd3íGºB$ Ïž…[ ”BÁÙ/à€±$Á¥š Û±±ÐÞXM&[›–š‡ØÙ\¹îéžz2ŸŸÝ·k‰Ã!
+A‰)R¶ˆ 9<p‡QB_FU‹5*;=ÁT¢*É:æ5SM€O4ÝB*ô´RZÂڸś¾bS¦G¨Õ&K”áR´g6®ßt‰ß’6l !ZJ…z„
+¦m=d®dP†MQ¶Ïî-;y@Þ79ŸÊ¿ÏåÅñëKú!ðà 3ÀÝ·©/¹–K‘+“lZr‰ì 2ûß¼å›띪·–‡×³ßkN“÷=ÊQҚ>¤£\°pY¤˜áæÐ mâ6y‡:Íގ'ço&㞎¾å
+x
+u˜]d@æ¹&½$Á­îèèàp¾A¦íeM4kb´ÍI½¸®‰ÎŠæ¤š7DCŽÍD¹\%¢¦
+ð†‘˜vRö¾|Ió\"ò â[úΦЛ,Š+ü¥s]”Žš–‡f¼6»s-Ye43h;$ò¨ÑHŒ‰Þ„"’ ´ImÁn’³êxòŬš¿A¦4¶z‘ꚉ:5øûFãÃØRª% ²BR‚ø–Rµ+©éR©6ZÂí¶¥Tk
+I؇䁶<¹­n£ëពú&eŽÖ2ç¨bþìøe(ÌÐ)±ªbŸ±Ë`ªP
+©£1Ì
+'g\3¨ŸšPLÍÄcvŽka;+©LÓ³³
+ïŸg4j½?¤'ti¥5Òšæoѽ0º‚‚û$¦C´ûW0@µò‹¼Ò êJ¥ÂîÔcy…§y=ÀÄ4‹£.˜5eÇ,¾É²ÜëÑF ïP˜HˆUZQës¸Ãs¯È—pm'ÜjŸpSªz ýpŸONȹ?,½¼ÞýpVŒÙÅÙ/ãŸÉ ¸c˜ùÚØ×ÑÜüÙ5ZõS1Ì=8M¶š^;€«_Žá6 Ŏz½Ç¬äá8‡LåÞã•Jðg”°Òû›§µB¯cGø¦C´±Oƒ´Ä›P
+<
+)ꊢnñÂ4Ì*ªºabmÕ&N8˜`zGúœÁ<L6®Ï4ƒgŽ1RßÑ°ˆÒŽwbZÕ,ăf§Üޅž&±«˜Þ‹8, ÿxœM¯*vþX.®V³ù-;¾»Z\MWåb¶\Í ðÃpú0ÇΧò`øX¼‚m5–Ïð£ßÚ;Zñ Ez)’6zU@uIhð\ÕØ'ãÑß#±À !}˂–K,G—''ÄÓU‚àLjɦ«fø/ö½|Á¶HŒæx§„ž†áɱðM™ûÊ¥Ù?B\OîÅ.¹µ*èÝr‹M¹
+23 0 obj<</Subtype/Image/Length 14799/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰ìW PSgþDDu«ÅR×ÇnuwéêNwÖ­P·>V]|T­Š‹uU
+èÞq º½@jΧH´¯
+èd>PFPþIÚe0r0
+^‹7̺š tû(>>»b;çƒyêñ†(Ò1ÏÏÇðá¢ÐçúlCځ>q(ˆð
+
+ôG#B¦HéòŠ]‚5×ï@3ÊNCň±p¬çŠ¨ì,>ÜN®¤
+EJÅÂ/¦å¡Øµßâªp>ñ¸h‘(RÂ] óXÏ݄vøÈ| ×=}’‡Ã<•X³"}x(€wI Þëì\\4qP3÷\<¤ \‹héT:Ðu\2¬§!°Ý'vÉRbò#¥Ç.Ãåe²7£<Í[8B¾-:ú? ôS@q@Òg÷Ú܆"¹‰*ü€ Tƒ‹¦â|¶*°ðJÔõ6>î¶ÛûèË„eYñax¼„’Æ04›Ç±b² 7}Y–ó,Ëâ&–… iË"neT"VH}5ËR§dYÊX†Ç’ŽW²T@¶æ¼ª#R³,ÝuÞ7o¤fÆ$u9AÆ]†¡FÊ
+)kaT¥¬9ëWC˟°,%,㊵sï•ÒâðxîâA=3™ŠQXš«?#D˜ÂJĒ¦‰Ï
+jh÷ h mÃÐQl—ŽaS’mi÷á?
++:|(ím†¤A\=œO-7 ¥röUoRq>Ü0‚CDl6PRPöáL·/—ÔÃc«¹ÆZ¢á S‰½™†$@Í"Ì£ñA↡
+j×µ‚ǘ`/®bE蠃=å• CÏèҚOV3BzFHwêéÿÒX:è CÏÀ❠CÏè×ÖeÜa„t¥ ˆ´~-RÑÖw×6¾,™,•ëõP¦9fÝ£’¦†FZN¥- BU3|]_Q­ñÉ3j¤Á”Â.uE£\{yíÛÕñ§s?o§TñT‡2Žåš+ëÏàkd׆i4¾4_ ÜÑ̓…RÖH“R+zö[$Š.¦¹›A“ð¢Ý­”k
+€ÕÑ|Hhæ)Jµ¬k]— {†°ËpŸºaåUe¯¦åÊz)ÖÜ\NCìB‡E£ ÷/¡,ùͳ¯‚ãߔšfÐÀ‚sDîUG‘φO¼ê.Zò¾Ûíå0+!0j8q÷αZ$Êç&Îô¹xòˆ,7Z%(IΘΟØrÞcíª3nŽ'P!½
+p¨›^£Ä½ ÀvOêêB?
+1 Ӄg›Ú8ð݌ˆÍ—F„ô›.ð2²dõ 2$.Àš?Åcö_ÈHÃo[Ï=‚þÝ>bQ’¥ÙeÕü(³yù…ÛŒ…G_1ùøރ÷nPukIJ+”®;÷¯ðf%Uú¿ºB…ݪòŠ¥‹]¨£à†å×þ#vxâ&±¹ÿŸ"߉¿™žúž!“?32%ÃHB‰ý@£?ÆÐäp5#gÁ³7ê¨pJ¿¢tD¼z•øs[5 ñvö/æ}À?Ï'D¯ !c?wu"ä¯ÿ¤ç¡O–ö±X¶€¸LZNˆÓŒy6Óôú-›b0–2ȼ¯Cväk#+B¬lI„qoB³ÉgsùÈnؼ^#6®÷ ÄÎj–ÏïWvªLôâo¦I/—>!ÅE ¨cXÊøbëÖoB-r׋-ýføå­[þñ8w3HoaBÚ0Á¹·ÙxBFœap²±ýô·‘”®¡ÔòZËûµ“TÞà ðÉHϕ!&ö.“ éxA“Œ<‰ŸñEá_‡Én¤·óf†ëY1ÅÀïn=,²!cM-q¦¤VÄRŸ;±ÔïÛßd(žõq Ÿwj!i…/
+` " 7»RÇ­íöP÷mžxŠ-ýÝ6•®ÿjªu Z`2(†!@ŒŽ ²1'©õ9©sŽ¢à™êéï 6֟³Áy@_+^À8XRâÑw¸…ËR²~¢1›?w¾õ.BܜÚÓÙFó¨d˜ž¶ÒžCö++lÒ»"Ü¥îó¨ãf:L`¦e+õVú”ù~Úw"É̾÷•ÙÓm÷Ñ–û©ÃdE/ÙØÈà“af‚íÄÞÕ{š¾ÞBßP'sHëÝǖLYNÖNr#®œé5jÀ3Þ9¯,ñÑPOn¬˜‹؇›*ߏ²ã˜ã[ÆOœÞJ€DŸýôæ[A€ßu€:žgMúCþó72Ôp‘ߎñvÉâ¤`Úæi_"¿ªN€½ËP€‘ €u¨©ð›ã[²ÉÙtò[ p|Ã~zÜ{?5KÆuÞgð÷1¯Jlû,ô ™Š[œgÐÿ©Nþ¿º¼ÿÏ{™GEužaü² (û"33 WhhPŒ  ¨)¨È& 03ÌÎì+«4jcµŒÚ´æD³hÒ´9=ÍI==ö˜&
+
+nמÄRAâíû]+2I„a¸ܙÃߝûãyž÷yÇè‹€`°UëÍï©£»¯ÅYàÄÀ:ŒÏÿӰ݃×Æ܂[ªWD§Þ·@`e
+¸Ú*H»’æý$¢9ð-ǁËúm¹µN@^3@ý)ß݆s£ç¢F7bºùÈlP@Ø9°@4¸âø=÷ (@rÁÎMŠB0Ô Pž‚9ÄȅÊÂ8ö7v.|ݪJÏ
+ÏôW§ àè÷\Cÿ•ëˆ± Ý¿ ·G¨Þ@ã¨B
+àÿ„ª÷pºÁê«Pk–nðŸ2b N@þ„ð[¯Ïj÷¦öp.­>¨åË›°@ƒŽdà©2`ÎCšE3
+X˜Këð;»¹m,
+ê Qjœ
+˜¿ 0ȝ?¥LÀs
+Ð ¾Ð=W«b
+é*±uS ëd8uÄþè`•6ÑØɗӶDþ î£4Ì uÖ5bܵDʗT…çnwewr¡%÷$Jðð±18 (F0ˆb­²@—)ëÀ¡$RՂÂ<e˜àÏ€‚êÕàê¬ça‚±g„Ò\‰Ïø9³ à.!I
+æ¦ ¥Û5;bü˜ çfÚLý&ècàg²¿áA4½÷+èAÍP€ÏB-ʞUŽ7/y
+
+0bÀªŽ#›…‘ûÄJZù%h‚:1Þh…ç9s±äâÙP{±ß%‘}‰Íݙ¨5 eh·,¦(YQ¿È* Œ+àcû`ÔŽNÚw½\Æ?; Ñ™ì¸ËVš Ÿa®Ú•ãy9P…¡– 'f „ÖígËGLLÓ'˜ڍÆÎ:)Uˆ) ÅÜPVä„s#ÍKÐ,àô3ðüu0zW7›€Vڈ¹èVNîL"íe`x€¼Uª_ hÕ`Z²o¢²]gæí_„`1—ƒ‹6|‘ÚfZÆÇ`Ú”¬8«,pìt%²À9W (`­±SÀŽÊ­WWPR×YȀÙpµ/bsðº(¡à˜)e@3ølR *,Š³¦
+?æþ{×°ÀY õ€4cûn^H¾D&DSàÇC–!°P…9ƒë¿,Ï«ëç,–qšôžOƒöâAzÿìX†þSŠïxB„`7
+AX†ÚÈyÀçh
+Ԁð »ÉR]lÀÂ2Ĺ'x¿2OÔÀ]/´œÒâ{ƒl ¶Áíz™óíè=ýg0Tñd8ÕaßðjW{®,¼H=àØM£G°Á‚V9Ù
+„àR”Ñ"¡Œ]°»ž§ñ¥+#J·é…VÁ!^6L„ i°Jµ'EÎÓy$(þG|™EyÞqüEm<" ‡¢ ,žµ‚Õ¨(¢ ‡È!×rìr,—²ìî {¼ï¾{¾Ç.‡f2“L3™ Ó£ÆfšNM¢3¶ØéL;ítš˜x RuÚ1žÕ·¿ç]Ä£»/Úºðþñ0̾óðì‡ïïûý>L@
+Æ8—1›UX§Ûˆ›3´±6íàÇK(ÒB)€ÐjKrŽˆÿßü¨½¹ªðǟŸÓØñj«½6®‘:◍ُF1›°Î¥InP½`ZüfÇÛyS±±õ—Çs ‚s6fÚ@±k~›NøÀ³#€ó¿€=F9XîÑvÄ#~"Žþ…çGþ5Áã=YÚo4öÖ:ý¢^I£-0¬
+”þsÿãMÇ>Ê1\ÐÐj™¹Òik kÀ8åR€Û(yÍEè;ô_¹Œ()pãXn_…åÁE¤€îϛˉQŸù‹} enÔ·–[@åÀ
+h8*¦{šË´|‹¯ùô€~© F ¥,.69°ü.AĽ‹=w”|õ%õ…w­»É `‚ûíDíORth-ÆtFތFÀMöI;­N«ëµ¼EÞqzÀPHÖ¶²«žó¡Ù%ò‹X ι35ŕ&žèØG\ÐpE‰œž©§˜ëP
+
+ˆØåÀkûú/ Šžïˆ6€t’4su;h0A…‰¢vZÄ.C~w§ ~˜r]ɓvaÔr«•H³Ñ!J@HðnR`º ·´C
+j@>AZÌJäÁ95Ž("Õ¹åëWð´
+kîn¶Ü'&è̲2þéO¸Oïp[…Ý(U‚¤’0uµÐfÄu€®ø¤ÀW0y‚(T€ªÂ°¨oETa)ˆr&‚"’½«€äçOæî2tëäH³Ô6 ËՁ FS¤Ùª,±è؎ Ò3Ÿ—¼2€ÉçŽêAê5%Oi³Àì(BŠõ‡(:XÑ¡eiõ˜sù^ï*`á™)ŽÈãç5ܪkçÍåÈ‹ÒLãe@qÀm1ÁWÀÖf·DXèàjˆÁÙÛª  zÙ°O§Ð~õS¡
+w¬$A¡&ÒÌ &èÀr— pŠÝ^À£¬1%O°ù†o՝ò$FÏúnµÓÁe×âÿ3¼
+<ÀË
+ÀNM ã¦ë.`H2€VI3+O`@ÞÒÿÀ=%_
+`jN#¿i.ªì&{LE‡”aý¡šeMÕXw|äܙ&ˆã<•`¢mFÊ]6­}e“)p¥íßB Zrhãd*»¡’Ub½1Æyåu"CÚÖL€ÿJ?ç[~,&¯¶KPÈ$I‹¡^1èS&¤Àª”Å7÷÷Օç×ø•ò²+B
+°šëé¶E‡×5PÌÂD¬/F+i-(Þ°*ÕgÀ«~ûÜÉ^H‡É1³w>81¬VÝD2Áu0ŒºÐ
+
+¨Žì½s¿\êqó7¿SÀðÆ>^ŽÐy,~µD
+ £ËÌt`¡ @ÎáèÕi>Œ?FxoúE/(øã#j…î’±z€>bU°€ì`—Dš VçAÂã€r] ÚËáßo/dI‚ .2Ӌå c½.W)Yµ“åxÓ‚ÄŽØ /,}äº ©zP@6¡vEn-éÀÞòë<@Ä1\l÷·°Ä%9Q´ç1øÕÒf;©§WÔCÀÁ´q-yÊÕ¾ÑXU¦7,;bU²é3  `Ú@¸<ÀìH—ù:˜<¢kªÀŠïyÞü^ñ_yó^>*Taÿ~G1Kh *B24€d宙PÛÂÿ}Þ£“#ª
+æß;}g×ø(j¢I]}h®…Y°AÕ”q«Óg€nœÿq”ÿd¸¥•¼pT]ñ倡b°so^0(q¡-¿÷¸ùO’®»Ý÷o÷€&ðþAþ­&ÞHd€2µ]ŸNùï±1þÅ(ç*%’=Ó
+àÒÍç~í¸ŒÖO†qéÔ;ƒ’³‹eg!P!ô€ÎU"fms¯€I<ÿ¸P«sC1Ô]k¢ÃÔÈãÛrgÀEuåPß± P@ôó.9ðY5ÿèÃÄR ð’gy¹ðírš ¤ÀXá!»Ñvp­Â„îà±xÞLÀ8ùY÷‡CÁ €=àŽÌ„E ©àý˜ˆ úD\ž@Kš ;‘æ(…‰ j„ЭPƒ Æì@L3 `¤¹áœzphûWÄÁÊV —Y‚L°yÀö.1³wº÷€gà.C,~=¥”!õL¬’êš›‚£q»<ÊküÇ^FÔ|p€se‘ː!(
+ìkì”Êe¤+Æòêi’ Ã
+@=ûZlgZ‡v|5 wÆßV;ö@¶öD96F`"UxÖ&÷
+困:‘"äwÑ-á24@Zðt¨ÂIEl[€3¶‘H0•CPM¾RŸ†,èókß³'{á2ôDÃyÿ÷‡$g lì?Z Ûý@#Ü؃™ØØZ‘íݏÀ‹
+—9Á‡¸õÎ(§4VÀßM   ‚t@=€Ô³%‘¨Û<i‚hÒÕJ½ £ÏóŸŽ@ûYHŸƒPá74Üz«§èøÎ(gör±ð ¿âyó{JáêFˆÁ–ke*I6­=H$êÓ€~Ù¡<Õ߬&ÃOnô€Ã¢
+z̉eå9PÀf”q×[{@
+Ù¾rÎk,b
+"(£=7øHé`£’.gZ£>šöê:ÿ}ŒƒÖ^ Foãbä‰t›ñpx$N(NQÖeüM˜Y#ŽÏsJ•ržÒõö2‹ŠÂÂmì½QÀzCÁœu€¡ª‘ îàå{Ltû÷àô¤ÏçEü¸5Í}.ЉEðA¤ÔWIPJ™(–!$ƕU™IµyƒkƒRI©}²”s/
+$]@‘ö; lµ¡ÐäL!‚c9 )¨Î»!Éí‰ÌÄ6ÈH•@,mdJ ÂÔ»€ßŠ ÷U3Hå==Âaì{y
+N€ƒPeA7t@hzm¡ñ>¶°Œ3¸;erð.àg’.œ+üã2
+Eêp‡1—.</tðöД¬s° D!‚£€Ë]íí¥°vq$ŒÀÀúEYUµS®˜3†;€™¬Ñãäعàóg
+ì®yF^£XÃxœ»š%eËFuû7UӕôÛùØø”.ð:°M(%$BðΜj©HbºYƹkÕÈÑRC39\_Àœu€Ïy
+ø²N}Mt‚E»À ÝÞ^k¥í< `+ýûƒȲ¯ÃDÀ2$Îa§H9÷—42%&1€á¤ª¼½|ÖðÛ):àŠ@VøC €u ¡ºw7Êl”vä(Ë  wšÙ @¤ñØ»k¤’*ÆN ç÷mœ‹ƒ2¹flA³YÏ:¼.™E§^À΀¡s° ­õl  ÒFÉú# p´¤ÒŲ;3,Oèç ëÄq
+ØàÞ&`ƒl„˜^(fëŸ8\ÎÀ½œ,럮©Ÿ·ø˜äÓÈØQ˜wÛà¨î]¯*RÜþ¶(ÍHku¹CﴅO= A(F 'pWM¡Aµ‰_…@©Z×Uù,IÀåxÍ¢T|uMÓÔߧý«_Àg¯¸ðít¢Ù݋·¯î´ÿI·ßSFW2.ïvH¡ê9{æ(œŽø„(ì¦$w¨b‹RZ^L‡$øÀìÈÎd;{$íᙤmÇå¼Te•$€Mý¦_€B¦ýÇì
+:[x¬}t@%í9¸@­’Ñ…(ý­©–¡ZǙ5`7ÊRkÀ³ìÊ%
+œ@èø¿N£÷O°©Är&Œ€'$Á_•àmÐc£ˆBŽJÏOp½¥éñ§ä]óO½¨ŸÔA
+0¶ÄÏCÖ\MOÿÍzŠ&>vƒäËÇd† uDi]CÄÅÿÝd”Ìõ6·
+üè7¿‡°n ƒP¬Ê0I‹h@󬷉¥áëáæV¸,ôÇÌ[øÆ¿ñO¾2ã0@욧QGüŸú2jêJãø…B DY‚AF,
+‚[ÁŽ `­EID\Mh ²…¢ ‚ b]qf8v˜Rc[Ç×êŒÂˆ€#¨,¡$b‹ì‹wîKBòBy(=9~çÞ}—û¿_~|˽€_å0ÖÈa…Î&ڵɊà±Oß
+ K§A
+ x): 2ºÌ.b'Á„yát@-’ëªíMÉEß{ 'Ñ ë‡$C ¶n¿€ë Úàx¶½?Äü¹dJ‡úX
+$“›cÿ“€XftrÒ.C Y Ç°^
+@Ø£ùJÑÃáErÒè°ë½þ{a¾<³Wœ«Sôl¯ ì2äO¿~APý/'oVC-‡ÑÇ à )€’ë:¬šlmÁS•¼«öm .ó•Y–M!sA–YÞr¦ßlÆz`·>ìâ ¿=œ´ËÒ2ê;zÜÅZ€¬‰­Údø±{À»§‚w—V;LéG®p^@qš%ð0&½e‡;½ €ð@H…ш
+*‚&'Vb“çšò Û ¹(3¾§K¢&L§ÀC
+ M4lëÝW­&¨Vm¹dÔ¶·.¤sæA›Ó±VlR…åNŸõiî *".@ `®wj ö5çX “Çnö’ ÒP\V¸&˜»H˜aŸ;€vÄ»ø¡ƒ$„¼QäÊ ŒêCÚ2eé-˜Ïd!Üs–ÁûqåF£f­NÉú"·‹# ˆI\¬`zA
+xÈR@ª°PE……« pOÛ'NŚýè¹×œ‘媙–áÂÐÕ7sãLuM@X:
+9b¤‚j@<ºX8‡,™ïˆ ¾ûÔz9ï
+ä'¥ïÇÐ"Û?¡XPÕ^¹Rk³Nz¶æš¹ê¦gHivþŽ»uœ¶l˜oZOú€¢mðü´Ùß¿7I¦éP(ÁA ]eÏw?£éÛÌæ%ÿ”U|¿Ø„µ5µºŠôqc«VšÃ%¼‹ü™cà4ã¤Ml…€þw=ø³®œ|¶22`0Ñ{{Äm¶a¦[‘ÿ)_—½íÑV/`nì-èŖ]½
+~X¢WûLQ#Æó~ê©Mç>k­`œgSÙ‰){˜ tà.xê¥6J¹à¶‹sÛÖé›’ÛÚ\™¹ábۓ¾QꞆØe'¿ÿ¸ۜ®añ×!„/Ù_՟EnJã±á ßS ÂFä Iæ`a¹Hçâ}ÉÛ%è¾6çÿ³/¿C·øXU'xy­/>{Â'ö3¦lyÖGÕ°yÂ_F°Ñe P+P¤ñ+#¾¡hüétü^”É:$ŒÊÜ[Rµïaº@0Œ’p€Ãoµã~Þ&Úw&6u:Z]ÿr0^pöl]ow×0<÷$Ó‡µóám¥-¢þ–—°KaŒ,»ŸfÀÞV¹5ù'ÿ·QñG)c‚ЊóP³Ròöñè,0í6èæojjš^־öþ–"'|ø”ö+<ÌÀdêåc®L[ÃQ
+Z|ˆ`É(`âýE@“AO"Mö•îx1 ÚeÌö)¤ÀsuÏlb3߶èý¾Ü3}@Ž;³•¦ÎÀw
+ÖhH+y`±”>°¥Ó¥Ó™Î£3éLg¦í´Óéqï3{‹w§)¹¤ƒs×Çêíìuö9gßs÷>›u‘ßÛý`Z€ØLrz—·ò…çMêَ>ºc™žñ~`×$P¨3¯ÍUÙ­ÌVOãjÌ9˜Kò0=ÆûÁé @@Öb–¨<{çú€uÕèX¼
+‹Woš³Ö#[*:?Q³º³ðÔ^
+FÑ—Æ›Âsáõ™ÔsqØH5·÷â$˜šWYr{ÿ´Mx~°Fö<Ÿ€8«g;º¾™08bÕôëá§xº©f0J–H¯•²ô„(K'eÜsI` ¾CäqöÔg–Ó4µñ?[Ä7ÁXN‰!U„u)K­“²TR†þºéÿ ÐÙÞ">ªˆôï¦Lj–6ÿ7©ñ'ð¡ZnïŸ@ªA€ä.ƒSëDŸâËì]ˆðÆN™G×'œŸz}B€M²_„ö¿Ÿ|´l—Û¹<àÝY`ùW„ál,מX™üŹjŒÿå͐b͐x3$ Þ I‚<̼A@…‰:j¢t7¬í§v33¾–üŹ:æ…7CRˆš C¬’o†$ÑKx3$‚gˆº ö÷€á!j–²^I>º_̤žˆ?WåN‚¬|EòѶUnçò@€-²'Áã
+ ùámZoÓQçK3ž—9Aë¡ÈõÓ{™Óç¶.Gnï-P©^|lñ¦5ª§ç‘ kNqwéR•JõÜüŏ«2žÜ7ÛцÂO‚U OͺËJµ$ا¡€pF$A¿n3õÑÄË Fäü3ÿ)ÕÊàø:a‰þ*=†*ƒ—>§fIàÈóó¨2žY˜±bëÂ%dç6·è9ø¢…Kž}âí÷ÖÊî|œ9;¿gnæ´»ý²{— >7 ±A×rïy@~¤,6Â0H¥º”«œÃ¤3¢
+x]¯ï †Ä«€R­
+¨h¤,T0¬œé ÿÓ ðë©
+(H”ÿtÆåýÀ®I 7Pi;‹Wæc@¶" q5j²0—ð*p¸èô Æ
+ k1KTž½s}@‡ºjt,^Ì @vR“`ñ* 5µ@wJ€|¹IÍî èD®†Å«€7¯‡kƀŠ­,^êε—¹ó¢\ë@fϲ6 ÚZ ¶ãŽ3Õ9ë-±„Û;dÁ o±x8€ÂôÓ ñ*`C{h;„1œ?jNjÌÔàêÝ
+^¸fR¤Áˆó*àÂK¶/²£ý@‘{4VÜáj|ø~x˜è4ф†Wï jìÓ5¼
+XÂ@Ž /·A·£þÏkLiúfÂà o¯ÝĽšEMÔ¯•²ô„(K'e—dËe1WaO}f 1¤©rv2H&ª¨!]FÊRë¤,•”¡ŸlÓt·)KUDúwS&5B
+ÒË?# gÉ\˛!)Ě!)ðfH¼’ÄNÊÀ›!IðfHj¢tëWõۉ!ƒÔ6c͐¢fjˆŸ¼TðfHdµç͐$x3$팸ðÎIiŒ=„!=’ ¯}õ—Đ4)ƒë©
+(H¤ýU8í›!C1$=N€_GPPw™²ì" á"jHÓIÊò ù¢ó)íc”¥º…²Ÿ@ S|½S@<ÞöPEPÀ¶Ec¤O]@6Ô¸1ÃN 1+Ðèö¤ÆAÍj|@u% ͤYÐL}{Èåò£ÛÑ~ ×lMj¬c@¨ñ¹šÕ@}‚ŸhB³ï"ü²O×|ÆÍ!9‚@PБÀ$O^»q®"]†yá<:k©Àxg£Fs㶏˜€Î\ºöίÁHñ—†Ëcy¸Ü÷€Néê;€!ݓÔì ý|¨ú
+4€;dÿ
+24 0 obj<</Subtype/Image/Length 12061/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰äWkTSW¾kÍjÕÖÎ,gÖ¬é,GëLQµU¬© Ã[@! *⻵K|ê [±j]­µ:RëÔZ[­(h}¡¡@À@¹á¡ðRogö:?š»ýGΏžß½9ßùîÞÙ眽Ï„_{ PÈÁnsDŽÉå2×xu TÈe3|dòˆ·½"äÓßðœ„ßd ƒÂåŠÐ‰ }aîóä
+™û`¦ƒdJ<¦̜0ÊB§ÊäŠ÷p…<Ì= 4îórù„P…<<p0>
+Vޝ
+àõHü¦4V¦Æ€.‹7¯°2ÅÎð'<gÀ}Þ"Ø7\2s]ØX°"‹Žy=wlÊLt FGx{€.b¨pSEå
+p,à§(€<_€Fè]Ú¯±ó`e)À´ŸðÅa€›®¢)€O+ oÀB5Àâ›û“¾; r­ ÜZ  Y`”£=¿V°çƒºÙw>øà³}gрG3AdD{?•
+?¦$‹5¡¤$ÚV‚¸¹Œ’ÄÜ!ˆ»;)IäÏó‚h« ¢¹˜’¨ž„UEIÔDM.%1PŽ™”DÝ@1/€sÚ›ùÚM@WKVR’÷”’äýêM)iʒOY)²D‰t¬Qº??s€¨ °•’Ȳ že¥ð>i•4•AYYóAÜÞNIBïI÷Gy â½¾¬çkߕsºãÍ\í¿(8¥yŽåj«@OóႰ¼ƒ§°¾×”¡Ž ZÉd[@Vé”Þâ2<X¸ -©×QVJ¨¢Þ@Nf~“t¿^=Bp•"ÅE‚ÐÅRv³(ü%»3‡¸ˆlŸ2—²²êA¤‘åɏ8<ÊÜ^æºNV­%-qÚ
+øm°wAh‡zÓݤ?JJœv¤¾6ð­Ó-„±$V<„›ÐÆpL‚67Ø}‰VÍPª®;£ñ¬êW+ÛӐ/äæ †›íT´½ÝÂfÆss«À‡UÞL•Ô×Ê­Ñ*uÞ¼ðzc«é½4ó¼R’òˆú°•²ò˜’”¶Ÿ*)Œ[@ˆ"¿'Ý&ÊNUuA>ežïL‰Q,è•`¯R—4}• Rã(IPºtÿ‚)ƒ8V“ȋ=,`d7¸VÈd€£µ,i$µsœÐxV?<êìxÌLc9®¡”›íà\€è2VûZ7 ÙՕ=Uðj«„\ÔWÙ¯Uæv€:\xÂmih¯èÄ´aÃòÙgÆoTc3wÔ´X0ãÖãè'8ڊ£;ðXݍ£{ís€,ÇRU½%§ªä\Mh¥EVݎ»Ð±ž~Çlhª­ wuhª ½ky‚£Q×ù+6ÔõV¡¤ªëù©ÅÑõhå zgm説®ySðö™u½ï*U>ðÍo”†àܬ¸°ã?§>¸W CÜs0~P¾
+?9¾ÞŠµQ®XŽºmx¸Iˆ¸±%áðëeP¿º£0 at¥kÑ¢ÙAëÃÿâ?Z}q¨Û{àøf€4¼¤Ù«‡Åœ¶àR]˜°!àË$€ó'.'\ý%XO3Wa ±øÃTtûa9•)VŸCûÎ`ú½›6ËÇÿ·B²ò¾¹Y…À€Ù2p2²0B0Åx¿x\Рèp–ðgs wq‡&Ȗ…ºlœŒ\t·% ŠïVÁüõåâdè!šßÕ«•™Çn)•KbpÑèqþŠÊÊ
+€ÚþØS2žÛmÈE¨ådy¨Êþ8i#Cø‘“pòXFP+¨*`ˆ£¾&'«@¸C°@ï4ª@ëðDIZeeYvRQ —y”Bd¦ÊC'¥`5ŽÉ¾¿u8¬³º—p ´W­Ë@jâ)I;u¦`5”cäj¦þ‹¥j”PM‰¶%«°?·Ùí»;ÀI͕WÜÜÿü¨qüY>^p¬±þýÏ£öeëñ/0ä†ضݯÿyÑ~F[8ˆŒ’T>•…ZJ¨¯iž„Uý‹Ûò@{Ö¾ëð<1ÔAR›GY)¤«!W³¦QºÿAÆ_„¬&DP×Ä¢xÊÎ2ª êÿ¢£AãC'ûëÌá™ë€Û+(+Ý#ˆû»(É¢LéþÕƒ…J4 ­nPAÿËv{P9ÀIW¨{åYͶ…YæK¼Î¼ª@ý+Ï6ò{
+Omžn.B»Æ!Ï`ÉÍöGð.n`~Pe×Y1ãv¨lŒõª:à5³¹çF|PehÀÜo5"à¢iEh3tiaùöæ¢.u¨+©xTP¯E è~%¯¯²¥Û¡ü–´i³5›®©2km±¬ ² í=BS–|€\]*ÔiZáUÛP„Ë+jjãh|«C?›
+Ñ–¶N5þ!5Ïó°
+èq·•–T£cMEuÙ*õHÁÛkæÿˆ¯°¨Ž$Ü ¢è‚Æ+Â*(ÆyK¢Æ#¢Æà‚’ìŠEÙO]tÕ £Æ#~«äØuý²Æˆ·4녮
+*3õ ‡Ü—3Ü×Û®7ófÞàԗϬÌëꮮ®ÿUwWuý; |æl:µm¬äýˆ’¨Ð¶}KÉw»)Iþ>.’ùVJ
+”QÒèOõ:–”PÖï>%«ÎQ²e%‡B)Iü#èýúÑyÇ
+À»bmVüþÛÞ^^s§'EçûD°Q ·g?%G 1$ùƒžè½MýÚõ _ÔÆ«”슧äø1JÎÄä¯)¹ӂ)É_
+ÃãË&[ˆóújÏý«Mý¯˜P"ú%îÒ:@“Ø.7q R˜¤=ş««A¶cªXå!´ çBêÿŽ)â8`"¹¢@DEÏA[¶Z‘
+4÷qó¹f¼`m²Ú~ûô
+—AâvLeÑMÃãH,EÉe³ŠyöL—†9ð¥@ ‰`õüœ6žç/ڎ"«ú§îFDñ÷vÇ~€@x"‚Õ£ÞZv#ë"ãD¸ŠVDЎ†ÊDЦ_riÐZ¾éŽF´×^_¥µOVXiǀ¡…ö-ÕåcÈÒHDi{
+"(؇٠ÏDyazÝcž&wã£fO»ê«Ü݂Y‰ÅrM*FB\=üˆÈØÇåˆàYfç~#"PéWI¡AFyçÛ«§•øè«Tb¸XÙSDð4SI­3<þ0ÅQŒ,Ðc#×òq<4™·áÉýÜDÉ=vµ|(åîõÆG"R1Ô+pÀF> •N6>p€5H³­î
+„k#ïã#+ð×/¢¥•{)ÛCÓKg,ÄÝ?¢äÄuJ~þ‰’Ç'(Q§¤ ^íU@êSÒ¼Ÿêuí©¡ìAˆB_§QŸHɕ(I‡9
+Ÿk_*T¹²
+α"K#¥í)ˆ `f'<ä N½Ü<YËç®c|µ%@¥Y£@åîÌJì}DzS yhx<rõ@òSꯖí ìmÓÙ¯"36¸F‚?ZkJ]1Äv¼kl,¢d½›'Â!níÆCPý˓^jë]ü½°{FðF˳Î22–u&ñQf"Pæa«=hBª4-Û1ö¨`üޗɂþmŽŽ¯JǬdcÀ*ÑÓü Þðøã;ŽdÖzÃ2öÏɈ '³ˆ¥AÙJ-[9ú¦n\ê7væÇÚ^¯íaèÚÌJÄ-D‹©¬¸kx|âÄ؏Z?½î'‡ؔMÆÅ¢b{ŒŸæ-Ôë
+0á\$.dš?י¹ŽòSyؐIØ`
+pÄÆR2pqÞè.™íAG==>¢ôÐi
+Äb!ã—–=¼?šüŠ6ð×(iš£^%“ééà,è_ð,ý͚/x­ü½¥‰ƒÉâbñª%3”¼úŠ›ÙPÂXZ3ŒËPgbåB‰ó˜ÿyÃÔ̔Œ f6ŒÄËg²%qf2±'¦–d
+®¸Ä%Š²¨j@ã†q«K«qÕh5.ì̛™7€ˆ:²*¸ÀÌ°Ã|½‹6únO=Çòþh¿?~ç;ßïýÞ½ßýÞûî½÷«™rš¦ ÜPXYËêoÖjXI»£-Ô³ÒâÜÓQBsaûÿûòøóϛ±fM^SÛ>E£9½¹¬ñi¥¾èø¢Ñh
+ÖiµEEÆ¢
+öH³woSý £¶tØMU5÷OR’…Q¹’œxBB<%9D9–}†’ļî`Á€êYÍБ͂ˆ³·Ö¤ì8pv@Öf€Â­X¯cëZŽ—ví2(ç[`ÚX‰ºH,Ô¶8¹ }>`Z‚Y>ü)À:ü7•ìD{ëQ÷5êö8V²°g2Ψ™Q8 †P¬›·¤ü >Rv Ïã*ÎÒ÷ècÐEÜP͜¨.ƒñ´WåÄàõ³ ñtLó,˜fîϨóDž?XþˆQ ¹°ß~b@Z¾••8«Y‹’”ÌE˜†mÀ<ìB~££kR±º+ÐŒ~fÅHaŠ‹Å¼‡ºµx@Û.¡û1àXÒf.( DÝÔà§2³\46;’¾?{?…á: ÀãCªpC­“Ûux2Á€p @<–!ß­ÐD#mǍpTúŒ|Kᡖsr/• gï­ú÷‰Ú[1ÜMíîô^_?¥ì7}}œeÃ?ôTÈ?vwtôrWÊ
+•¹Œ{¿¿Üݯ_OÅX•ë…J5œSª¼8µ§gï£têö‰¯›ƒ½·B6ÈÆËÉqäpw…Ã(™‹ýg™ÒÏÉÑÑ{ÔN
+՘wœÜTΜƒRåÁpW+GË<ÕÊ·û©U.½{óP èáç.Ö[å&SôäÎð:áïî¼^øÁ!U/dÚ' ‚Îå˜ ðãv:~v´AÇG… Z~çb½–?¹TÇó ‹t¼öÊ|¯»2UËëRǧòzÞó‚V/øýM+ããt‚~æ2½ øÞ?NÐkû
+zþGßl=ŸáŸÂ7à‹¯‚zqÏëçÖh…%›y­aùr^gˆ wv«yA8©Ð Â¥1)‚>K~ÜQ5è4Á¥[õ<¿n«NÃï‹ÓòÚCÑð®Ãsy^89àüXØÕ5Å5À;žÕ :¯ýzAç¿V´óC z~õlØ՞iðBþ£ÿßøW=Á¿ª>jÉÖT± tr{†Æˆ"þ¢rÌX7Âmßfÿ¬‡4PÛµf n=¦-VÒ7QW„’*,\K¾‚?¿9 "lÕânòð¦ÉÇúù €‹ƒ\ Ê-Ì#…h…Ç(Ôâ^SQ—ŽOóæý™÷Š*^@ Æ O«
+N¦-­¦ð>sý.Ãgë^@t,¾H·b)ÉL-AäO·Ì®qyA°•—âÊzJ2=bžeÑai%ˆV %©k&ˆæzJûèµ­˜©`Z͔ÄÒB1vܨ ‚š~Ž nFRo›œA9“Ä×_îþe$RV>ÿ‘ .GSÿëâëA²®œ]!šrŠ rB);¾Ô—fP‹¯ .v#fˆSçü)+óÎDâJJ¢úI|=`Xî!%êœq¨AZûCèK°sÆ7ÔÐIãßdÎkŸJkÿY3$áXN&¨Î¶\r1AÖDC)õ¶B*Yˆ0[ŒÁo/l¥LäÉS ÒRBIŒ&âU¿æ†QéæO§ "'œ²3žLƒ~âë%ÇqâvˆÌÉØ‚H$ó³ßUñõ@‡®g&¥C¸B)ͳÏìîLì%¥¶g Z´õIwÆ°áŒZg}FUZ]c$ôÀ†»A]TÓH^•uÑ@´\ICÂRžxOl¡ê+H+âi#;j/ËrþQ„(’h ØÝ͔P
+PLܲâc1÷Ò"(+±T®ÉÜJI–jÄ×£fuçŽӕDm>e'ã)A˜‰rgèÐ#ÉBØ‡SIùÅrË ¢ü6%É$
+UùškñÁ[~r
+€õ[ü1Ó¹#R9aÇÉfÔìsў
+‚òÔ±Dº 1ZqQ(ѯ囆(óûʒf³¼¤×
+–2ûJèÆR̋,Q$ìÄL|î9–/›0ˆÄ!Fjd×hZ;¶"
+CA_l€>/à†ðÙþø\“º©ó¢ÁÎYKf’˜ÉÇñË©3F›±ìëøDÁ¢W3~ùš!œ6€c34ï+ ç„Iõz>QH–R>~{ h´N˜T»qºŠDꏨ–÷#
+È À䛔æzñX “jò©:Þó"ûQÜÂQà{ÇrÿñƒÈUb”‡ÝJ
+ˆ¢=Er{Œ‡*s,·+ øùxˆW€î^Ç' nIðÔ¯Ûá!&AÈ' ~(pv’ðˆ îíœN€„TóqLÏþFxDˆ™æâ+XéÜ!%‰JEËÓ|Æv*z(íUt06OOÅR¸ >PõF+їS±îÒ Ç§§Ù=ˇ-”ÂE€èe`RI©QMÅR¸³Õû½j¶š–tÓs¿{Ü¡VäßVæ6W´Rí©pžT2R vB)lPš{¦˜P
+WÀêZؽz-#ÍPP
+0hÖ'Šþ÷µÕëÐ/SnÀ¼<ÆLJtÈ_©Ç‘ ï#F+¯"
+eægI:f²Ð^’A`³=§ˆ% ýÜĚ4ºñ&¢HÇLþϱüý)/’¸ÄHŽ•H:5æ' m†2í%‡†AòѧLT{ŽØ.¨yˆyÉÇÓ¢ù,«Ñ±<'e á“|é¶ÅÆgœé¢…_ä‡;/™o|Fšîíw¸Ä!!%\üÒPq>6庒>iÂ%CBª¸ø¥;矻LþËý¸Ä!%Kw#ªð$D¡9Œý[ˆQ¨·Û ºæl†GᆷÞûÄ(ɛo»"uæ%
+ڌ£ˆ‚nÉv,ßàF.!:šóQ´`~қ…>ÍNPó¼üt)'þ#nšr‘í
+Øo:gݒ<áÕ ™7àc3
+D¡Ú…ùùS¢È[öÌV°ºKø+ÿ?lEKm¡òöÌËV,[Þڋ™,Oq,Zð3‚vN&”­7‰dy"!néæP‘ +3‰Î½Ì#N(Ðí¹Yä6š?€jd/‡H8€†‘1"g99#øl—P>ÙÄYrÀÃ<"‘.(P1©ÓøWV( "1ÖK\†¹O#}7¢èÕc~ÚºEW›í¼Þ«Ý(×EæLÆaÖKºu˜vUzQò.OÛ~ŧ¬™Ö!r–JÎßîx±S‡”
+œ–š8K/@†pˆ„ 4—ÆænÒ¹á‰„h9x¥gÂMÜםf¡|hƒë#‘’¸ä¤êÖ Æ>Mé¡´'²SZ#9ðm
+[š'»LjôiŒte°ùì$ÝŸ0’¯ÏLN=þßä¤'ù­lªÒ ¨¢¥Œ{”ψ6›‘–TF:’Á.Ro6€¦
+ÒF ,¬HHeUЋÕA«Ô’ ýÀR_o
+äß ØÚÜ
+ zdðÚ[`7÷|‡À¾ù;|å#™kdÁ#HåO<3ý2&_7q[,9 q`£ë#qç“ß5o{h©YXM.¹>N(à£2q‘–:¤iV”:qHHé/êÿ±HiââZ-Ò]¾®ÄÄå *y5¢Ð©±ËjAúL›iÂH|õifñÖ÷¬ÖÔ<ļäciÑӜ…d—œ”1dF0bôa"¢(؋ùY‡5Cªl¦§‰ŒÒÿu¯mfñŽWk-kîb^Bï#Š¤(ÌdUªcyð‚Áäv9bTڊ(ÚQà(ÅÚ$Ã#›é9?“\³>ÑâÿҀ|˝­‰Õ(7
+ÖªÅØ}tڐp@Z"³L¢mj´Ñ'] CDµ¼Q@nÅϕ˜Ø\¯1k­T_\2³ñ~˜ÙwˆâŽß;–ûÄaN’&k¿_~ff]¶®¿+G5Y&¶WàÔ ®ÆÃõI°ã­«™mÌópq0<P ŒDYÍl`Ö8åÊP*|=\_=|!ÑjfSÑ®éXaD%÷ªo¨7Êڌ)*׍ZK+`V Ê.Sõ¦í
+^U#õ¶ÿˆçá;×±Ÿ®ê#O‹Ø®¦t7 ï¡
+_mcuv=Ÿhó´¶H¸/•ÖwÑS ÕÆ S—ÙXôƒn.éS£+kŠ—a xmOúÊÙ/}$›å»'âð/'/ŒôšHNÈ7¼NÏZùü¾‚ ÏAî8ï>Ö¿x›—ÿÁÐ!’Q~¡þä¢æôÛÃÖû鬯ÚCfxÇðrûý·g®¾íí=ïÈ\ooïYëvþŸõrŠªŠãøA|mÉB‹0.éRa
+:¯…ÈC7c”ˆ×.¢‚ »KÆ#£‡(Ì̈ H¦A38"¨Ãd]öÜ]‰•åµî~§šuÚ|LçÏÜ{~¿ïùýι÷þιJ…O o®ðßÅÝׅk¬jo-D§þI㑟!BzYèe/„",´¤aòi©öá‹ÕÑþüêý­ÐŠî¯e¾œ]¤;rªeBIA-rˆÍÛëË:֘·O(]’áá$ñ䉲"øŸT×».å6íóæ­<§ –çV
+ùñ1§ÔÑUuè9:y7υèÿhN_-x¼3Ïä¼Ü`ò`f?€¥åS'¸Œ÷o½o\¦»À34Š¹Ï¢¤-ÈdÆU¼œ±\,¬ºÎ.'wv¾,ŠEæÆd?u.òl"ôg(ZámãXšïDÕ
+
+\ñcKŠ~±CA_õ,³ó*Í`ûºoSø ´E¾seœí.7ô®&™‡"å¡«]7ɽ‘0ã[/{7¡9ö[ç ì
+cìY(Ür–¾i‰\¸È&¶KU7ît›F5i¨4v“;J£rZ¥ŸVúõ:I£~Š à;“Dq|{™aˆŒ ÌézeD«'ôd²‡ôкÓ3C4º»Z×ÌcgÿÈðÔàèmÕ­‘–›„™ß´ãÊÍcCº¾¾‰ArcÂâû†Ö¯ÝtbèiHC+jßMã2Ð>máÖØ=f \„ˆvè<ßU-¢®TM°OarÜhO½Kîk†ÉI1|OçÁyêÒ½±™ŽÌфwÂàUPÅKtdæÓ|ÃÄdË%ð™V?\:¸6 _M;Üé)Í» °‰ÖàÝGéS:ø‘_”©€[rÀH`|+ýlè.ˆ–ø°«€-tiw}ȗêÃ*ê3ùu ÿEçGgœNu{~dÖäÊçߣ µ0±Šê<é°ž&ÓF½ÏŽUNSïÀëô(¬Ž
+† ijŒ¯¤0_K„¾®Äk«ÄÍ`œIJH²r‡3{¬>³$­;Uw$v‚& Báä6ÀÇ Ãûk1f
+‹Á»8Pž
+’’4E‚õ'Q$&o&öX¶•C”Ì:²Ãe…ZŒ¿û¢«k$`hM‚¾öwì€Äz¢hbþ`I.§‰
+25 0 obj<</Subtype/Image/Length 19578/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+t7Рq<ctb$'FQžQ—€²ÙD1T֖~¯ºäͽµ;‡ú7<ëÇ×õ¾[_Ýûî«®[2‘;K"±·²$–öĒØÚ‰¥5' !Nv"q¶%ÄÂÅ(à­ì-@ãLq°ptÞÁž {kbag)µ%±¶ÊÖÕö vtÄ a8æÐ?!Îeó
+Ìåõ†ÏӍT¯H8i¤|v¼ýˆ4‚PÐâÝ%ÿÙ Ý¿ œ}®¸ ¸)¨ÚЀ½Æõ4¸[zü› ;'`õi€¨/HrW”ÍЂƒžU<t¥mw…y@:Í^€C;²æT#´Ï2
+Bß¼zè]Xq`×q€ßœþà<ÂOJj— ¿ù‚Ð;u3Xw@•
+p8 o ºöÓ"0ÚgÙ ÃÍX–de ÃPĒtö0 ?®bIÂ.2 —,IÐU–e¡W;Ët£™a0ÜbIŠ)ÃÐQ̒¤¶2 ­e,I5+°–Z–䚎e‘ÎyÀ2‰Ó2 /×Ôë¬t
+•m CÇ–亞%¹ÎàK¢²«7iËY^j´ Ã_™qƒóåóIK´â†¡:’%Y\Ä0Tø3x/â²vpSÎR–—ç† 1,ÉŸ烧98Þc‰Di$ä¥úf²ÿ¢´½$à¥ú|_ò&èï`SùRˆšÂ,ƒb´Î¹ã ³Ü‰ÒBíX¦jÖÚèdn¶Ì*ÀØÒ $“ÌÁMí̕q›UÔu¿±$åüà|Õ5O S´ä$ÃP)eI|
+YÌœ/!#HðবE,/kÏ2 9Ìò4—qx\ìî"ò
+ ڜŽ×“ xªŽ~µqõkqÊ@˜½{!ÖÆ•¬F]Ô€ð6BîJ”Àë,
+»
+â7Ó ›š\4Ï #
+€¾‡€µä%Y¤–‘ð»Á¥¯ŸôfåKs\âäëªå¢±Êó”4áî„æÃÓÿ Àúä,UËHðviUëÓ!CôP5¡Aê'YðU¾ä›G­øWɄu ˜†Ãj [œ]—0†–³¢@Fcæ(£ÀÂ#„Å8 dÌ6À½üm¨RýpÊôÉžË8Š’à¢ðîõCI8<ÚOé÷61£À6Æø0ä'·ï”3•61Z˜´¤LQ¨vh&›ˆx‹j­Jš‹7ܬ(–˜|¥Þ< Ix›z.žàòžAñá²–a¬_aþKùS{Ž¹¨³e-€  w–¨¨µ"ô$°
+m¤Ivq(õoÇI«Z‡h _.¿$—±ê%C$‡{þ±ìc)^¥ŠZ«§þPb‘)Ι_ÅW;äPYçE¯ez™ZV:ŽSëT:£uŸüYRÜh´8N<ߕC '±q/!5‹°‘V5L¬&ÉEµd`¥kÛë'½Q©p%–Ãg¾’"V@?áUðO ú%´Í<*Îñhþ[iU“ùLÕ4՞@à„ËC©,†P—ÍúZRÜð¨OXÔ]på>"¯%N°þÎî8-}#.RP~Ÿo&<#ÁÄ]yO3Y†•±Ò7Hzn\ÿàæŠnNŸ2­Žc d…³öYªƒ.À&€tBåì5€F 2ËÇÊq3~+.R¿œoþÍiüF鎐⍱ýõí,ÃÜ6®ÿÔ½w—JÖ¢N–*€Í’Â&J¨%ê=!<‡œ­ €&—¯O`㔢T²Æ©F…OZ¢\³ZRØj €ƒ‹Ûx*,pçÏøúˆì}7¡TïqU*}ùä”{›EEv#qÛ¯¼'fêø:¢ÿ q•Ú¬˜Âp.'xÂÜÜ]âø&ˆÓ„í¡šÊÏsÛXÿ•¬„Àq w+ëÑã6'øõ xb÷Л§¡ç}Dž)ãË|†¾¿>:ۍ„²Bk
+P˜Õ½hq ÙÀn¿–ø3Cæ âìcAÚ»I?%$®:XK* Òç1îWøhx4T¤’VvëzhMÐûm‡$Œ„)èW²<&ÊP”“`
+تD;«‘UÕchkIÄJDšy9¼6ÈC¦Q’…³*ï&$Lêîæìøs&(ÅH[›'à—<’‰XxBr~x'qÁøs!Ddl%"EÑ
+"^Ì#ëZ½ð¤}î±8†ˆÏÅn€}¾Pý냋qá¿£v,ER·Îã$¹ÒÒýWLô˜:u’‹5—Nºa1¹`ÿפòÛh¸8·ßÿ+(ŸØœ=¤Í-Ÿ›@ĺËD|ušˆ’OA šw€ˆx41‘¤˜3“ˆ*Wr»Ú&#*Þ8Vâìm»ú"~ñwtvÔårš¶¦ QkÕ"`ZÌ42øAÔ
+ÐÒR„î9þa=Pãc„E+^ÝC,žéCÌjrЫ”‘P’On@*^š†,¼HJ£Ïó<EÎcۉ \mƚKi韂ûUBälþL+
+¬£¡ú!i5]àöÃôyÖº4Ü 'æâ=+DwY!¬
+iò‹"j
+īٌ?ô2o\æA™¸äޜ'üÍÁ‰Õ5Ú´t»jQá<¿¨î)±x›ÃB½hUð> Œ€[ æG‘ÚMefxŸ s¸24e™>E%`}«j³KTq«ul»ºRÍÞ ’W}ϓjŽkhC ¨O‚Õ plµ©>Uꨓ{†aèh@7w"Uü0Œ62ú ”¾Ç'»Ÿ\åd€mshC 'o_æˆv[Ý7•ÍÄ1|ÐhªOã,ß2 rܐIT=œ6ÒP¢0Pî©S0rm¼
+éç9ÌH.`ó=1L¥Q„:e=áîÎ×yE;ø\@ Pމ; ‰Ü>#6Ä3,r#eÁøî}G³Âà¼ÿ+ 䒡iðŸ¤þVP×ôÀ[¡õ€a‰âЬÍB8Zÿf‰qÎa>#à"}ù¶y2Ü0
+.5ÉwZ<ˆ<cOûº%"'x'F¨;pë<ü/0$PöÚÕÒ)÷(¾¾fNåf-û_`ö;2çêTñîVd’ï4õÂ$÷gî8í×XE[ï.ê\wCéû俬WwXUGA@"q-Ⱥ®ŸÏØx "Š"Ql ¸v,k,(泡芒U,ñ‹ÝèbTEÚªXKÅ"E» ± Ei"<˜=gæ6|ÜÝðÂüqΙ3gîùÍÌ)@Üø3Y4RúÞdÀåO…þ €®±@~éø¾YÖMÉÙ•¡üw*ïŸéêª:`Ñó°Ó¡_Üò‘ ™;©x¬ÀŸ±Kn˜UÏOܸ¿]!g’¢*0HÑ ÍèØ{ñuÝET¨æ#•ûRpϦ»ó4•I3« Üþ[#ÿ¶Ä[<Ë8Bè‰OkÛç8œڞmÇ.c ¸åæÜo¼h^í®+}o±ó¼¤0S¨l
+c«h³´µÃ›§
+5a'>ÊAèËDr§H¶« ³åDãCûW6  ’±«D̄~ä¶ËäÌèwµ5|ñÿ~C[ËS tózÞ× r‚dûÊ°ÙMW¤ëñݞæ¸éßZè׸ˆùZ8¯“–mn–uSRÐ,ßÙâÇX–X¤”
+O#rƎCº}ÝI{6à/09ž±Þ£DÅr±Ò.Ù»fY7Õ_S+_V© TéêXÔ+ºfÄë:º«S‰0ÙÈûâC:Ø@²_õ|iÊ+ ß’Û¦j|'6’#^"‚Óvnæ@w†êÆÁjÕÊVm/¯žÙwòVs—Tn×Õiæ°)H,ïOôS×HÈ\齯£t轚һ œ&nxï°Z²ñ™ŸŽ[±‚’¨osaFÀ•:‹Hý‡ÊŠ©_zãúÀÙ¶ãUÆhæs•wwtTÕîyÈÒ.’h®³L:dUPyšîp„¬±,å§3Ù"/‰œy¤Í|…벍‹&
+Hù€E»Q݁~{/fӇñÞ]À½Ü>˜´yË #1Q_EY,ž6ºÄ£PO?’’…¾$?H1†Æ"ü™vqÇlú6Ñ?VK‡mHD_¾ÐN›ôn„É]èf¡aQO8ÜÄ ´2О¨¢þ^7Êi‰fKÅ©è¸Ð˜˜èGրé•X“Bz}öEznúÓÓ@—DèVÆ|@p%§Ÿh¦Ñóøj³w„dà6Hw3ie?¬P_òü ÜPe,Ì«‹+Ņa¾yQ¸–
+$÷òôÂ㨘8?Gµ¢·ÑV/I%CFËz[A8ؓÝÐÌÖòX_öú½“d?@BOÙ°ø³‡F½Ãl òȰƒˆÖH
+¢Úè4”Í`<þÙ:ö
+ÊÆO3‹ŽñÈVq(f‡P—,Iü>U3m¹ŒºÂæ!²®¡ãP'gqT§#ô¦GèªþÕwY5ž.u¬
+ÑÜ¢Æü䋚.äi+OÒÃf·/bhù¨Jús¸7¥ºí£Èïç¡õ OÒ5ƒ»ùDrS¶˜õ×=T7‚zMé™F¯`tV¥BdŒ&ÝBv]ÇùÆÕ¼“v9d .‡9(ƒF¹Ì…Zêa¯=We<G³VàpwÍ à¥•²;‰”ÏŒ GƒÖ]ÓþW"›úzdTÞIoŸ«mÕ|„‡°Ñ{οٳ!r+ÃÿuWŽå–ÕEÚ Íè³»á}¥vS÷¡œúaƒjüw­§VM{Í\¡Ùáž@/?Ù§ ÔξÓæ€çè0qÅrÈü
+£5¬xډÐ0öA¥#]“Þ5.£²1ç‘Å+íì”.Z¶¡ l–z”ÀºH°»;o‡Ð f¿kLxWH—]vÐênÆCf[FZZbðՀìÕÎ}¿Õ™x~w½e†f2Þ„Êp“* Ùãs»³gPŒæÛX´þümÍ, -Ós€#Ò»6d_T
+Òîsš­±üÑÒV=„^ÈF4ióåg;AWdzS>7ù;ð½ùNÓó¬êz÷^Î0è9qt´dCV÷…¬ÌàO G¶cVmö·ºÀ bä¼~ƒxÒÞÆ"3¾Q€Ëó¾(íæeª-ŒKÙ@V¼PÌä8K÷ŸÕÔ¿P(U‰¬wTe6~pµ²’ª<“AnÖ|°¯.F4>ÑÃ<Ö>o/=§k^ZôJuK9­?µÕ¦ª©Qw»–Ao~A?WײDeÏfïJ[Ÿ]ýêvܲ“‹®Gù&¦î
+P)ßÞÄ'óá&$¹$X‘žrÐû)ðÔ©À‘“>~*êFØ¿8w¶p‰,QrÊq•Á½\ûç,çÚ%ú
+ziÇó]lÆBëT
+ÔÀtÔC»Õ¶rµ’J½«4Þ^ퟓk²Wcmé/Ø)°@©…Š×°³…¾¥®j²Y:£•íƒô„‹‰ÒªA"³Æ­²}5w»ÆÚlå’ì͐–P®É9‰¬»§±ôÉæЃ—ÀDk ¤ç×WÀ„TÝ%…06tԕüÈüP´P³‰Ëe“
+ÔÔ!OÍKh¶còÝY4M¬8… ;z§ÇÜ :ý:äæ® ¡1Gœ|ug‘ƒaíï/ê=ò5FÌ)x2 匢»Ž¬ay.`Üû4Ý)æ`ê_÷‰ª³Ðn¡(ôLŸ}õPì.
+úÄÔïV;¼‚„„ )'Ñ ˜ï;ºU¥pÌ` Ã×û´Âè¹Îtašq ÅMÁõèù„
+9ö!úš
+>þ+ŽSÈá©é®òšÒúû‹xê,ë&Ôü,›%Gh÷?($Ø;@wW lÁ²ùs2Jýñð¥n™ä®¤ÐöÉÃlef±G1K؍ÙõH̊HÑV…ÙãÌ*Â0k\‚¿A.ªÂà»D.³­ä›ŽnÂìj0‘óÇ®kýi:RxÍÃïëÉêˆòýí.w_ähK²T4‘ÛsÈtJb–ªä
+ž„Þxœp³µç1û2³o·`–‘>g¾GȘJ©DэW¢îVò%¤*“ta&}ƒ™Œ°¶NÌäø3ÑkÒï*¤d5AìñaE¤D¤í5aêÕr҄v´©åºÚöÛâüîÏÉuËLŠ¨µmÙK´tÕ¯eÆG‘"Ô[NtU
+I7g]·¦>bX'QõFÆ.ä c™”ûö3dœuí„uÈ»%R™^Åÿq^zJë?Àð½ ȶßY†PÔ!jqB§ltf’ƒN{ð±ø§ÚP!/Ûîs\nEÑ1ÀÀx[™ä`oBÐZrÿƒOð@¶õ\‡DæÅ@\םÍíԙ.$ï•'y Ûê&¾Ž›7óÈcìŽÛé̤-.óB€©IÀ›
+´’ÿ]HėM ]ÇLD9 ÇÐ}δΙG֋0;1N†Ò?†´¬K&Ò·C"~@—2ËÃ,úœè,`¢l¤'ÊߥÙǒÿqÀЩ~;ÐgÓydã"ÌÎ>Dٛ@;&r@"ë€Ò2:Ē©ƒ„zƒbd¯«¯a&Jàvq/ñùñÖFoÌÎ0×4庳ÐQÐfH>v"ýª˜‰ùBê?…úÆá,tϛGX´˜_¦å™Å=,Aašá$ä HaônR¯2Rí¡º¡q—p/rÿm ËK”X>c-ØøĵY¨­1¥2ÌÔkÛ@â€Û¦
+4ôc‹‹yÔ6Kù—ô èUrvjjk„v0ORûWñïn¤sÍï‡C¬ÎŸÅ'àÕ0î„֐’ÇY{jÐBÙ¸Ò½Aюíò¡Ô xä† Ô9í3±:G²òänuýöJfQݐ|Z4
+ß%”Qã2 òµª¤`°ÍÓÌ‘®¨Ùˆ­[¥lHß ìqmàVLÜ¿#¹!®êV9 Ó5¨ízÈìAÿÔ£¶-©Ô7”†¿Yœí1l’ x ˜(‡ôxÞÑxÝ6µ±‹óÝ ß¬t€7çÉøÙìCh4pHöQA÷õ3PÊjÛ°d@}Z$d˜Û-í¸ßó~©PV/….G[¤çQ+ýÖnï$C’¡¬„ðeUÄ;à¬AÞ_’ÊhT½ÃþÞ[“Pó#ôËp ›PA ì­jƒ£–JÈ°b@¤Tl9J¸R¸‘‰A­|x`«²(à`‹¶U#Ú±ŒÒƒyïÿÙ¡jƒŒôš/\ í߄ŸÎ灭Ê—wÀ)KtÔx¼–/{ʺœã¤B!ô‚Ù.‘Qs…KƒEúøïîšËÚpº ?gÝV#[•Ï 3œÔÒѸ¼M #ÃG· ´3B«ì€Ï§¶s€Ê^Qj Á$Åá¼³jd‰*À.æK¿'É;ßzH~ïØAY  §Y`©ã˜<³Y F造÷Õ!颁‡¹MBIÖjÎ?^© Wâ 倰T@}:œnjÇýì†'BEPté6_#Ø. Ä÷¹Ù˜”¹R6©¯Ž`ñ8¦Vµâœ¹8ì
+ƒã23:1’I"‘[=)!
+⦠F5B®¹4ŒÃqÈ0ã6ȝfãaž¦IÎ1º¢ûEéªÈ)M_7©¾}öڗ÷ûß÷þ¡yÛìµöZ{ïwíß»÷ºÃ*߉òÁ0š
+ZÍCÚ(µ&¹|út¸p͚éŒfý0uŒ7Ö@äò›Œã̐6öû•Å%,c1ž~[¿Üs”õ„¨2‹R+dª\ýòÃÐh­¡÷fF­ÂIþquæV®œCÑ ÿŽLÃáč*åvqüfJgUTYHå£v{úHÆbœ$“î=ˆóq’©“ÚÑJ©5üü8£Ãù`¦¸9€o¬q8}h€Tk@µ¨?`ËÄFÍÖa蝣mʽ±¹2‘‚>6ŠÖ cT€-ä]o£ïvŸ|OÉA":­bØ4$k¶ö@¨ŸBùË4T¤ÌF¤ÍóŒF?i†€W¹Àíu¶gèO}Ý& ãSš]K8c’Ii[ÍS-6…,2Ú
+6Ûûg¡0i¨˟ÀˆK\2{-g$¦b¼‰Þ@G#& 9)V»ó›Y79ðV-î£c]{d)cµußùr®38FF‘¿O¯8å‰>•†mƇ3̝d…kHÑòQW­pat묊¥£çl'\DW@%Z¦‡³º°~"sRZì GéÈ^ׂ„ý2ãÀdýòà%ƒgEÊèðƒ'2ŠÚl½â|”ððboiXåÈù¤JJA¸ª´O¥[]ãŽE¥.© Ól“pNJ¡Lý$€ôÕì9öMmcu-(ϓ±'Té—'Çl°V,
+5aYÃj¥5¬³#Y±Ú3QDŽßBd,Æsãô˽œ<¬jä½a»ÒþÞ¹1S„Æ;Š’ûŒi¬5-#Q€þóD£Jª™)y¤ÐyŒ®
+D¦rn*-2öéɄÚц+vú[A_Dbyîu†ì’æž™
+ݝ_ƒsÑA8Jî=Ó\K*S®,n©»‡£Þþ)ñ9X
+Üé½b™Ÿï¢øï3«TÇ¢pø¼Ëð©k{ȁ¬„sõø'Þ‹Š–•gH\ "ë†Úeͱ˜‡WoB¤¾ 7î"“Ôœ8î[),®YJ¢Bë28v 8Я#HwîáUÑ÷Bû.›„Úï²Û4|£ {ËXm›@iˆæ6ßA$ã×i-Ԑвuå´¾Tš¡îAÓ§)Á’$šºÜÐ'‚Оv›®iVíO…"³xip¿sçFܦd£»¤k°H£ À,¯-¤‚
+ð·Ýâ†Zä°é'¨Càž˜)°*Áñ¸ymJÞ~Áô^cƒÏŸÙ<¬\¾ìðž$ÒW1`jØGU꾏 }f-B{?##yXˆJ¾ÑþEý}äåDm1Œ¤"l€º;{.1ˆ¯œÉv‹‡j‘_H¹/è³CýÛ@¦bp-b ‚–õÆÊÀ½±²˜ï˜™o»¦gßZ¤7:œgÑÒK<Œ‚­¸‹íÜX˜¤¤3éë ^R×­„•|ãàûOæ!º'Ϟy=
+éz9Ý 5¸·ÌQ‹釟õ+¦ÖŸqòÞÛY?IÔ²¬c`¹ 9KÚ܌®éáLáJ Ï¢çïxM$©ï†©(”n-w‰c–`“‡’Q%{šG4>Cöw©-Žl¹1 ÕË_b’GûBŒó*D¹j‘Sº¸–ß2T½ŽPMó‰s*ccà‘P ?Bò‡ÂÒ¦<£§<Ϥ’ÂAz¼‹>Þ~¬ß$Sö‰Úàߢdœ³#U©]¥í˜<÷שÕñ›Iu$y/’Mžëâ¼”Ÿƒdl#5¡‰‰›ËùJB©€­}4
+Ùˆ}ä‹ëÔòö#û’Ñ1va´cZ=‰A1ºK{À*b€«uՊèÏX¯ÉUHМæõâ ËÄÎ!<¬gy0^[ idx
+±š•7©-^º¶ ô1¸Ôzu
+c(Q¦5hC%’®‰=Éi
+­+IòûÍ«—)ëÉJC&~OkÍ!ùp×]|Ç­kzÈ6©…]óP!_p4<Gyâo™›+…e éÜ
+ÚpYÿŽ’NÞAIG+umCKýÈh ›+äî¯Þr}ø´ª0M¢ûpÙ裓ˆPlSl1½ï§&À½W)T\MëTÅÓÄ9VÍËÓï@2-Ú5&èôTzýß.räIF?³ÿoq{]­Á2Y¦è¶í§µ*ñ»b¦šÐ¦E
+£|˜Ub¾ò?ù$‹}{Sß¹˜²#)Ì%¿+jf–Þ+ôöÐòâ“hùXšPe‡Ü™5Gß((ÆWj59ŽzS„®í5f8Œ¢<@nr÷×à;?²O>J”]C÷B´4XÒ¡Õi†ÉºnHÁ¼lœsô9o3k4}Mhý~ã;û”M7å½æ+Z&WTÁ¾ÒJ£¨HLç‰8RHþ2P‚°»ša*֋Ҟ%DǑ¯
+ƌZFšÍW¼Ž4R_uë |GÕièx¬¬ô;0u×¢$ò²u?•¼ÌʏÊG¹Ò˜]¸Ž$-A¥;3dþåãëè l³
+¾òð
+Аõ AJïY„ǹ¿ñ†NöÆ™² ¢;ú‚M\™À­%葑†€—Ͷ°À؂
+œ0Üy$¬²ZV~•Ùùþ>™]ŒÞ4dK±æÕ>¾åu»\䵘€:´xÀp‘ÕÚ힓 &gŽ–8ÙÄ>þïÄÍRé-ɂ— âP/¿_è
+¥Äy<ïW¦3PµG‚m÷,ᰝKÀ¯)ÕPµŒp`@õ“:kcnÜ É ë¢L-We°V5«-‘™(t¸\Uü™Ṕtf_ŠÈGHLC‡#E¬=i¶‹|HTË&k’Y4­Tm@;fªŽk«cŽût~'ª–£©Cýx€#2…ûvZt|qÍYò»ŠP¬šU³‹Ð?Œˆ‚«e®>˜(ìödV¶†
+£™»ãNÜ×Î ´í#¦h`8–sT86ÕC"ñ*ãª/©è¤hã;ÔÓv¬‰ŸWZ܉ðVډÐê/Úā\¨jÄ©f³ÁÊG°›Û8C_âëÃÁš9®öìî6³Å¡Ã‡ÄGߝa v;BÍ7ƒßA0…ߎ‚Cد#±1ö¸ºå¨¬,ϔJ³;—zi êuKê¹­ºjQѕ(qԓ¼xÊ ÔÓ5ü߇`—'Ä÷|ãû_îÈò‰õp÷֑õçdò}û1ŒoCÍÿ!uéìñ!ö“ ºkÝrøƒŸ>OàS'â1C¶¢ƒ‡“È÷K_Ç÷—]7ø–$~@Ê?Ž*ÒÏ/)F¥§ñJïLëhþEq…?„'ÿ±\·Únc8Ô^H”Ì&œ{“ÖÏ"¡VRƒ»r‚.ޒr[O²RQ­‘Œš
+ÿÏqمTDq|³üDézgæîÞ]w÷^±’Š> ¤ ‰²²¢ (‘Ê‚>(ÈÊŠ2é¡*± "©|H,²¢(*¨^LÍLÔʔ
+Í;sf×
+/ÀÏw÷öf‹qëpÍz†ã¿&°ÀZ wBÄãK0Ý÷ù
+26 0 obj<</Subtype/Image/Length 7536/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰ìW P•×¾VnjÐÑvÚÆN'#A[Q4øGHÀ`TԑԚ F$ÚÄh$Œf”¨ë#µc±•ÁÁDF%ˆDÈèÏCÞåý” îå* oOw~Ô{ïY§q4'úwgøî9gÿ³gÿý—ýήa ó¿Xõ/€/>ˆY`̨vïd¬ãO50ô¹
+°" ´
+ŒÝ›QsÿD€u_±q:—ÙÙE0Í{Àànf¬ïæ6¼ ò€o–dÎèNë˜^Cï€àDlhÊHP5µƒ±»nè©W*@>¼BÿÒc0
+‹X³÷íÇwGÙôd€Àƒ›7ñ×û-@…Ã]ðÞ í¸_x ý 8p~:@É$Àm‡zê’æá «Ãþ¶ àÌ Y×!}µà’ó7Oc4w±¤Q€Ó,n.L³^ÇW˜`‚8c^ŠXòw€mèd4ûÚðÀ_‚Sݎ$÷ï~ð×P€=èÙE4VöGørmn·`èW‘º°öÀvÜòÅv>À4 ¤?fÀG[½‹_îwø±'uƒ‰µ0tà ðÃ.ď¿ÏJė+vr{"ž5
+Ð< h>šg±3®ð%Ô–Ý”f&Å“ú Í®PÊØB¢p³Ê¥=„&æe,¬„¿žâ7Ôþ_•6™4Fú<ñ2¡ÈG`selêEBQîÒAhSƼøëç'¬fAQëÒüp¡ó¡®Œu“*gzÙÚîÀó%šgÍ L´¢eìxɹß nÐa€Íyà¢;@Ù«]ŒµM¨†¡+Ò¥OS›¡½È’ øL‘\ÍÍöõLm†¼b‚Ã"Ä{0µ2Jz:exÆ,ßÁÔf(Î Û À ¡Ê9æ3µZ ¾
+ v@†+@ó¨j.¥0œy ?
+’.{P[ž $ÿrçotƒòží’jÜNcÑ[(ÏÖµ6՞f2?Ÿ ×ʺàèP“Íš®’,@úœSÍ_Èûìš”ŒÞ,Êa,0üC“vpQ~ À •d~¸ 7ØzQÌ~x6+T”ÓNÖò†jKÁŒn Í'lŠàHYù‘S”ÿ0›=§ c¦ã=„&#‰òìx9½òØPû |UÚdÊXùµ&^&Ùãú­—ÔlR~>ÿØfÏԋ„±rŠSžy'ð×ÏOx§°•¯ê+¥Œ5”tOÒ`†õJ͐ÔT*?Q¶w‹›]„±ŽêüÆvJSG¬·–‰¢ÁèŸ=<Ý*Èa,°Ýßb-ìJ.*»|-¦ç=»9"*ò;XLõº[‚±“$çþiXp}„n8€é™ìPú
+€Æ€;øL—Ü{ÿ™€btªÒ£÷&<º£)D¦Ü*°ªÅ÷Ðã¾f|asS3¼¼¨ÐÙӆ!Ôêi‹¨"¸a–ÅT¯Ó rDX¼-¦†¢2@Ô¿ÀÖ3ÓÆa¢2 @&®¯JäŠR¹’A^…Ó¬›¡ÏÎü*Eð3›(E'JäŠ>—ò즉¿n–í$¢·Sh+«mïíª(4È…-dˉ_…¹5@¡Až(4ȕè9”g«.ñ×S%aÿ',¦Í/¶ŠñCTìû Ñbn¶[/ÆQè˜|Åb~÷÷dö>eY'æئa– ¾>bÅz]ÑÀ@e¶z®õžÇarʳ
+„¢ù„ Ü­Öx9eà×6§ c¦ãT2’(ώ7„Êcë©-OW~:ÿkÅ«fõ}µFƒ†1-– ¡k†¾c²\ˆU$Æú*Lá'r­>:xÞ¯K·ÚC_…¯’WaÒçœjþú#š¡‹î”±'Ñ Í©}`0Ø ´ Ù Õ9ß!4Ñ+(ϖ%ò×Ñ ™s(cO"|]Ո f@Âÿž¹ý„FßD(‘¬UT3´`ŠUDZ†Éb<ÄóVZ-Ü©­Ì³^A͐O¨õʲ‚?]±“$ç¾)—`´à0@è&€þÉn¥¯t1Ö6¾†®Ø4ùD1•öb¯”€LQä¬d¶¯g* xŇD.ˆ÷`* %ýÙ¯öਪ3~+­…(‘jÛ?´µÃ.á±¢Q4–G 8Š5’ËC™Ò،±‘‡SƒQƖqèc´­ýSvÀ M m#j$eî&'ÙÝìnÈk³ìfCÞÉnÞ!¯ÓïÜì#›½_&Jؓqùfö—s¿ïžs¿û˹ßï|0\jØ4ç¥ÛS¯
+ä%@Wö'5ŒZí”/6S¯
+l9pp'@îZ€âX€z%ÔÚ¡vnˆÏH9
+• c§©K,qÇAeúT¬ö=exþ€ôd3=8ÀÞ#ëÃ3
+¨€X4ZÂN%æk5¬ip±)í%}z(¸Ãb?õVø2v‚—T Î
+ÐVJ½~HðÝcd‡Ü
+;€“åØê¿gP¼ânö¬¸½”^aéI*ФÜyžmAQ=ÓHIÊ÷ö
+€&#@“ŠqÈ;OZY;W[ Ðhp3è/a‰[؁¡‚=µš=µ–A ¡Y‚VQ#þàU_™è‰4˜1púfx3T‚M™Ž£°ŸßQ8”¼ÑfȄe&A›¤’dPÖ¦£Zç#À× …€6C’ ʚ$ƒ²&É Œ*8}BT ÊÌ#^E°.:dÍÝÄ!ʋ€RáàDWô"y€epy*~=ÑuçJ‰L¢#6eT€øw€_–.›0U~ÓilÆ2s ~7®ñØbÓ E½#¿
+¤.ž0UWlÑíÀ2ÛvVÞ_¨ÀÏèÙ|v€^°zGþðr̄9ø9à2z@s6"[À#ò©âœá‰®
+«£. õª@Ÿš˜a±Ÿz+|k÷$¨³´1ݕ*ü8à»ÇȺ¸
+«ÙÝWÛ°÷p4·Š"'˜è;ö4˜ñQYd|a°ˆ'€“
+ɸ4CQ¢œw=p(Á¦Ü¸
+Œ#  týÞ 9¸
+ˆ¨
+«@çì O<tbGU ^‰ñ¬KÄ2ۅ´i…
+¿6·»½ÎD¹æj¯¡x?é9'ɦÒ"Àôé [Úlfâ.'foÜæûBŒî
+:\F«¥[áôÛÛÑQ& µ´Ãb²Òr‡ÝM©Ý@í&Ò\CJ!T76_oÄH:ÍÄf }MÔUÙH¾«}ëÀÁâm-XVžJ•¬‰×%ïSk_U­ÑþögZõj’ºrKҋäÜO®IU_Üõâ£ÉªÄlíúVÍXûÀOÒw¿ñŽV«Ù’¹6>¹ˆ¼ýûÓ{Vj6fk4gegïßõHÑËmzÚþ”â{Šþ®UkÕªo¤ÈÐ'˜)9¤ViÔÚõ*•:µ õ¹uÚ77¨Ö½(y. à_—ȹG=UtlÍǛ!eFušüîС5:syõÖO_OLH"IÏoÏ&ÿۯߚ }5E‰ˆ)ZÍÇ{3Ž%üGT‡×iS:ÿ‡Ý~þt¦V[(øì·(Øè.ø͑|÷ÂíKÆÂs¥+0å]³WÜ¡y‚0›¹n„( …YÂJÀ¯ ߖpîØÔo
+|F¥o5E¦Î?•QàôGÏ™9W †à8E1ùÍýd'ðÐ
+´×
+­ Ǐ2"´
+_Ý%´.ÐVôÑô¥VxŸâ™°©ìm@+ÅØ;iãUF±4¹éa@C‹Ðº€ƒ’â6 ²ñ
+á7
+÷ÍøĦ`j‰î»€î û68ÝP"WFq—¨ÃTÞãÚ : IE†¤¢C2iŸ5Àh²“8g«¯Ë÷K qŠK®rUrÎÔaH*fÆ׳aH*ê0$u’ÉH×:ì=œ³f¿_ÑýÐ}Ô}tØ"è¼Ï]è"èQ|ŒÆ^Å9«³Ë÷]
+°5GçýÍ8ÝÚ×DÏJ¹_i¤çºéº^úgì´O&`þ]à‹¿íi@æWÀ·æوÙJwˆ,–SP+)ÏGë1c8ŽäÓÐΉ,É6ìPûgáDœ!tÇzØ‹À7û'pécJnE‚‡¿ËwÎI€Ýß>*揦àá©xÄ\¿m¢ŸâxÊÙb$Ò½ÎÄzŠ,NvQú2i•u‰pj2ûHsâ
+29 0 obj<</Length 1851/Filter/FlateDecode>>stream
+H‰ÌWÛr7 ý‚ý>ÊmL“àý¡‰/‰:±•Dª“Nœé¸òÚVFDzëÉçô#ú=$w¥Õʼnš±=ÍCdbI@É.Š—]É.¦…`.H‚g£ÆßÃâ¼øRH6`…â–9¯¹ƒØ
+Í=ÛvÎAx].~ÏÆiM\(f%a[ ¸)~€5ŠÖ^ôŠÉ$ëc³ ÛÒÿŠ+o ӂ)͌AOŠõFÅÎîÔ²þ” .•#I—~lÚۂ ! ¶µ½»¢uøüƒÓÆnõ>I¿¨-¤•±\Zfnãu´ÏS>ÿ±ÕŒ/†åöîåéx\Ùád<é_^oIÇ}k2*Yg¼Ýí§µk•åxëSï×Î8«pÖÛ+Z{ƒéÕðô+»Ü\²öø¦¼¸>½)ÏØþþ›wÃèÔÎå(x®áœ`ñnYGŽÏiªhrÌomK"Ë©õÇãüKWÙï!ñ…vKf~¤×Yn)¤6¥ô¼x‹8'©˜Ö# 7Ê3p„D©¹rÌZ.°æµFÜ â$+£Ó g’`AEDa<ä°Ç
+Á‚‚䎎¨ÉÈ(ÖCÆAu$¯áµJA02ژ©¨×34bB¶i3[XT&“PâÍlÏÒµ¿<ÕGºÞíÞK×ÝÝ#þ”÷2§$»cR°Cöñ“`g³Nᜍ‘„îQA„ºð3ÁpYwØ ÇƖE ö u
+6ßÓ]èI
+-Ÿœ³ƒÁÅíuÉ蜳ӫ«!ôý9,9phõoãœ'ˆ‹˜Itxp³ ɱ˜f²„’Gic°GV" ü„b¨áPǒ‡#1ț€ºŽ7‹KIiþ‘0KÑŒh1ʸÙG¶GíMp‹zIÕìr±Œ9DééAxqÞÓWðdç‘QŠ<˜Éz>ŦèGèþɟ\ýÅ8KÕ§éÎÙà¯êdU¤Ž_a  ’ 9„Ó _
+µïVøµ´9×Æ!Œî­KCLχ Û8°y
+‹°}Ýév·;ª'X¾g½{Õ~ùê;L‹yFÅÔhã²øŒzÀ¿ôŽ®;#¿ÍÌ oßÀ¸ÞŒ—Ñó›x@Ñߋð•à$ñR@¹kn¤ZN¾ŽNØøê
+30 0 obj<</Subtype/Image/Length 11681/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+«†Çc·.Åüs€b/@®î íe̲³ _Æ5ß圉È8
+ó
+ÜâG½ }@͛°—Þ±u$\ð‹8ì pÝe$ݎmð8§À#îɆÝ%K[
+͖ŽÀEFúbìߨ|  î¼•Ù5ð¸$À3 |3
+÷¸· Ñm1ƒ)Ԉ{u|Ûpî!ŠÊ¸?€:Ç É¨pÿ›¯âÛ-†½
+0†Å¸¦é¶w@?šû½¸ÆRЏ“ð嗷cTêq  ³  ôEëȚ"®A=Õ°&KòJÆÓ5FŒðà=Î
+Qó´ ²|åøv”ðõÕý¶‡±áBüJÊ4ñ\uo?è–㧋ò,rPÆðû`Þ(Jo“µ¢ïn-€®u4¼Q¼‚b‚Ã)fa)ATÿeˆ`VºPÎVd„z©‰`’¶SÎB«(ö©Ç:ᅰQ+~Ùq'I̾£#`Èý凝úº ×1„þ!eR¯¢˜*#Aô= æï§Äwò9Y7ál ÒJ0)¥LÙş7”†vÿú7K¢Ž»ØŒ¡òÆFdtl‹ gê_ fÿ_ zÆÒe3 ù6ËoÎZç&ًR¶“MñžB"Z 3†jÏ¡œ•‘ßF–– ôÃüù\·™E|›Üf™)}`k(e2âÒ¤Oy°j•Dr”²ýeǖ…bö;?€ìD1ûŽŽW!î,fßÑáÏ.ÿJâê*‘³jœ˜}GÔAö0V½Š
+Z3ál¨o eòœFî9ÁDg¼ÁDû>,À§ƒ¨+ûµ”‰ž(+!?P·ƒ¥“š÷]H]öZêÚª¥îq@ùLÌ´M¶!²@æ\ÊÙÆÏ)fVAT9ð¯Çª?ÚØ:TðmÐY ‡`â<)eÕüùüWçì¨åS²pÊÙÙTŠÙó˜ Ôaü—¦Ú±csßf?¦ÛN}4)e±øóµA¢ ±‚Ë‚ˆÎQ¢kqÑ^!X@€àýC ðÑ"N°¼"Ôf´áýە`Ší‡rñö J€ä€Œ €B¤kt‚2Ó‰õùáF€“•¸0 ÷<€ì@ëA¸û"1~Ýp/¾Ä|åÙo<|/œ)Wœ‚ŸÍGŒ‡ ùYc0Çb•òà6¶¨¬o ÍpÖSî%¼Óu¸W@™ @ÛrúnÀÂᘀnšÐº-Æ&OŠ­AÝٗ‡.8ú¬[?Šš#n|Rn`¨ØŠ¢¼a“W;<n–„áÙ£O\ü
+ ×4zAz=1H~˜lväa(â0
+‘)ü'¯_* ØFúb¦ØþÀK÷W­ Üáñ¯Œòø©ôЯ…7ì]ÁxìÈ$€øh€¼0ù&Œøz8¶eƒCÊq
+lBááxâh<áéû—QãÌý y…Ÿ¬ñRc ]
+8Qi°Ù^ÿäï`¸dF u˜ç4özÛ´Q²öÎÍgFyþ³s?6D_‚±Ñã6íx¡oˆÀµøq›î’tM€€-àã猸Sã6uj˜«ì±ž0ž­XLjŒXðöË¡„’Âcm/®éhnÐ4”#k¬ÿ[ƒßd@ÝЩèÁ5fÃ5@… ×à5¦ÒôÊ^N
+hgÔ÷Èɧ8ØδÎ˅ßn'‚°0‹Y …Y vz?,´ÇÃÎù`Ùiö4 ^> ÚüêíQÀ“,à’à³àÀj€4¬u¥Ž  Ë#7ÛçT£ùÓ&¿ä0ít¶3ü¬˜íà5X¥ìiX}`¯@¢ @éLö4 XÚ]v³ùéð{Õa€]~ñËî.Æ7õœÓ¸ ßé„ GQ5§*Îß8—tuš­è;àÈÖq›:ížãßbFÎø+Á‰ €è/ /uܦ‹È‚ì§ ÑY ìãµTNŠ™f>aj¦L4dúU¾Ø€Š˜oòùkaÓB•9Փº:{ÒðXÆÐK)Óóæz‡5ùTùm9C1~ÕQïÃïê×ÚO ü/÷UåuÅ­±5V­©mըť"È&‹Ã>Ú Q<Dñ¨=±®@T‚Öݸ7 ‘*.¸Q1n¤­¢  1.DYdvdpæ[¦ïŽ±ýƒwO›ï|uÎáýñcx¿÷»ß;ﻋš®I,BŒ5Ç[¿ç]˜Üý˜g‡õôýòXïÔ:U³3véÆ|ý!Ôi]~­×ûÛ¶lތDí@%bìå.ëE»Ù¿ S|óìb}¿a{&yK«è‚P%%B–­«ÀÁY¸›`ÙL¡J‘(Šá+9X¨R¤8¯¬¢Ïwb’#g1&¥!WГ f՘ñ‡r·µ1֔
+BÈWÑð|YÊÊÅHþòb¬e t–¼þ]˜¢T̳Lä!Ջçë8:eÒaÆðvãbËÂ#½§½–¥0鬫êÐZ›ŠÂ~]“ó¬ñ™ÓغÎʪ\1Xl]–ø UÊŁQ¬_‰‚«ÀÐs¢8°ÐBOOok­ŽüْŸÆŠ¡]‹j0¦ÃÒ?¦NÕÆbÆoŘ¹X⮊¦‡Y‰Ôá8l¨iý:”݄y¶¨Œ¾Ÿ5«ÒH§ZŸaÆ›0¦±eaúøªâìþr=«kAŒ™+±´b}ˆEŽ3–Ùº
+ª¤@ȲuH” Uv“|në,Ŋð•ºY¨R¤Tщº3˜äú÷sJºSH8°ϾZºæ,–ÑÚ3øC @U6æÙuĘ*£¿[ú½›Ék0Æ›ÆÊƘ©û5½¤ÞééMÄX}u~¤àDæٟïÒ÷ ¼>Õ ³ˆ-ví(ӈI¦§¡ùLֆPj¬C3½V 逖Ì3Ìå¶V[—Á¤¡Ê1߈â€Í«@Œ@!ï}Gl€“;
+¿ŁQ¬_„*çˆãÀoœÆw„AA å §¸áEà釤âF6.P-Â3 ,XMà«r&x<š#]øHùè 2êç¼õvĸäk*@ÒÓ G¨’㊠H ^ÅïÎwpt•|8"3WBþ-G ÉñÑÆÀèâ{‰@\õ󜑸?‘€|ɂÜXð/0À¬#ւS'æÈÿ„À³ 2–BÉ;ç€gKà©Á½ (:é9ð)ëò0‡qq¥Å,j=ù_£h$ÐsPÛc¦’ŠÍ%PwË ÷>lZgTPXõŒ¥Ö3,ùøÎTêÔÊ (aj3¯J ð%$R–R¨_€“ê¶â’8¿²‡M­ð¬v8ÕÀ S
+u®æ—%|cètð@džvÏ ø žÚ`‚gÁ Ñ Mð
+À‚·`ÁA°¨ kÁv|aV×rÿǪ¤ÿù®üVr°På¬Lþ¼eë$¸w•@¡1®{àÚqÿ—%V>Ŋðu5K P¬L½«§º{˜¤²c0[CÝ[ÃÝu_jèšûXûÊB¢¤@õó̚u)K_ØϱN]snj}†¾¶Ðaȉ> •9öéñÇ2ºÆçbLáØj¡àx<æÙòFú~¡ƒ­_”XÂî’3¶v—ä éÄ
+ÀRQ¬_9§
+@ìƒ6:ÑZŽIꐄòS+L[ÖV˜¶ÿ NZòŠÎY[aÚbK £vÎêšW›+1Ϭí2eµÝÇ«€fÌ: Q—u¢-ë0DÛ9`ôt/ZFB¸<£«É¡˜gIHé.™×L§470cÑ»q]‡­ÿ¤ß×Ö¼˜åÿ@ú€<bÌø Ui‰]™†Û˜g¥ú~ów¶Îù§
+ÓLj〭«À­lÂô±â8°D3‚×òB±÷¸NЎ_¡Æ˜j$¡[LO‘ýÊÙõˆæÙK„ઠÿÓЂtü‹Ùo¯XL§ŠfbÆ6îƘ©%QE¯ÕÁ°­§kfç!Æ´2Èh´\AÛÊT$4Œ ,%j<‡ËNJå v7t§èU@wôëÔÃÈUË®EŒµg-ôT]À<ËWÑ÷•Ç–a’·´ng Š•l]v®(ì.X·P P¬$‰cFðJ(+£?EÛ'ɘd÷ŒYð!êæÑ«@ݬ÷GlÒÓ5‰Eˆ1ÍJh…iȽŠyv©e ½SèÔÓ}˜±Ë¹“ŽÍ‰š=ô* Þ¶eÃú'tÍ!dßÒ¶Óh¡ $óì[¤iز€¡ÿ6ogu´çe¿dI©¯þ]̘h+\±cŽœÅ˜ÕÕјŒ¹v!3¶é!B¼Xi"ø7J
+„Oûï3asàL S“õ ëûëšá‚êÛ´YÏ4¸×Ãü挖{s¦Î,™BÀg8­ÕNǛ3ƒ¿ysÆjç?gjÞ/¶;ŠÛ3i³0ð/ߣÄø×2¡v°ý
+sñ‘õvuõ‹î;v’ÏG<¼£ßäî'ýh—Ûd™»§Lb7Ñ+TÚk¼wpÔ¯†{Iƒ'M ‰òŽ_P”“ýä(·ž^Á~=&…}å&³?TñλaÒ¨ß÷‘IÃ{Kƒ#·K¤²É=<ÃC}zNˆõrŒ’ú÷ý]´ÌsARˆ,Сw¤Tâd"ówíé.ñ´s˜â²mZ¨¿÷ÀÁс#D…LÕ'2ÀÝÕ^ê?!rsh ›«ÌÓ»ŸS„›÷°Á^N¢<œ“‡¸¹ùÚ{zøÛùyº†þÒeŠ{È@‰Û”­1~®.ö\|úü6`Âûþç€Þ¾.AsÕZµrÍ­f•*õb³Zu,“À•]ÍjÅ÷[5EyJ£FQŸR©U(6ÿФP¦ý½I!?rZ£T^ÚÛ¤TÜÙ¢U*Ê×*Uòú5Õ*¹rÃC•\•šG ó¼Z®ºxP#WìÒÈÿÅ}µ@S­ñ­ÖT3=¤DMw(=i*ïQ—ÔŒ©)…Ñ5·²R.)”Q*zxÄ­A·¦”Û*¤1$Ì™•WDçÈqœCy;b°ïþÆϚ£³²VßZ~çö÷ÿöþÎÏÞ¿ý}Ü<·ê*.Û£”Ë­9–íæŸ}PÍ\Œ¬æÖDs¹ü”3<.?dzºª¦Ì½ŒËãyäpy|Ÿ´*^í¹¨ê꺰Pñ§ª«k³Žpy‚bÏ
+ >ƓßÀdwižMÔùÇJ!‚l M6ÿÅQùI}?²-h“íbÓ<4GgÍÓ&¤yš~§8ºi!A'hžæNŠ£»±‡B@¥â'›Zn.÷»ˆL¤yÅíxGOùx3DŽ<£LÖ|¶B@ÎZfQ”Jã)­ö+³+gm2çÃ4V:ő¯Ì|J—¨®ÔÍeŽY“B™Œ³ZH!àêZfv˜ÇÓ´mišzÞ4Ð<µíGmk4Ù}CۜõÔõaFZh!˜vۄÔfè=™“Áðâ ŽQý=™ËúáÅ}0Ü83¼¸†€´èîîáÄ1@ŸŠê™¤Äbv$éÐBlÝhž¥âÞùŠ‹µU³˜ctc(“U)“J°‡‰€°´Ì척ÇY³¶¶2»ÚÊi“qkhžmG{ e¼h›.ŸSF»†:ؤ¨ÈEyC=õÔr§–2Þú܉òžÌe˜·ÀñÉU’I`¤5À×uxqßm’P#MÀÝkËÛe"¡$4Ïp-)bxq#`}J³ƒŸD y\@ó$¾¢8˜›¡Æ_ÎÅRs*—2™0®“B'•–ÙcŠ
+-g¾‡ O–ÒÞûܒŒñÃjÜEšÀš‡ä‚Z‘Ð@+‡v¸<Íf
+7íi™yò˜Ç3UöÓBޓ¹‰><rñ%Dª’œ¹ ÷8Ìā¨ïû
+ÝÁÁ p×8mì†
+„<”À'1L3˜¯ÑBŠJiÚ\¸å!ó-Вa¶5£ãlôÖDg‘¾Ž¢ð4”x
+yüg>£X{C2U4åÆi.
+ýȤ]î'`ÑóQ¨8¶’·+¨¿‡{»AºÙJ“áw¥ȇœEÝ`Ý/ÚbIÇؕg'£÷uƒE^¬_ZCàyeu\\2.É:Z’jð¸€õyFA探ð}y†¬‚‚‚ÂbÏJ‚v>+((~–Gi)ßÉX"Ì%h!¿$4G‘BHýêô[Ç ¶õš½ØRDÀ`{)Õ"¡Òׯ¯Š–­P#ÚHO é"µzzzð'ý©HŸ<éê]•Ðš-NT
+C%øògôEwêäGÇ;£<1ì¯÷¸v0 ª—PëîEDގˆ¼ ŸQ1¢/,":¾ÿl6®@B‹0ßCØgµð9:+3á˜Ù4yR§2Qõ‘Û®‘ïõiùºÝG³e͍†„¹¡×JÀYŒw÷ªµKhÕ?ÌÅoG-¶“ÏEk˜9ΐ홉RYjû(ø¨z̲ ‡„émd®­Å7…/Ÿ2;²¬†Ž-•mGh“™æP/6t3ÈMßüÔ6ßåZ¬¦éþy~²°\-´|ÎL¸æ=½—ûÁð,„X÷¦éb¯Ð2;Ëg²†Ú %é Ûj hëF[fi:ő¯Li†/Ÿ…P›²û¢´ .ðú–ßÑg˜ ¨RnÆz‡™¦ ÛIËÌ.›yœ5K¬RØ[ºUœ×ÿŽ¥%ä!Ô£|báé¥÷ŽùJeºYhø(œPÍõ˜Áf"€ØUF0ó>ûKX4Èçõ¿cÑmš
+ޟy«t"Tfä4×ÒÊÉb­·¢—|Âq™lC[÷ E{£ö’Áêó…I*ñš¡oQpey9›Ãfs8‡ýòÝVÏÙ¢¸&OÃÙXÇ[Á[…tåƎs‚”ìÍzÉæʸû~¯oâ¼Èoáž/׎UÛaýÖ¬l¾šônë°}b½ý?4o‡ùFk«mÖ֐Šxá6áwÍvt=búNsüçۛ³¼¤…s„k˜T?=ï¤ìŒ•h°}þNë4›F!ÅÃØo¦[J»Ž—ýlî”)VS§ÊŽGƒÄ¥–vMv0ï”ë£ ÇÎÉñØ8¿öæÉ^Òo¸ÝÐ1qžç'×-3åêõà> ¾p)äüÿ‰¯°š³-¾™ï31FÆëÞûÝáދ\#bpÃÄ0zjúä5c¼¢Qz¨”w3¸#Æã2ޅÊîDˆ*%)T¥¤÷»Îé<ê´ïڙ뜲WÙrÖ÷ùÙÿ½öZ{ýýÏzdrýáÝa²/­ÑՏ⫒ÌøûúïµJeLFårEé`[MÝè6V³:&cŒ–çºó¾@À¯>T÷//5¬
+nòUÍ1gÛ5úðòYÃ[ˆÉƒÜĽo§ÑÈ _fùûÓNk÷ûX¸ تÛÄ*c:Æó ,f›Dþ~¸á’Z¤@P¬A‚C½,kD€LX¨¤Üm/;êhÔô$‡ú¾"`†ÛÀÝCœ¿Û¡+ì°Ëo”©ã§]5±RÖbá!c5]^'ÖË6! ¢4H§ŽS`¡«WÖ}× à郏öõ»4jŠ®B¿SÄùŽÜèG.‹…Ø‚V!ÿ̧v†°è6VÑmÛ@i‡Ž9ßêüÕ¯£ŽoTç‰*}s‘ô’ö!ÄBlA´ùÐ÷cèùð·Ï¥ïõY#!Óébó˜t¬»NvÑdïò1íM΋…Ø‚,—#}e-úƒRhä &9 ­p—Yx`¥’VI¬élFÀ{ÒP²8Ì% ^Z\S‹NCXvRIºõæ«ÂÇaΖ¯U¯Ë:hŽ)ÃÛ8 õøå“A#†'ÑGªF“$ ™Mç›4 Jö3>zƒ€œaØ{ú|Å¼ò?ú“AóðUin˜³½'ÔëR’­¡YŽ5,™‹¹ßF÷³‹þþ·Êi§!t5I¬2“î'6¤£ô&ÙBG‘ƒA@@¯7(pÅÊàKXÌGKùû)¶N˜IëD®·PÀºK<uû
+zój“Bx¶LX °á ÀqVH¿aћIÆìß]Xo;ÂÔôã®f“.Ä~G7ï¥ö“˜I&ÆõZ=Q0” øŠCàtð€³
+M  ÖNˀåVÃ×ìcm¸ã íAU­‡ö£~khv³«1ºÓ®Eܺ>ÑÈ\°
+ýœŒ)uþj]š¢¤~‰´6µ€æE¹E´þ)¥Ï3ÃkY[a1¦RºÚBýŒÔêömVFÀÍöMq-‹½ ½(g•éáÅ|EA(frW³ynDÀõĤâo~q2‘…[¬¾šÇ· Éߧ5ÁX+œ‰(è½
+õ1BÔ™R¢ûZ'TñUȐ“Í ‡“ãåê‡dÄ•Þçí:+æ'Õðm–!ÎIÜѤ8QÐl9¿*^4(¿@¾àVË—Ï
+ *¢U |"’CZ!Œ€p_ÁDEÛÞ*€¨8 ڋàþ%ü³ @Tð*03±ñÐxhD€^ b’2˜“·JúxdöïB'ðmÆ£U ?Z¬uÎäïGÿÃ2®œ¯*¹ƒ9K}ªñЈÌ­ŽáôùD"‰Û¸;º€o_„8“G×"š¼»ˆ‚¦"%¥<Z‹?|ä%ÁDE8 
+¿4?ÁDE”€bS¬ùiQØïÑòÁvџ€Ü<ñšæè¡ÜÐîõ‰h+L—]R¯ÛÖ
+Âš»sÇ>ClÐVXžÂ,˜c&¬ªâE‡!úA˜zݶa(—”¥õ9N)7ø0ôi%¢ñùQP»{üý辘IkE7¬å3|±ïQB魋¢Šh¤]±¿z‹b¼àôÑE˜ÀâRøÁ¦¶YÒF»€¹³Å[x ±u°«SŸ§Ž"D€¹óÔ·ð"2?[‚hò1“ÒBͧ¸þCýüüÎ7È/~çyèøME$?ՋÅFXcŸ£D24חaåbmuua7=¤
+ÄNƜ9®Ã4c±žà±>?}è¨ÉÿBø)!ˆ³ì ØßÌgي8þ~”þ”3y|U&Ú£†¢iÏûjJÎð÷‹ŽÜýŸ ¾îקü}*9.G4éXdןð÷󎠜½#9{RËWAq1ÓrÚ&ÀÁDË—AA±×ö`”rÆ²ñ&å1@F@~ @E€,j‘*šÍ8wXñKa ë“òãÙÖÆËbë(­‹“Â2¹ •œ†)ežòtI
+_ÈH™VT˜B*K6ý-ˆp þÍÔÊcµ¥ñ‰'Þ·¹³ ÃË,X¤ÖØ­¬þÈnõÙµ à©PmÎÞݒUŠÅìOµî$À±Í!+ØËYÓØÔ49[Æþî·ö°v €½Ç‰„ɳ;ƒºÆP¯þBê_ƒª‰æ-\¶ÙêwÏ75½D}½ªÉµ¦ö5Ô©Ö¿~ÖP³Ízõ¦¶sÀªIZ@ÛUÀî m åûýk9€%%ÈÌ!+ÁLª°Vœ–bóKm)_Yâÿ²š¯+“!ÎT…ØÌ#+À"«@bVè» ]rò&ÌÙ©L³kßs<øÙ3{•»ëÊ|›- ˆ³2—Dã…Ev¹äÉÊá®é|UöNÌىs˜Æ!“¾páPà1ä³£R¾Í¶‡ˆ³"¯:DƒEæWÉßOótÄLޑ¸ýüj i2 ˬ›P‚² Ê••AÙÁ‘TEEIfH]$E‚v€ÊÊÀ”BËèÂ, /
+:-X€è. ~&X@²àüE‚ˆþò
+àX%OTl@.‰éˆYS Ý
+ùñ]è¿<X-ï³ù%f ú˜¢ÝHYÊWùõª€X=¨œ.t³“, oÑÝ
+nw;X7ÄGtLÈs]àþ"yÚÐeh48€Ëh«è.ðè¾`¢k@Ùÿ^ ³ P Î)^°ØÊÿnŸ^uA¾>!ZyŸ?é{‘²´nùõªÿ• ¿z
+31 0 obj<</Subtype/Image/Length 9297/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰äW{TUe?Ë53.ÇRWkM³W5×QÂç"/DB L+QCÅÑÔTÊL)ñ1*™Ž1hŒ4&:e©•ØøFÉÔ$M/rP²RÞo¹œû~œÙû\¹¶ðì?.ëÞûMÎo-~œs~{ïoŸý}÷ìïEQ<ºèÎKMÀoœÚ°¨½¨jœQ5!µ¢h‹,„û¹‡€nÞú0èë@•Ì¢xw\#\ªÛfžzs;Ўå@_ÍÒØD±m|3Æ)‡ûØÓ@+²Ä§8À“â©9p{-¨%ü®(Z£q„ï[€–emOÊA›2´1ª-¢hŽ¼‰cJB›mhS_
+TøP]x'N¸—1çJáÄ´Õ@Ù󁮠Mu˜V´£d °DœR ´5hߛ˜Ôx¹Ö‰ð^¶p >ý0ЌÝ@ï/Ƥ&¡lÚGÔAâO”Á}Ú,Þ”Ž6Ç0çKý¡-£ H6Œ…u^¼UÌí8"™ŒY5nEKàu¸ì÷1Ð+@[^:4¨m~äZ¡c°Q¹@ Ðfã@{†©ÆâˍÖ@”XÈg°Ø3×­ÇIû$è"ÚÜá…{¨Zu] “-nªÂÙ½ôÅ: ëK¬P€9z¸œŠŸ}§ïï@™‹€rñå*FA:|p• º÷“ŧb!çNJ€8mO×Ã%%ŽÄ•´p3$Æq‘‚xx"€ÇxÃËYGc!íÃ%—”ŠtÇRûýÄA‘Ì#+à2 ÷O µX€Ý#ñånûÀ
+0ŒÀ·ùËYL
+óIY´k:Ðy,Àm¿® ‹OS)åÅ͔Â}E*Î"/h…PÁ¤ iÈ"݋
+潊RñᑑÏþÜýiÛuÊþf¥u‚Ph#”ß¦‚Iß9HßY4–QÁÊk)E4D'•ç_+ìÿ@<Õ16ãÞÇnÍbMWÞíyk1åQy“R
+/¿Õþ¬Kò>W›‰`•™PêK¨Ìʪ ¡HßáløëþV9éT°e»(Å÷2!”úȯÚREoŽï^ú{=J«BÕyï³TfÓ2 aJ_ìćû?Xae›qHe\€Ìd6ã:PÝ
+p¨³ä~ÎfÜûøò·wɋã*Ø ~/›qøæ¸8}·Ç-䒨¼E)=è³Ö«ˆ¯½gº@1l`‹Ôªµµ»rr,~5¥ô  ôûâyÏtÊCl!wF.]±A*bûè±Àï²Î€1¾=È:ÆH˜Ê:ÆHa]Å<BÈÙL¹,ÝH)=è}¸aWä}<ÔTÄQDl½F«üRzÐÒ·_n’÷ù?éy̷ŒñQë ã­XÖ0ƪ(Æ ŒXL9;(—·OPJõE¥ºÀ5EïǦÔÈû¸´ ,ù€â†- ”SIT°ÄQJp!P(SL ,÷qiæPmðyÊÃS8¾‡uŒ±aë cÙÖ0FëX :‹ØŽWҗ¥©Ó
+·©—ǐÎ:ÆHŠ`cd&³Î€1¾;Â8u~i-¤\*nPJµIòmòÏUŸe]j÷¹J}Ÿ *3¡Ô—P™•UÂUÅ<BÉÙF[¾Rü®u*Uôî\%ïãÒÃÐ4ê0Cyx
++£XgÀi‰¬3`ŒýY¬3`Œ<òƒâ!Ð] ‚r©¼E)=è³Ö«šä}<ÓŠÉ.pr#,~5¥ø^&º <Ê).Èûx¦ D+ ¥†
+æÒ0c”J#ïã¡@yx
+´4hkб k¡P€W@ý,¡˜OÌq å[¶Çy¨< Æj
+†|L‘ep‹Ý$ù@;_ÊÅ8eãÁ¦! 3nì¸_á
+^è5̕§AÊÃSH‰rÖãÜwäÁ 9ëq®¿Ò`‡mï:ëñ o¿³..Ý®S.•·(¥€ú:Ñ] ù=U“¼Õ¾y$ßù.PFubÅ<B9™J‹_M)¾— î}9Åy—viTˆ W@K-Ì¥+ ÖW¥‘÷ñÐ
+ <<…”xg=.ösG̐Gîª($tG̐±ÉY?|äŽ<˜aËkÎz <îÒè.°‘rqixÔé.ðä¶Ñé­T0—vYëÝ Þ[ð0u¼}ÎzxtG̐³×Y¯lwäÁ i‰Îz<dXù_î«<:êê
+?´
+à\näĪö+ÕUÛWW^ð¢nÅ  ú]>èxáJÁ%°›+ƒb`ä*´Âž‚ H‡µ×ØWpùƒÆá_Áåz‚Ìí¿*TB§¶ý¼«.1æ®#Æ©øšˆ¹fŸ$Xº›àÓùÆxrå|,ùשÀ£ážï æì!X»Šà£G2'Òjªc‰Ý!·ÓwÂ)‚‡Þ#X„ŽŽÖU}‘t¢Põ’‚vöþ%*ò©…Qvœ˜NŸ¹jxq7étFYègâQ‚G_"Øô[‚ƒ“
+bü±ézZRgÌYúNAB\´‰àU¸{"™À,£¹.DÑKŸaIÒ#8~tÔ]XוÔñªÎ¶–ÎÎ0¬-8®@ŽÏ‹CjÅ>ú þÆnk7a[q¾6Ývp„kÑv ^º‚6_·µ´¦/ommöa®NÌåo rü׈¾ökÄΠ¤™"à¯ÛdpÚ«œ¦nhîöêªÉænIc7x¡ãõu´A£OÇÓÉRýì1ÔçI°¯ÇƅRýl¾úP*#̝`f#hÈå(6;'ɾļÙþÿ7eØk¨ Íɯ ýÿ¨ c3MÍ9Î3“‡äË~ÏHŽï⌭>ÆIR¬Œ€{ Y"K« Í ëchÑNF0ŸcôÖX7M*£Ÿ=†V͕ÊègIpõ"©Œ~¶§÷Ke„y²¸¼Õ`á(öRNbä²W¼YÛßμšÃTöaï÷ 
+˜¹*P±€‘ßÊ[º™“¨2W
+#‹ÈœÐ¦
+œÒÚ#¥WÙéŒ …€z¦<Å.N҃˜«Éi Ía"àÇĶÌpFÇè­ñô,‰ƒªéº8ÒWãïRßvýmÞÜ"‘`PyÃêŸ*8ŠÝÉIz’²®„æ09À ®Ïî•*ðõzÎØâç8IªÀ-?‹ø14‡©½mBïTÎXX#à7²˜W_/EÇè­q*C"!Ü9 ¯Ç7R[áþVҟ•Hèo°fšD‚AÕVø·ÀvŽ²r'éA(ÔLî*ÆV‹…œ±ö5x–)éoW>yï§ÚÐS}È¿©
+ÔÓ7¬‚ÉOc,+йÉF0ê ‚ÉÏ<3™ c &ØÝ_$HB€,›JðáH‚|0'W
+t‚vF~N0vV¦ìŽ Ȃޝ!ÅãáOüf‚uð'CƒM¹G3¹¤Ìa)9ù°­¨(o¦Ñn¶<úE‰Ù¶dWIõ‹WŠMÖ¯ç[l¹3ÎيlSO—Ø쳎UØLk·9­¦5]Ŧô?”;
+¸a’.ö‰%jîv‘ -TzÍ¥×*Äèx­ì¹é
+­^ ŽÓ&Þ(nmBóK1þeF¯ãtúx1J§™(†i5IâfµF“¶V¦N¼Mèú»„J®• …\­ã£ÕšÅ î’OԊI*åIC…<VGʔˆá@ÑëЭ¸Tïà¦}ò" }@¢«k-Bw½›`G>Ák‡ ¾ýѝDW`=®Û‚2‚7¿ÿà»Oýo#c̆Îfäï—pýßÄ­Î0¼¿šÀö..ù«˜kîåf\íGOì;;Ÿá6ââÕm dÇW«ý\ítÄø~è|ŠK0ì4ß²/¢ax:pW¾¼w\/#¡¬ûW
+8ЎúÖø·"¼ ςI°h]ÿ†Çp/g!ËÌ?F0÷L½»
+ïtÝ®ÄP¡õߙCß©¸»‹_Äv¡É:vvs(­ëbôy¤$Å_#—ü^“à—¸äçÔXa4%¸.êy0 .؁u,F¾™ﵔÍH‚
+ä€dTŠùo¼°Œ`¯œàL<;–òh» >OÂqÎ@\·’`Áé$èè®õ”8¸rrÀƒ¼PƒÓ܏e6áØۃböNJmŸcìk=â¥Oݎ,œî “X–iDžX¨CÂ5Þ@v}Y¨9§‚ 0VA°r
+êúìfššsœgf#(ˆXÀHŽoãŒ-ÛÎIT™Œ 0&tÓU1HD‡¯ fÜÏy6›+ƒ)ÿ$¿Z€¢:¯ðfl5ŽN3Išj׈vaQ!€ˆ
+¾¢A)Fkh|$dðF‘ŠÓš¤±5>’T%£5µ8>b|€$5Վ£\X`”‡ËkyGa½=çºÁ÷Lw÷ÞîUüF>ÿ½ç?ÿîÙÏ÷ÊÃYHxÚU`U€R×¹qñ˜MR÷Ùéà4h,£\ ¤Åˆðe›…}äVôÍÔbщ”Åò¬â¼°“T@î°(†þ¦u(gáÂa;š
+軀>‰:>({2æCÕ
+j•²0Vß7ÿìÙ$I7ÄͱÓAê"˜cÆî‘ts@ܓ¥^»¤^1>ÒNyà)yRÉƂ€ä5 š0dÄ<ôÜÉYU@÷T@¼
+×û†¢TÐÁHάöqŽ
+h)Û þ'pù;qÈ ñ HÞ"M$2A|âæH‹,˜AÕ›œã€6N“*Q£aÜ-U"Ua±2v5tµš€îBÓÆYø9åH7áÇU·5ù%q\[Œº®áÖút¼Ž¬+OC P{9³Û´õ@3â;
+=5„K~Hÿfˆ}n
+þ#G-5
+ûÐ G% =œ0p[÷†”‡m˜’ ÐåÙLÇý1L\2CØö½—€Øɂ‘ùωM@R¼dÁȝè\<&Y0†q•0˜t”‹¡´oøH4TuêÈ.‚ìá}Wê„}øfH|3$c>aà
+«ƒVEXÒ>§‹Ûß7|$^™„‹Þ­§ß3L€^áÂ(‰¯€T¾Ä7¡„[@iÚ\ÊÃ6ˆÿ $<Ù* >«$ FˆO@FªdÁÈ Tà°dÁ8¥×)CYßPûÜCT`Q KT{稀ŽTôÔbщ}üg*´8 /ŒQdû8GBèPN-öÀ hxé½-œ€_¶YØÇI'€ò°¿{ßa×{5 uŸÈdƼ·zuÕ<Wa‘xwä]눿ÐÖÂ-´Ñµø—ÈÉd©y2Pθ)yxº©¥òEFÙ*uÿgc‡ã²ßé^`å²ú.¡÷3•õ}¼áÙÿ ¼«RÁxõOÊLTAÌø\ámäVSµ˜¼!èîR–<áÇìäLY»Aåá,\>)w2ãëírG 3â#åŽ@f$L—9€
+ü`¯f/¬å“ñE¾Z¹hû2 SAœµ2)Œ0tÇ9SNE}þÅ8EP¸›ëóS0)î@õ
+’;™"wnsíCÊzçìCbü»„á»”ËÊÂÐëWBXr' ç³Ì+pÆD¢ò;M,VëÚDXΐ­åjªµ Ÿ@XÎí¥ûS&aèy§ž°h#-‚Ïëfv]iö™™A,ÖèG%àòRÂÀ}•Lb(g!ì`Ÿ<¾EÐIHŠ—;™qñØÉ/א(¢(Ž/Ò;¨+3´­MÍJs-ÍÙٗ;ëÎÎ6³;;³fÙC*‚ö †YQ¢ w
+ô¢"*zBEB-=LE)Dً’‚r;g¡os¾Hì|è|ø}˜ÿ=gÎÜ{çž{tN ò„:S.OÛ(åÁgBˆ5CZÏ#'kî¾Õö‰5CZk†4-Ö iZó+B¨7—ÊÕ=T°Õ'(eò}Bˆ5CZÏÍ}˜mŸX3¤e±fHӎ“'ªºÊ#^VA–îÿĖ;ôÎ@g;Y£w:Ûò@‰“ÑU •ri}N)=¨37EˆÓ>>U ¬×É6mQ%¥äP]]ŒÙæÚ>ñ©¹>¼¤‚ýÓPœù¢í§@yÄËvoÓ;­Vï«°ÞV]¥w:ÛúÎ нÀvÊeéVJéAèoÈ ½«@g ¬õ¥ô 
+”‚Ö¶Ð]ù¸£p¤pv  }àëŒ. ¿ Pr PŒWá김ÛàY.¬nפ·˜s- „›zÞoö/ÜÀƒ©¾7ƱàßnÅU
+^”ï¬r®OXÀç)x/´b’r
+°h?&µpQ4Ú¯ 0¦{*žDümÀ|ÜD[Öd".ÀëÜÑè¯\¼Íâ×äã×l¨ž¨Ã1/-ϒ
+8I8‘v\›>À1\ÝÆ^€N.UŽù낀š4œì!€/ýpŒ—süƒùT•Îäã»0çFü.ÑÏò¶d‡“s$¸mŽä)‚µ05ËÏ8Îñ0v>]p9½£‹ŠB'¸ùq.ÑÁ–û|vë¤|ÕÃä焼 ›) ,;Æp9Ê%‘³›œJQ)¯D´¥e—Hö¬tYrú—H
+_0TTyÆèV…Æ5è:Q•¹‘)ŠìO.‡DË I‘Ø>Þ°Ê÷gBaϲbŸ,&Ž’Š)Q’zƒªmƒk¼¢"¶J09ÃRÌ©Y™0Ì/cřèáUqËESž+ÌÈb„i¥ey¼Ê¤[½ŠkŒÍ)™Ý6I0»X·úG€k
+32 0 obj<</Subtype/Image/Length 17163/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+<£ðt>ø­qÜÆrn?L6g&O¡i,Ì^!>cÃ3zbcÅÝL›D°?‡gd×o3e/€ûŸt8öÖל3 )Aö¡z=¡Ó‘Û|ÌñY=aOÁ/˜ºPõ%Am’M“­yDø&ŸàIHt!\ßBèÛÍåoéOu ÿ
+7VœCô*"_%rã($¢!^"eÝ5 rÐ ”DA5oþ°äýˆ–µ„"Qþí!å hH¦\ hŠECä™"%°Q ´û‹†% Üߒ²ÇtžÜŸÕûè‘Óš® Úg¤ünà“¦¿ü@ÀàmYŽõ.Ë]×\IÞVüɱº£ë㢿Ï9Ð[éñãÀµ²¨Î¥në7­8µëÆy—ð*ç/Š:P+ý:ªphå–Í•ßîUﻒô…4×mm譝Îó· fÇØ_G³%£Ø(kƖ2ö*cSG2ó÷›Í˜cÓ¬³gl,có†²Ñdó
+•áoÔE6ÃØÈ?3öGcÁ»‡ Å\V!:„OME™HÉÛÐ] æêÀý­…¾|˜Ó&¶x’ ¥Mkja*)n”–©üÞÒ̤Rs "˜ñq#'˜6Š™9ï5ŸP#Šyð6Ŝ•o/vœ±àëIK§¼;Ùôù‹§Í_eµ|᜹‹>˜ùîI+ûµV —½m·h–µýê)óWL]°tâ¼eŸÎ$›÷>Zj³v±í¢å–Ë_·ÿ`Òü
+wíàmòuî>ÁnNI6Fûǯ¾ÛÜ7îÞqpk€äûÿœÙzúÈÆàãŸûIVzI¶ï tßtÊ÷S©t»§Ôy—ÔÓÕ;â«þ[w†»|uÒoM ÷çõ/:ço
+1qPºèuîMp¿Å9EÊI´¦]…$Å>xx¤§ý 
+áq-:¼æ, G”¸pm(p¬'‘ñ“‡(f™èKP-"—‰”€Ðî#*@‘àýDؑ ½ŸòœMFƒ»Áp¤¾uH AkÔ²«p/Áo¾huëîtS!"ׂÐõH.„J‚ÚCFøU <™n¢÷Ó nŠíÉÐv K†øz=q¢"Ð
+mV1<KùönóÒi\µˆU <­q0¸ÜGZ.ԑ¨ó5"¨ •‘È=$Ú胸ÉwAԁ¼‹ˆJãÛÙ઄—ÉQPE¡-£R*À/hñêѺk“‚Ê8Ð`ô©EjÚB¡ô셴¥!Pn{Ñé<+xyæMc¸¹Iˆ—áщÞßFø×!;¥4;šŒk,E¹­¾ºN_5⸑$kE߉\*‚* õþ}*Gy
+ÝÂDn
+KBûo¢!%…"%±I tlj΀*ÁOËÛÛÆ|’ÔѦE¾ç/¢É¯·çx/À帚›Ðæ\ÇÉRÜ8Vo]—
+§i¡õ¨¾ÓC˜t”Ç¡5öi"Ñ@;@Bg@4
+A ¢w£Qâ)ú•2ˆÛek‡u²„8ägÀ5¤
+µOœî =¾¼ ڔóˆ(՝A›wšÞGŸsQžÕ ã?k /«*‰Á£ýŹ¡ ¾€¢Ã±|ÊTŽK]„œFÂuþøUÞ$4å:øq¤Ï'ózé*–?6©üX˺ûoꫤ·‘ëÿƒ ×äKŽÎ%È-N‚¹ø09Ä ß쉃$ŽË6``lÏx&ÆØ3#Ŕ(.R´‹âNjßr(‘Ú7KܤٴP¤†RSµ‘Ínv¥êµÈȀ^A3êCèê~ýÞǪïû
+'†&-†‘O0DþŠAxç ÷{:ûû„Ï]êôôWÜÄ°pþ€ëø¯ä®SŸÞ¡5с×ù“P‡ê˜ñ€v4ØI¥)>'%=±­KÑ£  0†-`'#$Õ&ˆOQðÀÈÏìH‚üPþçš,\<Bÿ/ÿ#üÅ&Ñ æÒ$ƒ6T½$•Ç™`¡
+T/B´„ûâ)Ð6
++¨6ÈQæ!e‚˜.O„¬0u%`ÉH–4̌“
+<×I¹Ê$ToÂC˜ó§h…ë— Œ2¨Ï*¡}€ƒ* ¯wÒf&ƒh…£6˜y°ó²ó◧trÖ4LÓ,°£•s»€çµÁa“"¶Î‘
+k!U•=~7`‡}ôUÛàƒ Ä«d¨]¦Û³e<‡ò
+_×þ•M§03
+Dpú:wR‘†„\D‚²&ÃÈVˆdš#N˜½ŠVØ󻡜D³ÀqÀŽFU€×N2(9‘Ôa¨2wZÎdHЊ~  mbÓ ¥æÊ®œ–cUßýqPÁipj ڙÈ¡®Ü„ñ®^7 +¨¹³*$A ß舁I°g‚¤Ž³ŸÝæ}¨s“ºy¯ vò2O9‰“/%Nf¦ùòûÁ·¿ÿá2d[Žaz zF๑µ@5‘ µ€ì`n‚”N<ÓB—Ân8p1@¨•fËöy{~u¯©’.U°U¬jûfE¶±
+6À~e&Sy=^:é¾dêl¬šó®\  ›O ”AlÑ 0l£
+[³Ð¼‘Z°°P#¨XæÎIe0b…¹ûW‡ßWU€°«eè¶ `‡#ULªP[X±³¨.´@¢Z†Æ〲ã—}œ¿|¯½ÍHª@*ÐïêîÌK*¨Fè€Ð`ņ´ËžÙu¬–nÊûŒ‹Çu|ìvñ2_=á$ŽoñHp¢îòû‘OßøµUTÐíV1ô06èí(Pǜ`¥êû1‡j…犰L,~¡áíù¡“HÏð^ñ=äex~봆7ö.qp÷KºÑ
+À™æ:=°â€C;kÿÐ̘{pUÀCN‡žQÖ:æIlùœ­Èzñ}@'s‚¨TÞ"MAÀU$AÏo{Ž¨pl&rZAµÂRÂQ­°A<£aÈᶳÔE@2ØÄ8`®l÷™l†“Px] ÞÈG¼BW¸“•xvùýãö;?
+)*ClTðôNùÚóçV8ŠF¨Šq@Ðßs_Pe0䄅x péiÞ+1^ÆÌ〳F…“Yé»ü~ôÝï½9”¡
+˜''x®ÕÈk® *°¯ÉœéÑ
+4"†iSG²”Î="¡œe="$!J»Ò3OB´ ”¦³Šã´X€›Ý¥s£=>„ëÖ0dü¨§R;=3M\"
+]‹bØ^ Ø32‚ä'Eü†`&~MI/Èæã" æIŒŒS¥ õ(ƒ2µ@§·À4 ÌÃ!MƒyR(9Á½ÿ¯_ÆåyorVÕ
+«*``> І$X ‰Ya”Á.ï<—Áš‚
+— dNÃ$›Ÿë
+øl-È੆Mƒ8÷`Ó`e°þ€«(ƒ×Ê Ó 
+@gj¬€ŽíGE#A+¬Ë²
+‰¤²€î{! †UÅ9 f9t“ˆuŠÎüì¶æÐ2‰êã2î)œ­€rrIÅÍ/`+àp[R‚×yÐå­S%x„ÒàiÜ­EE-Æâ¼AdY à!Èîà/y€–0™¿\
+ٔ•hžXë묾}{°óD‚ª2€9“ !
+W.瀬Nƶx7Oƒµ,ØíêÀB@…¦÷Z_gÕ- Ù¸CçW¸ +‚¦†gŒ†I ªË5Á4¸ÄLU'ü/„KëÉÓ¢}
+*K©hJEÈc¦Ï‰$RsúÊÿuÇþøq'AY!÷€$ÀU
+"߸ä
+‰d¦Õ…në"L
+3àYà~ŒItæy‘o|¢)n£CT
+üYéñˆ, $˜z7(„ˆy5hQ–ªAKÂ<«Kx5¸$„˜–tJÕàz$Áp €œ'˸F:€’]nPHJpæªe\ .y€}A vI¬C)¬ÝSîð*œ¡ì@Þ‘`±ûIW‚ BIœŠ)Š\ÕbÈaºê_ õë~Ñ6³¢ÊÆ/ôÍ©Y‘Å&Ò{~›pAØØÛ~üÒ@€PL=@ÉÓ ¶2¿dQ êy5È(¤b¨ú›¡håB(1ègNˆ .&…$X¢Y. S'E$ø]êÊÿ?ýÙǤoº ç$x§ÁdÊjL©ü¾Ü¹`ȖCËÒ rÉb„ì³ÛšÃ+1Oi0g¥µO À„P®ß§â0!´”óaS/*AI
+jC+áɞ^ÈæÅ,ÐP«Âï¥, ˆÞtX¤,PÃÈåY ®…CO JƒÖ©¬‰h€Gͳ0‘âA>àÛ|¸
+87: ¿‹$…+ë¡+„ƒ²@’ õáÌÃÕŠ^4f¢-ÖµÖ×Y}»eñ*¸iA…–{€‚ (îSù¼j7”TèdÀ–à™‘9Yè)ì3“<a`•ãI²i]¨MGkô=Ñ6&‘o̍ˆ¦Œ
+KK½go·H$[Œ‚ÿwÎo·à½~$=†¦#ÿ"ûqE‡ÚÜ;Úý3þx’ZÐtŽ£žÙ3cˆNCg\®)%à¿0„Œ+è=ó%ÂêQ•Ž‡âDg¾­M¢)ÚÛ"Kê˜À0$àfåÿ–†¨PÒï¿íDh²"ðx+°Û€ãِۋNìêÁñë¨Û óßÜx§çcðp7|¯Ocß=D‡ãÞøß0áp dç0ü aeóì6mX„¿é‘rdBߟ€m|vi`ìyÞîÅù+¨Ü‰ñ­³x¿
+_œFûkð¾nǎ:\ú­/oêñ¶џøɹÖ×Y}ÓF|AЅ£å¸†¾-À_ûðy*2cràRÌ"58‰‡o»»jqñ(Z_v°§1'Ðÿ¢°‚}v[ó~ÒÃ8R…¼Pî¯=ÂÙd¤|Ò[÷;'öô *
+.‰á
+Ñ6¢PçJgÅÖÔ(²¨Ìì\Ä=Õ+ÿ×íß°ëýمÀÑj¨B1ü
+yÀ#D¦ óèh÷föêq&å;`ÞF Å…KèØ50B–:|ÅÀ›ýØWŠØè{^x›¡§ÃÜ°hÊÓ!‘¥WiÞNaè[ù¿»?!ô$°¥“Ž~"ÁWõ8•‰ü˜ø¥û ËDÝ[ÿ³›‹ŽxCœx·†{q ðE¸ ã S¢3?»M{(ØJTA%ðŠ§ÓQú/Llvb¯áYÐ!êp2íÛá}Á÷Ê8v!g0ø‚c­¯³úVsä,ð2q@n†a ç€ÈT/º°¯ÇÓÐðÖ©¯ &Ï4­Î¶ÓˎŽÓiíŠë¶(*‡œ JÃ!$@¸I$'A
+U¼±¨«ÂÚµê¶:mG«\$håÐE@dÃ!$á0 Uä>"r=û%±îtÆg¶³3;þ™Éñ=ÿÿ~_žùÞç{ m˜Ft9öGËfˈ)Á!©YMjð/á(iO^B'X»tý}¸P|)z܁€n|þ~?hYiрÔS(ÂÈÆ)ó > …­zÂÔ ¦ÌBi†Â\dïF稦éVSZÊNWwS!MTM×@¥/xĕ>
+W‹|K -à­ÄŽóÈMê­^=eր_£*côIDWãÐa4…VO0Ÿ ¬ÒÜò50Þ·'öA¹¢€jÍÍÍ€†
+(—î×qšdÀCÏ¾ÇÅ8 /›BHRO£ŒqïqÄT`ïQÜ&V˜9m±ÂÖS€Ù‡ÐBOFûŠ—0 Ô/ø°V#”yý:¸*v
+_¥T—8Mš­ðîmƘý(8Uؓ†Fö·#dx·ãËDÈí`òïë*²кø(Õ4²2
+`œ2ó•É¨ã(MUÛÔ_xñ¸"ÆfÉ'Ý°U˜5 #jW6vb×)d'Ë
+]Nz¸’~8‡>Æm‰*‘œƒ+wó:²ÒpËÆ <[qÌB€Þ÷|ËpdÚ>œÕ()­¤’êgW+ NÊñ
+ô¹§Vȧ1øk›2éÛþsmL<±|´èžiì3^Ffÿ-ºÍPƒÝwh¾ƒXª@âu¤¥¡u­åH` ‹‹‡Ð·tƒw
+°ÙššWqóƒa¼‡[B@{í!VïAîâÇÙ§øÓ7_CÞ{x«RwDÒ^Nh´M)‡}2d×̯0Òî`+¿2ç-ÔÍ+Àü Xíˆ)ÚÁ>ÚØ}Ž¼Ïî³ÇM 排{Jæ•âí\,ÿQ´¹ÏKþ¨ ,A]û7Íúþ;YNjˆᝊk …7Œo^ALz^3¶Ùi±8_:bòõQõ}p=‚?B‰»Ió†¡ÛÑþ&d‹tx¿ ™›ôʼ߲€ÿ÷Å|„•
+H¯!'
+ؑmÎz’9fjEöøœü¥kM˜…Ö|jkaÀ I-¦ýs{L‚‚ž é-§º9ÐX£Ë¬Á
+ëͯ™YË'ÁɛÑz›Ñ`˜Æ¬:£Ó¿ÓY`£¹–ÎHî5‘*ƧæG-c˜%ç½AOÖaINϦ °ÁúUûÜZ\ù½m'ÒJü5`àk•ó)× ×N!´Çüãf‹ILª7ï€FÑÙ!–œRì';€‹1ï!pI(ÁãeYTԐÊ
+S:A•yÄa*'8AúêϾxünŠ{Â^kº“»pïO¤´H*Ä%¡±Ŕ¹vŸFyw¬F¤g£%jZj»™ ¨bÌgWqâ*쇨Ö<£¥¨¬v†
+™¢ú›&Ê4:û”
+©¤Ã´ŽPÆ¿¨/ק¨¯3ŽÿÎô]¦¾ÈLÚÉ$M3íL36m§35·1Þ#&M‚7¼G°ä*
+Å(5‚xá&,  A¤F%¬ˆÜ‘v—–;»À^>}Î/o=‰}=/žÙý=çüÎ9ßß÷ù>Ïóø/ø¶{ˆÍ'G¸ýâ4›lDž¢|%#á°ÚBt2wƒXZïeÍvsk'®l¨"ó:öß-é¶yvGíöCø_nS!F÷ðíôTÂÙ]8_„fråmœ¡°ò>‰I´nai‡ Õ 5í¸T3$ŒüJûžÝQ»zÓ´_ºÁ]×É¥Gv“TLöîÅà¢BpÀc1´~:ã¼›Ä]ÜÚÁ”@B ’‘—t}*ž9Ã¯%͜.j˜Ô…€ê‡î?mIûÑsüV²@5'Ñû:¾-n/“u°ºè7††Q!àuÄÄÒºïôèZ7ko‘$ ØÌÜ
+;T‘^%i#Fw€Â2c\ç ¬PçIèÕ8f#tŠÒ”õäç}{žÛc"ðªp”HD¶.’xÓ;ÿå Aý„gRúŽÝ@3щ´~ˆw›w¾%eM[ð¼eg¬®ÀöºîÈÏðhÙHì¼Jj8ý·YÈåôv/ú9œLñÛØ¥Ze`ÙÈÒj7ká¸ÁÏ[ì«äx9Ck–û6O1j·‡bh@¹!ôþß.‰9äH‰÷‚Á€¨T¾‹c'¼×Ll­ ól¨%ZÒ`0³+l|T¡*ÁÁ–û6O1jß ñ*vVQ¼•®ß €‹\ڂó¥i¥\_eBïÝ%6‰IƒŸV³Ë7‡ØXFjÖ—û6?xø™?ù©…WŒ,Pl”ÂÁ.í«/ü ‡C)* Ø·J4a:BëîìqA¹³ª· Õp¢Œá¿~­ÛÈ|MãЋà5³Î“¢«çâu"x'ûÉÏlüùª_"hæÑkß3 —¼­w^1žjô[¤l""Ëæ»3›ÊØjh@ÐURDV}«;s[‡Æ1ÿH·¤£Mç©×8oè¤Us²‰»©!Ÿƒ°³”‚ÏŒnðSIƒçȕfH²Àú.¢’ÀúLÑ´H3´rVõ·ÿÁÂV‚
+H.að}ݑŸáQ»]ºA ¤šs±þÙh†âs#À†¢2©|ÓÁµMÄÅ""¸Æ£ÊÿØ4nÁý†“÷Ë9YuÃrßæ)Fíª¤qoôçFH¿HWþòÙ)Jï9ì%Ώé6õéÌT1ûÙ,'h/²ÏÉ´mƒ\(桙>)‘bz©ïĖæÐm3îÒ8|ÚêÙ¥#:Cº6É7¨[2íԜ«9ùg¯uø“\ä»È¼Ag
+þ*‘¬!
+Jò¯¤ù8
+óX¥Ãr(FÖ1n%kKjkŸ!}#R·-´øäאœ ‡ÊˆÃcj‰MýU÷p÷Šñö¨9½jÎc5§M¹v1SV5§Ï˜#/óÿ[Écÿœz£Ê»#jÃI5gâ¾ÚZÍ ôì ªLjó8››Ó6—ã•,ð¯aÒ€üWŒ,›‡ó ‰ïÃ]Ô¤0]ΨhÀñÚòT¸÷»È.R"ؖ$sºiêf é ârÚm7XŒ#ÛAêÍïÓ`€Òa.æ㐼Ÿ i°‡êTfÌFH¹edæMSœ5ÓVÁCɇ{hìâqârßæ)FõîÛ,í³“c#¦ŠG&a€¬~NŸÇyÈK„ŸÐjә.fdÇ"ǹŸ…'wèYy´•Ñ º¨oÇzt¹oó£ñë]þýv¾v’RGÇøŠq±¸ÿàËNjҘ*ŹyA`)nŸ‘48AN!m%|'Ä룮ûQm!2`Ó8¬º%6]½Gû´ÆáµèºÁ±î'?w~õöÚb×ҞNÛ8RCg8þB?§z9“w÷Àäç³6ª€|¼ÑÓ$Ýà~Á5— ÷ÞqÎåñ ïDõ÷vSӁ-ªNwæ;÷4ŽÙݒ{wt³®zôèèÔTÜÒ ×áþÐIª3–=ø$u$vròt /ØÇ^?[[)Šcò‚¤¶ Âʨ?æßÃȯö ¨Î+nécjMÚ?B“I#‰D§MÿÐÖé8}¤&ÆGjÛÔÄ؆5ñ‘ú訨)Ñ"ƒÆ‰F„——  Â
+Êî–‡û€e¹û~Ã.{wïéwÖÇ?¹'Ž;4«Ëùãìïw^ß¹wßù†—sp(š¿„kì„YÝ g•Ð¿›Ê?….þ…ø¨‰_ nIÀó"ÿé‹à™t6é`þ‡p6‚ËÝð·vøó*èøïX
+߃S±/ RCQògT͒R°œ¦\J%Â&qqm§þê³Ä×µ[§½ü xŸSCº¶Åï ÀnïuÀö} ZacöÊ&8ù*؎€°Å{NCÙzÐlÏL-¬ÛÍ¥ðÕë ¼Ô 4þ‡*ù>ù;Œ¢¥¹ùñhC«s;„æ;Và·ŸMàUà¯ñBkøFaÈAM&OîûX¤"q¥(–µPG4uÚÒ@XÈÆî¹d¿6óÇ3:ű\jãS=¢Ê 
+3e´1å00åégʯf*ºÐ²û‡ Æ`* ֏†j ¦Ç8ÖtQ¢KSŽ0ÕmGk#ÆƄ–L¹;˜mgÌ,txÙc²w/Ú `B3Æquß±iG
+¿ 6ׁ††ÐKÃ" G›!üT XY'¾];ÚxðÉÇݶ 6ãÛå0«³Úq nÆnٸܡ•…g_ÀÁqÏë"]A„¥ö¯=‘.!¢bùôñtâROøå£â¸Låé¥n°#}”‹ª—B.SCú¨<H z¥øº.%aÉ%«8&§J –{ ÄREÐÚFžÊ¥­•Bª¨ûƒ·œj@Ÿ\|Ýڔ1îIpÜ7`S¤+ˆ°Ècæü/#\„T7èÒ¨4å`¯§\*Ê)$ mp§
+"Ë_W®ž±r€ðÑäBO žzŽüu
+ð]T¬p÷ƒÐÚHWð’À­ß[3‹à'줛¿j¾q™LFÎ`0r&“™IǠ٪՛ g4œ‰3rÝ5½É¨· ³‘3›Mf“Ábâ,“g³ð%ê,¥!+É[--à¦ÚÊÅØiçS ñÓ§ÇÇÇÎHLLb271é¹GŸœ?=>.1n洄¤i?Ÿ1sꬸ¸¸YñӒ’f%N›=ûéø©±Kå§w‰üÁ« :©yTÕúú)—jz†6§Èâê aJ´üÞ·ÑB‚o†Û€‘®|Œdnfâ=oÿ»“’»Ä#f_ R [Äþƒ(š]Ty…E`=K¹RÈ.È⪌½{ʒ
+?<”òöç+ŠÎ|+gûɆýÒÔچüÊòm‡æ»°çóŠœÚœÊò´­'vVíÝsnÍYߞYTI\.^¤
+SÁM/*-ÎÕx%3¢m¼h#hîبøÛ6´±áûq©1žüMë ۅ »1a’ÑuŒ´8„š:Ðå
+S£M˜ð
+»†6ݘPq íXãU ›nc›GØc {‚ÎA,Ká”hӊ561:6áÛɸn¸L
+YÆ£sc¿„,¬9 ïÇл×0Õu·yœ)vȆ5)¸ÁÁžŠp7盘RV`š|¦ú· ÍQ}†DY€lUƒ{È?0sH°\¤>¡šíËö.–rRÇT9Vz²–©ê¦$oc Ó± 0á£!,
++ð-ìó±ÞïÃæá÷Rd,ŠMŠ‹–¿@q˜ÝMäÑB‚GÂäi´ƒá6 nyk`l+‰œ°…ãÐœ2S)Žå6N|ª‡@TT¢²*°œ¡\ªÊ($C%²x’5À“Ê.M¹âëÊ×~¶™Jó€Éi{x~Šhá€2kx~uQÒÏêy©[\G 壥hÓ×O¹X¨Sš'¹‹t~ß××ìXb×Đ8ˆ›‚U–öü~âüÈ®'‚ [¢N¡
+£„*@&'×ÊE.£‰¡°#yÔ«é¨_¿¾:féeâåôPÇP°"Ag'€VOôÉ©'Ï´N‘Sˆ;ÍßF5ÀBУ·73J8ÀH¼â»J´L‚á7`ã˜Ö1 » o$˜EM‚Á-.Q¥Pi$ä$XA¹“Œú?ö«=&ª3‹»m²MŒZe˜÷HÍþ±Ä¤1»º®ÍFÓ¤Im¨[Ó¦»ÑUQ‘ǼÅõUX®´ øZ£T@E 
+ˆz·¸>‚€ ˆ0˜Ã0Ã<ïžï¢6»Þ£qBÂ
+˜ 0£óÄ+¤æÓJdêDôtð>ö¥9[±ez áíÅ\ =ÓÊ2ˆN‚÷±òla)Œ¾~Ç2,ú[H°`6V{󂮬BGæR…þOóY’6Z³±ÜB*ª¥~zƘl™:Ø»°é9ˆ®âD:¬xQ7ÚÑõ‡1¦á§IEÙá{©Ï½×ˆïyH[ÌÿU3OÿšÐ×Kĉ†á+aD#R³b_št³R™”ªk6K¥*Ul‚&N©Qi¤:•V-KWéR©2N+ËPÉ)Ò´äŒøô鶝&Q%—Å+Òâ•iòTµB-Si4ñ
+™F¡'i“7˒“¶ªR•L!SJ•j•lëV…Jž"Û£QÅ$ÇÆ*T:b‹Z­LS«SÓµMªT•$OTmÚ +T
+)òõñëãSãÿßE¨‘T§†~€u´Üè!µÌqÀ}þÁ+䣣È'ùo«éÚÕ,>‡ÃrżHIËLˆ$bÁì™b¡DÀ £D|!wölIäOÀ㊹sDQBîD)äqgòÅ3¹"žHÈò¢È>OÌãñ8’ˆn$G"ˆ~5‡#âD
+¼Ù³ùžP<kšX0•;ÿ?J̏Šò…¾P, …‘7BðîLØŸÇáˆx¼ˆ|1gªˆ;+~7B2m:?*‚+|G ær9þ¬©ü"þôYÓ#DÜ¥0Sü¡Εø@=츬¨ûÀ¼¦kßҐ¶Ãì,ùíçïM™¢ƒùÛÉKz?>ڞüóôÃéîÕ¿1ågã½ù±U˜5 ú-É;?ï͏…¤‡™€š·áxk¼w?’fš¦HãôEG4å;Š.œ8^»ÿ2U¼¢äBõÑŹÔɯË)múÊÝk/K¥ró©û(êjÁžÍ1iÚ¼£…TŪö¸¢ius™æFvQŁ‹;©Ï£Ž,= ûSEeÄ4eí§.N?BÕçÝÊÔQTQuI‰îÏÊS‘â¸?žIÍÙ³¢‘úæXÁ7U1+ÓNØvâì¡=EåÅîΠr‰Õ¹Æøä)ªú¢"SöUÁöÃßK ¨œòŠÆÄâC•Ô·goéõ}pw16¢µ cB[œpê-å×xè
+Ò$„ ôÐI‡ µ¸¼ƒ~£<´g„ö“ù èëò¸}„óÀ/'iìfí Ñ!O{´:è§n+؎ †h7”gºÏDô~¨Â$þ°Ã5ºÓÓ`óyGl Âڃ Ñ$
+m~즙$øtô&åËåv•> Qý4‰ë"Jҙxþ;XÚÙõ
+ÓË^ÿGñŽi´šFìf3I¤jãxï`œ¥aî†v&ÿ
+yØ2•á¨Ã\**1&πC™!„¹qš]wÕ/$Ÿ<aç
+wX†þy]&ÃТfãà—e`³1l²`UÓùh°¹½À´¸l4ƒÍÇ¥`›6»¬ÿahnR†Â( ¯© Æ™Ø : TbQ·  ¸¸Ôa¾s’k¢Kè¨{h›¶¡;虝ÁÃyÛýúhÛ·€æãé“Æÿþú{®~Û¶~qÐÇA#êÒ¹ ´¯
+33 0 obj<</Subtype/Image/Length 26089/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+H‰ÌViXTç>³*‹(²² Ã.ð*j  ‹ ´H‚Ä%.—f¨&$´¢U㌸ÄâBQ¥ÖZã–Ä­Ñh[\ˆ÷Î0‚"Û×soªF;óÃ?}ú=ðrîyßïœ÷;÷žø?]"‰èÒ'@UÈ{¯R2¥ ‹˜’I™*F— fT‘F±0HÍ0ùÞJ£ñÊGÿG¹y¥áóTLqì Ô̚¢a”¹ÔLaž¼HÁ¨½
+Ùד9Žeî£&ùš–ÕÏ?ÅŸ£f«éÆ
+Ç]Si9öç<–ãšWbŽÍû™å´ißcÿë´Øuªw´³Úóõl{:d´sÍ Pžr59õš­¨Ù¢iguÇ?гÚïSõ,w?EMòu¤ßo@`ª°Xe)
+¦Yz·ËH›¡[FæL{4¡ô_½FˆÛƶ蛍1÷:1Ɯuì™ml‹‘u¼‡>þÕãÿÎù—øÝk:ýÀóèùì_±ýò³ÒÖzøpW÷KzðՓðÌ£_Âö¯ÿ{ê;Ÿ¾½~û~}³ÿÓ®ç…ýóèêúfëãÀíãÏN"e«ÈÊj2kÍxRK\J—ú}JëÃȶ$R^Nʔ$`o©œC²g“¹B>';Sȧ¹ä½½„Š&;Þ)É'Q5„('”§øæ¨ Ù&Û¸)…dVÀÅA›§‘«ÈÔÕ$c¯OÀ—IžK5$#„!dw*ÉYB²„xï
+UÓ«A "ü¢jRŒdb1Æ ÆÈTb ˜4øeSR™ Á5·â6üqôw€eÃQ)Å_âye¨‘
+$.™ðmØ{)Öš8X‚ˆW dl²–ˆÁEÙ󴿈L…H-©„ï-±°•Ø„ÏJ5‚‘Ì0-e{ՏXƒiîÀÖþŒb4>L8#Z– 73?‡áf‚QS1™¦GæhÂL’ ¢Œ7*B/"a¦ qF¥Ä¡qsLIùqy,À!‰ø3ÚZ€È\¨‹kZ¢Ð[&GSb»a"~¶Ž8$3aʌ LMùÞb”Yᐄ´”ï-åÉ2Þð# œÛXÁžÌÄVxí°µ”Œ°F¯&àé0`„€¦£…÷ì† +á‡`l V Ç š
+ôäáS^fM‰ Wþ5¹ÉOIr“ª\%3Inç2UIUº2==5Kë´´+ ("«ˆ
+²´€€+‹l
+pØKÉNÊ8K뤧n+²¬gÄuLҐ^£ ¡ÙãDFs¤BÀ‰ËI®»)Œ$Å®‰¢p—7À¤— œæd¥ÑWdfˆ’¬=ÎP†U/·úö…ÒòÕK¸7©i½?e9ÀÑ,gCM†|Ìϱ:E]RëÔyåˆàÍ·Œï£ÞädHØ䚙˳\ÀzD_ÿ˜(à]±ë“‡È<mc®Ù%8Íëâd\@‹b÷š«—Þ‹;§Ä­ìkhõ
+•™Ø%ÞMk¢Â‡åÎã
+Bfag…aêîmô{ËiM–y]Æl%1AÁ‘ /‰{—Y3o´ÿæ¯G_~éšæW“õ0( ú ¹’7‘bwà1uúkX“¬ ÒºDçGçáêícfSêæÌ`‹¢Œq £õõUm°Že‡O6˜*0Ãù\)ߟ`4Œ}«…z¡[( EJǾï7˜"}œHi™Ëx—˜Y¤8ؒkbŒž°3Áõ7뻌•ôŠ;go'sÌ/4P\M M òv¢u£üÃïVþ‹úßgÏñ+
+“ÐWƒqžú€Ì[œ+@Vf>ƒg†ÜT›È€{"L5÷ånm‹ãEÑc³Oo ØEŒèÍ°ä"3S« Ýc̐žÆ§ÊÊcŽ Ù$5̓⟃…E®{:Ýeèä9”Ü® øbcR•î‹Ž'¸\L2$ø¸U·²êé—N‚^ŸŠ…¶ì ç>Ñ%.DÊB8lZ¨IkL%p‰T=Ðìcðh·‡Ë̜²&2Àølá(5O²ZE$üÔÆsXòíá<¶yÂ
+Çðr63=ƒcû^Øõü'úçò`Š>nr‡~—èg{Š~†¿¡ŸBô1€0Cš8X[ýOúêiF£)Ë ’ÆùGùß#îùËN‹„ïç1±¾:bGùé<:ÎèïÃ'˜óŸ4Iꀍc¯Œg|«› VÈ_(6^‘Øm¿Ü‡ã¤øú_mî±ükºýµÁ¤,é|Óõ¡åû–䲑?]ÁõnÕO÷O”lËÑQŒ7\g[e£v“Ìû„Š2ñS“^:o©\ÿå:A¸‰Dva™ÊŒÍaÏtðßßýõÑðz9u@’gp«‰&°™Ò
+x Ñ (èKX¦h<†u=cÔ4iY1Ÿ•àÀªX;J֋\ú§±Áp*·œ`h+Ä;dX61D.f_|äÙñ#jGÅB°‚ÎYlérˆŒ 0H3øîuhö0çFڈÂL–6i):óhÈ ˆg0G&ø,Žñ\Z匫÷–`¥•V€òđ¾ÌBƒèw¡H%سË𾝠4É+à›Ä*Aܯv€…=€¥B‹2ƒd‚îY›ÂPW n ÞØÂ0@P:×^¢û»=ˆ8qÕ|Êà$ †ï$¯Ù)¶9†9ÅßD`Z@ÌL3˜½Ö¦Ñ?ˆ]'²£;<ƒãl‚•”ÓûÕ£¼E΍J‹˜Áõ’ÀúƒxíƒÔ,ÁO–¡Ð€(ü“8ÔWЖCÍ`I2Áà&Ú€²¡ Q z¦°M è:‘iâ†Ä
+Äi:͛ Ù/å1?&m¸&î¸iȶìyD©ÈH—½k,BsÊ R Z#ØnC¹+W"0bÈŽì 5Î+PpÊ'ž_ÌæïÿÒˋûŒNR4ƒº«ðڀH€mÁ¦ü…óÃè2ÛñéI¶9ôPô%™MPÌ ¿^m«Jæb¡©‡ðٓª4¦ØV^âÀRaaà—2—ðÑ
+Wð¬¨'@o@&¸cà(‘  ±å¸ö0<ÏNÞß<•`¾«–€¤ÂÖðÚ+à‰s¨(`¿…þÛò·@ow6ÑÍ
+Ò º@X$ Q$€ÞÓtã픩èh¹õ{¼Ô©®žŸ¦ïÿÒÓøc‡Ý¨èx.A@0á[Ï5Qö0B¯A­8Ô¦¸ÉÆüÕx©”à‹óóqë}UÔ«fì4T`©Î`¶áîw@”>Ž´–@o:²-Ï'@/½Œöz›ºÑ$P 2µܧïÉi¨H…€Fég%kûæˇ¼é½ÀøûNJ+' ÅZH0‹÷›Ò^‰\|)(+x¾„[+ t¨ü9%i…¬úio°üµ¬H¥|ó%‹Ðž‡,ÿ­È¯A~ éPv‰èë'¯}ƒÌ»yëx’m¶ز ÚÚ
+xŸ>X‚Å ˆä2¾êkPÐ!N`²;+i$ô*"Ô¡œ€’ýU5Ê Ð *J/‹êÏ$¶u z‘šÁ# ©­€ •T(%¦Ð^IP˜®­@W6Ý"°¥x€¾º)ÿÐãMð-²7%¨œ@ǒà{€ Z‚o…*ê
+0¯@'ð®%“@ X]§@?ÖLØׂ„È‚µìåüø⌠ˆPÅq“¡Â†U„ê@"¤I ÀXpÚõƒL0[›A5Ê
+ŒøPÐÜ ®€| éÀ °ÕÔ<@=ö:&¬&@¸z!VÀN/H]m¾Z,·”µÀŽó§÷Ëñìý_šK= z”ò)"<ƒj Š8,hk –à¢H€î\¾àÂM”LÒg¸@z±G~)ßXwžÁU¸ß
+TJEH{}Ò%JpÊq@&®bwœô_ü<z?€aÛ֛)ø²6‘y¬õ×ïþ.C&è‰ÕpüüMU„h\ÕXêDåÇ¢ëM°ªÁÒ¯dN@˜< ^ƒäq/—à™ {®Y!BÊ r›b‚³®;<É'¶ö€¢ÂEk9oþÙoSŸîþðPö“ÝŸ'€Þ“¾Ø¹¶¦Â6T4TûÍٛ¨@"(i$©¹N„ø-@ ș°×Z†i¡Q¦j‚”€Ì‹4'@™AõÄ[à:Aݨ½çÜé-Ãúª!m5gÇ£M_ƒÞªÜ |Mö@]!šÁ֚èe˜2u‚Ueƒ”W<@M½‡û3 Rf09X÷ˆtâªQt€òªÐB²to”ÕU U^ƒÔ.ï£ßã³HßÀ¡ u@À(3øÁ J0p•`YéïTÝ „ú7"nô› àðÛ«[Ø•¤ÇÏà[àŒÞ«0Ä0wÙ
+CNž Á§]–TX™Å64A ÁÊ (8÷ëGŠ3؃€SýOÿPëU¤æ ¥ À.À3Ø'k”â"ô éŽ+& BÏ Qx@„š`QE¯Øo¥*<‰<2€‚…–”¢ tÓ'.Á¶ZšYCù\ã`^€f@ÂíDô Ò Px@œ|£p£!x€ZË&`| ¼ ZN €^¼¸NÅð­@DHzmÜCª»"m°I¨p €Ô½i!˜÷l–™à›È"õ^ùà3K@°§*Lؕš)ÇØÀ6hOr&Z(€‘Ûh`t
+Еy՘!ºL2ÀU°:ÿtKA_ÎPÄçAØD@̎’+pÑpSxN\î_z÷"xü$=þA ünH"o”¯Àµõ‚èsÿ ¬К€‰È`}©•†àÆ4àzÛC¶‚ÔvŽXC°ƒuҒ£e(€"„¯Àm7#€Eòï¿ÃÔ´C}†ž\8øçàÒ7žŸÜ»w¿ø¯U|´‡cøÑfá¯ñÃ÷güˆ€štù×þø÷~|å[öm<Ðy øå×0µ¼òÞ3HhïKß^½= ¾¾;aý|0SÛ&æÄg60E–î,AâQèÏ>Máwºz$ø<­ûý¡(Þż~ú0 ûõ³àLgþv“ý/u‚h‚‡cÓpôqîXs3ý8 ©/ç×,¼û
+œa×H"Ÿ`\8½ðô'9uQ‡¯ßì~¾dƒØWÒùüôàð¬~
+’ ˜SLÀôzN/Õtp"xñ¥wÌÁx3 @Πw|ý4üQ~nÚÎɸpÆ@²¥ -Ð3 \6›È«Ä,â;lNQVNŽYVsuŒeH'&àe :E[.©NCŸŸLÀ«@”OÀ•ƒLÀ­3`2'ä
+ ½€©>
+`XdÀM×K‚›ƒɀav:%n‚[£@ß.l»É,ÀºZqGå6ã&H˜X:†º ¸¨ä‰¼`Y{`®¶
+k*<Û Sy¼ƒâ
+ °!ì ÖD½š`”há ÞúÑoW«5Ô°ñx¹ @s Àg)œ€~
+`¹C þxV¬€rpŠïÇ«0@ø
+ÌÝSW Ó(©;צÂݸÍàà“Øì¦ Ït?¿sëÁ‰•­À‚È€ö*B¸˜Îð¬Cd@)1Ç}ƒ·IàÆ3¸F= Ú
+ Ãq ìu+¨eÆÁÔÓ°!ÆCpŒH5\‚}™H3ìd€!¨ÊÒ°BzR±IÇÈ;·€ÙŸï‚ú€ˆÏCP-Và9ÐÅ®@³0AÑ¢ _‡“PáJ¸Ü+̓Ló ˆê `¡+04R‚iƒ €\üU]–OY¦’ öü>YýÞ×094ÁFqâ
+>o¤!è“' sŽv AàÆp æÚÎù¬TáÝœ%€
+`M­9YUxW€Á
+Q==ƒßPQ@³þ ›ë?ܨþ¤Éíê¼Ï¢±^(jdj@ïjžð®À2»tU rúwab6ÑžcøOŽd€sÖݖ£€È Z68€|ÃØ÷ètAüaì, ††!­º^·E–(B¸öä3mš meÀoúͯü¹ê–}ÕøV<[ýJÐ
+ð¸²Ìì 6Åyª"€Ü¥ËÐ?3d,rT‹3øíG€_„`Ë+D?9K„Ð £ä
+&»Ö9€+CæöD_;
+!îÓô
+6¿}«`ç"D3`¿¡H yHžþOá¥6¸ûl¬hƒF‚7&j‚ŽžÅúŒSÜíÂ.€+à-ϼƒ¼Mò
+ )2 $_sˆÌY”€”Åy{ A®G€\N¶ýå&x£¢z€V„ iƒ6ÐIM°^„ Xâņ_²̨^7A{bò
+Œ3D.œs¹lùëzf‚¥ @f4Á70/O€R…KW d‚d–!TºÉR´S*€-Q:ƒ\…«xÀ+€+`-ë‰uèVˆÒ+PTeÀU؄W ÷—c™êOšÞ­àYìÐÁÌ z¶Í“z‚K" €8hʒ+€[Ì3Àå
+Yu†¼ê®ùr©úë˜5M1º2€u‚é5}šdÀ¦l‚“ÀRLÛÿû‹Zjªp¤i•™`i:…
+gêÅ„€Õ&¸HEhWLÀ ‚w©
+W¡’
+›£² 8âD…Yd@£Ál×çïÞzh,Mgñ€v
+€—!ǓŠ2de¨r»A2*ʐ~ÇI3 Ä®À케Ð(2 3%€pb’’¶¾[gþ%ɀ² h]!¨–=€è¢ÀM°`p]ÐS²Î(+Pi‚2€3¼jHW › Rzx9’ä Ì:™Ñ(!of€ÍñÇ[O@•d¦œ@€µA ÁN–ø0z¥
+F¡•hÉM0ê¢4lth‚U»¸Ñ¥Jø+Sa;̀ –!v¬y©‘† ¹Þ-У…Hõû¾÷ÙêOºµPÀÒÓ!kƒZšˆ7à
+¶ÏCԒ%1¡OqY\pn*œkÿÏy¹>5y§aø/ٙý²vwv۝îL«³ÚÎÖÕjeuV+ŽU[]´héaÚY[Ô
+MåðF°ø„&f"E­˜O2ºfYøî¯îc·]@óÒÈÇÂ[ÐäÙ÷&Àc(áôÈv‘
+ é
+Xzs^@!h'Tæ\~ƒ`e(Èú~6æ€
+«TÐ*àÜkƒ#3H2.×`žÊЀ
+,—òA@ï²ÿ
+ È‚ÔåÝ6(â9¦ÿ?ƒþÌ]¤.àË·ñ*¬äW ,`‚…ÁðŒÁ@œ‘ñ+¹Û—ª´o(B>jƒj2A%^xVÖ UÎg€|.€$ BB?—iãW z· €\x2œA@·*0«é¼Qªy
+ñK’Åz&BÓél¿ƒ”èƒ2€ô'5{Ðè’’KoÀVÊ õ$ã
+
+A° hæMÐI+ |ÎèÙ
+,£p
+‰ßêöB°žV` :)<9|–%Ëd.£©"ÌgSïå'`ªëi2TÅx‚äñ*ì“ñ j"LÀs`MLúù+ f¼?Ó¨1Y€Í–i¤Í3›2¸ª+ߊÎ檗è՚&èÑâo\MK=ìe>À[椏•Ëôhœ  èP€{\ÝʳV˜3*!Òû¢ÕhQhgS6Û Í¸NM÷úQ;r‡¬?õÂôté6O’-•l’&è›뗂‹[µ§l-
+{iä§Qlq|gƒR1âÊÀÄ:ƒó:¥Ɵ·ÖŸxž?3a!Ó<\c4eÀNэ©hx%î5Z¶×“=Ó9kMXŒ§+Ð6Zևñ‚ḏBè•¢¯vâÖµöN,
+çÿöLÈçþouôr1µôÈÑ£*Ž7éñâšp‡­ÐǯFéݬk1$
+›À×oùQ¯^ŠöëÛeÊ."9¯d»°_¶pûF²O"œBnùAšá\í͊Ê^è£(J–ÑvÃM*+æ!•NvuA÷Tsú£¼6=¯þqWKŸ×I@^Cmp¡ &oÊ­’™àe€Æ„–!è ÒÔÓ
+4PPf­Aýœ¿ÔÛ§!6@—Ôí µ©Ðò+@!˜gF©/™`ž"~ÆZè º˜F-PÈèïò@0'ãükll|c,²ؐr®Ö–Á3ElÜi«PjÙØҐ .±Ø*…WÛ¼ï¤
+nƒ¿ª°¤©ðb*·s)ò…`3A½\i;¦ªò
+j«™ͦñ&H!8¥ÂF µÅ”aK`ei·c‚”j>¼ gÐQk6o‚$Yò>ÝSá@$´K±˜%?·_êN‚¾bW@µ  ” c$'ÀB*·s|<€®€÷™Ó!à¯@Ñ—¾+BÏÓwÐX{ [ì–ÂýØ
+2@ȟÁžz(JöDH´‚{*\¥
+ vš€§Föšc*Ðï”!g†ƒª& /C4Þ BZ€TbYAW`Š¡~€¢“*pñ+ jl٘ÏVa¡‹0Vƒrƒ] "Þ¦¨ê–Ø1܈:!¦ËdÍ EŠU16û÷Èù2TÐÆ`eHê_©lúÝeý«ß´>çÕ4½‰#ð‰M¨UÁЄÅgR†˜hêîY£Ýìôk§ §]•˜!îAI^|ׇüMԙÐ܀å?²èŠÍ¢K„›Y[ÈhƤ.·-\G¹ –tô_rçÐ@YO9xËå¥è.Goä6*èdŒ°³Î=YBMꚩrYÄfÖÊ֒}¾ÒH ˜”À›bŠ+[EƒSr8%Ó,:†áªà¬™§/¾î«ÞXy5€Æ[&Ç57®Ž#9
+Ý·±þ© g/@gÄâæ1¾¡¨ú0xOÌ!²²Œq"|‚6T݁ùÐ6Žvã§b4\õ¢Û6ƒ[bt…3܃ˆFß簟]Ǐ
+”<Àx$¶OñCD×0Ûù$H M„ùÒÎ *ê(ú±k%L¸2t|ƒ°MÜl„8ƒŸÁqÀjŒ¤òð3‘à>0àž²1yqÞ~3 Gõ ½™#&W`y߂#õ¸÷“§`;`Ç!Ä÷Ñ÷1¼Áår(®cô0pR‹;y|…?ypP ÁCT…Âø·_p¶ QÉЀ3d Ԉ½¶±}l J!¾ŠÉÑo"4ÂPXOø¼§ñŸG(þ‹:q Ñ:ËaB†›ˆöÓ°¿³ŠŠQò5ëøý2®Ô û&&ßÞF\
+Ò û iò¾C°ž°ãp?îF ó*L‡Öp¼11yï9šÜÛh=ï;³¸$Gý¿¡'ÿlÃÝld_ÇüŸ=8 AJ,JCñ␴ˆJ`\ǝ8§ÆÃ[h?ß1#ΕCt…ðÀ9 2Îcý¸gûÝ |ÿŘý»ïõ"â?ÁÒÁM@lºCàø£G ‘ó-zŽ`ó˸QáML¼ ¼=„¤^ÇÈÛ
+Ýϼç\L^xÙ]]]ç<ßóû½ïÆå-´~®géNÅs͝v»I¼‹‰OäÉRÆtãxq,”9ôvÜq)@0m߄·ð¤W;…®šýGÈ¥Ãv”%OÙv€*w:–L ©!)Y0ø…jÀùpjlþ´‡€›¤m§y‘PCb
+*€Ní4Ú×DO^(­š)VV²-–rÞ­œé€Ê]R ¸FfåÉC[ ÈÚÉsy³zbÎrF,„ôKn
+ Ðƒ)í0́ôkF”ÄÆól5VÝxª<o—¼b}>ùÔ­„µeÄ\âZàŒń¥rÛë§)5WøÜ'q?¥.5ø‘¤0Ø¿Æ/C‰@×j£Éæ51':ìÄ@¥}Vc8¨ŠÀ¢^쯑N‰CŸvP@v0/V©¢Ï@ƒä!3åƒWaéƒv„MªþŒØtª%x˜F'&,;PäÆô²—øüÀO[¨·×2¢ÓɤežÀ+HŸvXLàQÆöó”)d
+<&Z0mßÁúÛd
+xU“͍@Úæ«Î溝2»Ü+‰8NÅ
+Æ'Ù\H‚p’ìÀïY[zۗl¼iÓq’ÉÝ#:ÎrH¹ý«pª#NÌÚÀ ŒAI™˜÷ŽÍ·ÈÛÂs[XPOTÉþêÈ:ûɦÆÙßôQúììJ©sÆîì‡p–)DåÖc=²ñlP; rMW¸LÓ¿dŒ‹YÊ)´Í”àÎLîxÓý—w
+š„$ʗ3ê:…¯ŒÁýTxÓ²j„€Hžè5­lÎP hsäõœ¢’ÉÚG§LëJ¥Ÿø0d5tÉúbÎQ´ž!e8_'}/å:†æ·|\@ŽÈ$*šÕq3/П\æPÔûž£¾ó‚s_8°ª‰Á”Ñg'îr ž†MW,GðU#Pá¤ðÉãÇ­ÔÏmÇ¥RÄof–³+"1úŸý¸Õ±?™’eŒ®Æ³˜¸ýTzñÖr€ÍùdÑäƒAÓ¢v€íãÛ?usœËá´ÙéY%byèEŸ¥þ¾®=9ÜõbPØå‘Æ{Оt›œš,U¢Ï’&X`š¾òá›à&Œó&n§4€w¶Ã¬¹GBϜ˜´îW#@±ìK_½Â÷†ûFk)A‰@7üi_¨F $›‡îtZNà\Eì1Å%Ò@‚kÐöàKI±0¥™JZœMFÛ"’F‡fë
+¶}K¡/ƒ+»ÐÖšI¡æýØä"áp`xn¾…dìà…#,l à†
+à3“é\ʇNÊûLÍt€ z¬‡p»Kâaª\dGìU7Áo©X‹Ñâ%¾ù¤‡«\@®²šµÌ5°¢‚àL~òäí
+™öÕ$⩅
+À»„ƒQTz3b/B!Y;hòÄàЂàËs íK"S8'×
+æ·z¾~LÈE2¤-ÇX[MÌË*¬›`M‡ö)ÞN9t³îé4{0jي›º
+_ÊÝ&U通Õ3wl‚’y3·™5%Êpj_êùêa'ÉZËÛ¿ö)›`L"3¦@jìHˆr괒ýY‰½²Ø4±.“TgéS×ßêّDÆ.ªÄ,‰@°lÞ¼^d*–‘°û÷\0ëÅ:‹cQ”+w–Û·I
+§ažº
+£-%Jиd¿ëÄGðĽ©k‘lc*€2;¦üŠga‡hýZnŒÅ
+€`ñ$‹||:æàú”èDŀQG=æÕĆSªã­Å;ìÿGyyFEy¦aøSE bÛ¨‘`YwÅXP‘jFai6bA±a‰½F kì‘f‰X²"ŒŠXA@#(Ê2â0‚J‘²™¹òÎxöŸ9g3?æóý˜sÞû{žû¾î4ÍD.ìD&ו!/J¦ªëÆä±x'?/㱈×)B€5d̤x¼ºÐö!p׃ÚñÕ8Ÿ!|ÙÎ4öS<Ÿu­[ÅڃÅc‚Oj1صV
+¯|%!/+RT”—”–æWÕ½T–¾.+xQV\¢(-*)­-T”}*¯+}‘Wš|E¼[Ι:\„\$‹÷- áë­kp$n wD²Ô¥Àîõä þ˜šÊV1+Ä8´0öaû9çÃ둍—L¶ïÒ¡°›JãômkHsÆÿÙ]"ýyîCÓ%žº2”;U£ž\@H±+ùM€Ý§¸(ìĶ™)Øðñ¢–Šµ—eÝ6í
+«ëxðÀdù˜\'̎7zuÏ:(z€ãæÔϤR_Ó
+RŒ9Þ»ãd–¸°<”ŒÎ˜"j+&S¢÷
+âþRRÌ[°¸Éö㬩6¬‘1Ql;@´è }•,ÈÆoÉ_ ŸHcÑ%–“Ó§Ÿ
+JçFev…+s(·keaû"‰GÍhA¿ùÞÊ•¢ð¬¸ÉáPž‹<þGÓS‰ZHÖ<¸tÐåî´ÁŠâÏ>¾wu¶¢Ê³«ÂBH ¡Ì¡V;E»•×ھցPñ¢X½dUא5¦Ž¹™ZNñj¸Nï«$ú¢œ­" ›ù1¤NÐr.鄮ãÖVўª L$.H[†ªìê üY+@®+ÕÃÞ²ü®®¥Ä±‰±X™@â,Ê&4)¿­gïNΦfx¥V€}ÛIu¡Êýƒ|Ùu~ZL®N€)©\@Ö\H v¹ñ¤^ø< >
+áãRS¹ßé§Õ*œß‡ï Rb©¶ã9[+ɍÀ¸‹Ë0ÞU䣗Ãügÿ|þ‘ÔØ7¦3±´€î%£ØW‘ujÿ¡Aë1Ö
+€4þteÚºƒ}m¤Ë\<Ep#qrîÖàÒChšÂ/¢Ì4’”¥–à¨ó^9,2%†Õ-P°ƒ£¶p ¤ó§SKz‰Ï "žç¶&æ €kä‡Èa9=²iˆôBÊÖ3øË'|»HÛ¯pîß~“ìhÚ­±¸Žt™\±@”æê¾àKMÁŒë¦qh$>Lè• r¼Î©*nú0°p çS
+º¿cs…„À¢3¨ž¯eÀJ=I1Ô¤‚Ïî÷ø=†¶&ìºñÖ2@ï†yYG
+âhwÀ¢› ¨TݏC¡,Ó÷«2&œZصYC½+&q¾Î‰›Ôx2¸@SÀ™ ô.˜þÝI|gvb´—ïb¥oáå÷S
+@l%žt%J>#5A³€›Ï:àî!IëxÖR´CS¯Õ5xâ8MîLÛô’œOÅA vlê”JB$§‰ÿåúZ†>) Ü_EŸ“Y…`ò!Úm±H l+R!¨ß(
+¿FâAÚc‘-!-@kK»}¾ÖÍޘ\Å«Ø£è•  dVòÀ¡E3; 'N€˜V
+#xf‹–õȊàÕZî>Æyq(q)j9NâZϯ1Ü9"ècu-öÐî#x§H¡ÝQŠ¬•äÓ\¦I¬µ¤Ž—¸ÄËù’€[Ò¶’ÏɊ§ÁŽ~'1G0ÌÔ`Øï¤jJÏ|u6xòÙu’Õzb@o¤‹u×H¹Ì#7†}ÂM$¢_ÅgY‚ÑMäíÀ¸ |À9rþ ›¸lŠutmÓÐ$%*Œ;¾û¤îåN¸¾Çó¿Eaðæ³]'k5FG‹yINru'Ϥ€Ô`…/¯¬,H £ÊA«~¼$€c©®€ÌXíEÀÖ|ÒÑûý¥l\ϔXÑF\˜
+ÁÛ~•W•Fà!R©wÆ4¯ƒ¨Άc°½j¢’qYª¯;wÊ/MÄer×J0%Å¢qqb€1›·šÒhw’|Éá\5„zí'™'5x•r>-Ae@.wt .ÿ„w»²À#±€£™í×ɋÆè í€m…äHúªœãÞ2û‡¾5Îþ¼ÙßøÁm»Vâ$7ñÁf›*Ò˹çת›Aý¦~ìTKPšïéOÙ(.ªíú—,Á7jû”yòÊã³ú%6M 5¸±’¬YÀ¿Œ¢h`Ò¦om=[ͧ¹½$ä(Ý+Fµ%XF•= Í¥€\UGCÖý
+@z,µ+µ Ø~ƒœHŒ+4› 9¤Mákßÿ}Aýìzïììϛ‚ó î,DŸÄmiW¸³ùøÛÅ3K0Y,s;‰lV
+hûö)þz‚7Ðñ­Ie€üÓ/zðf΀šÂQ3;@2ÀïºZ‚w€n¯?(ŠRKp|yëD©Vcüæ=‰§T|°V
+y?¼Ð_Ú ÍW{–Òˆ]Ù@kdFÇÊÈpл„ªÎí»|£W4÷Ów²ë>Fp|–ÊöQØ©yʖXf‰$¥¿ÅZÁ¾!ƒC
+)ÞLœv@z€Š6– ™2·iïáJx,:`†Ý&¼w‚èé53ü˜èÝmt›Tv³*Z±9‚v’æÜq˜‚×¼,ÅW!®Þ¡¼{Õ{u¢¡³ègPû Ö¯ ÞLxÝĬH­Ëô-¢ib'U¢0!«ÿÏ^,
+Z‹ñ !S0Ìd!þ‚Ù‡¨Ì 4 [X­,)YK*žÂ<Æ^3~a”º:®£r›ª”/X¹ ajæiÔōŸì(²iÕxÂBE&Â.ò}&áŸ=êY5ÁRûù³ˆœ0ò%¿Ú@of±¹œÓ)à ÆÈnŠDÈt—Hñaq“?ÌT±Ra;<kd=Ux€„l‹Šýæ˜ÜQ&Ÿí§ÌÊÊK‚:¤ô-l=ñ°&®É¦u’ÞÔ Ú9ºDø>5Aõ
+LÅñ)€ú„<‘ÄhQrtÇwtGGuD“N¨Ø'¥sœõ*¼7èæèðˆhŠ˜;µ <óI<hÔ8‹S {¡ü„ ©õ±¬%šKøö.†º8€pKÕï/lzþÏ1ù¯€å,Š4&Àg.Ó½Ÿ
+àg" D¾«ŒA ~4Dd¹¼P¶7s)G$Ú±¸!Êé‹×ÑÅQ·ÑJôM2OSà}÷W×sè<õÉH¶UÄ©
+>fvVrYeODhhˆÆº³ç]Ž'Q“€¹4ðab@«ï˜Îë¸Bæ<˜UF|û©›mgy:D¸ÑóR'ÁM¸ŸæÒlk:ÙÜÀÎn‰Ûæ—st­þXיXšJêRúvÒ?ǀGå'èiðõ[¢h?Õ ayñY”mF?¯ŸMçIJäô{X]Ç-ÛB(_$%F±o3-ëlÊ_,¸dpb]"êx¶±î
+×0¼³S[·r=SXØ7΢õ§‹,ÐÌ7íÏÉgaJ6{CpÙÀ 6Ãِ…÷\ôm¬ÑðópŸ‡•óf= >¦èqX;ʤ">~­½sG˜Kì úÖ+wôÌñæ’+• ±}¯÷ÅÄû7 žK$,Ž4Wt½üÖßDB^Æ2ñۊpÙMödpÒ²º”Õ¢ÞÁhr63=•€WéN.é`Ö>.N£f¹b|¬–•+)ó åÃÐwŠUž½F£šÿ}V}u¼³žü$¿SsøÛaœ×W>aãåHÞ×°cþ=ÎòR$ÇgÀ
+˜×ÀbOŠ…¡+º˜\Œçhr²ë3ŠcqŽ /Sº„ów YI©¶Iex,"ŋü)0ã8G8åJó„^æø°/šÐW±<Q÷Yú’óC¬¿oÀµ×4N6¾ÕÅ3iù%g¥A'¯ï'óIÞVLÝaÕ*®¯¦eӞiŽ…ã»y킚ñMBžçYæÆÅCœ»;%‡ýGXê–\ö¸M:ìšu_€µçä÷±f&àT_€åw¥›ß¤íéAy¤? øݲ> ÑÛ÷Ëp_DÚVò& ~”T7šÅ ˜-HäóWî pŽ¥{¤¿jfÃ5Ö
+j“]P!†²Õ†ÔW¨1…]*„YóõspoďUÓ î¶Ú2%Ý*„=Oí]ѯS›ìê 
+aÊW¢»¥Æ”êUKžŠýǦú6µ¢÷µ¸‰âø»ÝnÏ\R1>£ITóYµ
+aõQKK­ªÚ¯U…èñU’§ÆÝT!F}TjżU}*ËЮ¶LӐ
+¡ÔÛU˜‘^µÉGT³jâ0|¥ÆèÔ"ª½^%Ú²¾ëW üÿAðQ[ðˆ[õ4GÇEìEÏÁL± 2 È]+ ÝCÔv#î²¾ØZ#À/G€O¤€ô×?ÐöW`Œîñó]Ùg_œG֗éiJ¾pKFTCŠs’\Ö_^É`>Õ
+8-G\=-@. _®?²]v<h*3$_/g¼ö…€^IûI8 ÃHH›ìX* ;C@U¬€î@Šìcõ’‘.TŠ‰ÒÆ+²–ª,+ü™ãÌ'WpèŽø“‘:%Uú!@󾀮=bà¨o´T¥Pi©·¤³¥_·?бW`ÚÝ'~.®$­H.“}¤¤•'ܐ~õ]œ•¾GHˆ‘Uð®&©T‰T*]@sŒ€`顧tî¨IÀ—2S¤É‹ÎKËBåd!’–»À‘Q‘2f’}®d ¨=. GvTd“ǿد§(Ï3Ž´ÿ@¦¦Ó™8SM3©G¼%Tï¢ɘTLµMƒŠ"7r„DA3 "‚­:DˆrÈ%°Ë ì)÷-Ë}-{±_ßggö7mò-3äxØý~Ïõ>|ïï}^:Rh„M¥u©PYµxÝ|OüvÌ ‘ÎyÜgí
+¬,µ»$h¬™2ró÷o -CEß#§x)ŒQ€4å¡`ѝè>\rï $^€Ñ(0£
+êFQ°6 ­ÈW։*›h{ ?iá^¹e(3¥ù²úãh5Mù(Xp zO"—¬«9S€ñãFˀb³'
+6G¤ÒÃÚXYJ<5}ÿ»5ÜÉ/DoÖÊ€a/Ú¯üŠ`eԉ(ÿ°h_ï€0¿³!~¾¡aޗúuRÀÉààÐȘCQ'£Bƒ|¯Äø
+ôÉHÏF‰CMÆ)e&ºIõ„´†‚éˆÁ #dC„9fÞÔz„|ÆÈFK6ê6¦&̤:ô²M#=ÔRDýèK6ÅËK0™‰Û8!—¦zX~3¬/<‘ `Οž¼¤™†h³xI#{Å®È2"‡,œÙ cš =2,½C琋¢!9mЧMXŠæoZ†ºT(Mb&1jÀp;
+ÔCj@âM. ¢œ. ‘`y:
+ø‰—¶>ÊÍ3åÓ'¤­]ClÑ@³Q_ S#Ùlï²ÇØǼ^2ofJ®`ª®Œ©®B¦†sؔ¥Ï¢¨„ø¤˜F›j"ª:2ì¬dj ž)œ)£”f2)mI9¹4’jëaª‡üFÈP¯$Ã,Ú
+$T³ª‹©vª1ÿ
+Þ´^DÏ\#šÅM*Tó8¹:4 ~@Ýĕ5!âžP™,úž(˜Õ%Ÿ—9 böŽÂü À]…†kË#> ¹÷êÊ2ËÐã›ÈéºZ#à$˜‡‚îÀàQäòè6B.€©–ìT¶h[à'¹¥ÉDw[cš =*,£Ú³ˆQÅ(XNôi X²;
+fuÉæ…³w|0õ½V3"%ð2du¹“^«lQ)¥=bñèH­´™«‘µ=m•«d5²öö*…¼«YªTÊÔêF™B¢ìëmÕµ4Õ4KjJ¥BÞª®QŒˆ{:»Új•2¥‚=Q*•5ªY}w…ªJY9 ¯–Ö×vëþC~•=5yEqÚ? £3}êƒc;> ÈRˆÀ¸Ð©Ê •:­m§4dOˆJÅ")KÔj¥bÑj[¦¢›ï &aÉJBP*ûRÙ Hš¯çDÛ§œÇI:Óóð›|ù{ﹿ{ï¹çÚzêbÕ*µ«~4Þ°b‚ë3Léæëà쬪á§f
+ ˆ \Ç Úÿ¶9$8 ~¬á…o Àÿ€ÛÈsºl  ~9’Ç Ü_6†!âÿ’_ÎûÅPVR1A™ÕC”4jª³¼?bá"¾o‡ cb朁Š`›çìÕn‡Ž'<ǁ¼î"üÔÇ9Àã±=Ù×n—‹€]ÿúÏÍ.>&]Ý»6ܧ
+[_›Ö+•`ûÉÞæiLî× g<îQžÊ^ Õ_Ðã™ï£ÚôPéÑe¥ÊöyêÑËٖbùJ€á~ª3û,A<¢ÒVï¾Ø†‡ž)k=5Œ”Ê[Î*J€ñª³S±\B¼`9«–êLNE¶REtö°òÕÙ#r:\á¢V“sQ“á$£¢’ “ºk¸òáHFfû€b|n¯Üúÿ®Þ1S¬Š8„“äýØG¥—ÝI0KÔIçz±L$gŽ› #›#§8¶Sßø§Ù=SÊ
+S1òD)À·?ÈJ0zÀXDáډýÄ5=‚ëlÀÍ2sFÞË(ÅÂç8ª•ŠFïÃf€ÓÕÕxðtGp(Àì~\šDÜXÙ8›²›(@!€ö(ÀÜ¥ÓûqèÔð=질¸\pë3”9ÃۉJñ±ËÀº§ª@ý
+°ÍÂHm[kT5{*4Œ%µ ‰5&™YÍÕ¸¹Bi‘K›Cu¬ÔÉ(e¶Ý—Ôòۉ'Yc~ª‰ÕVî±0
+34 0 obj<</Subtype/Image/Length 11486/Filter/FlateDecode/BitsPerComponent 8/ColorSpace/DeviceGray/Width 257/Height 257/Type/XObject>>stream
+Ž“¹º¿ö˜çáÈd £3ôåäî2ë-=f5rìÐÍíµ‡Ì›Í‡'Wxu;9Á§q³Á98¹`µ‹~•#Çy`½Çº(µ&3úm5Ÿqlq
+¯S.ŽKÓé–FgjG“4ZÞÇ÷ ¯ ]wZ¥:°F§Rƨ•
+MŠJ©‰Ý¬UêykºøUJ%jY‚Š×MTê2ßÚ¡Õe~à›‘–øn–Nóñ² ^•«ãU‰Ë“y•êƒã:§U*7ÅijV¥P¯=¦Pf¬‰R¦f­ÙœÊŸñ_ÃkùÄX…6ýà^§KXœœ®Q-9”ÁkWDdi’ãRxUê–M™*Uôö´S©Ÿ„¥žâ##x…úTbŠ2sÏ:*ãÀ
+:=~i²&MµäˆV«9’¤NK_”¥ã}¼²x~Ûª,^µÿ½´Teª×²Æ,ÅÛ3? ìf¬/ ÉÄL*03ãÞ[3¥œ·2áâi‹Q¸£4 ÆR^0kÔF#k‚WÓ³ÏLFSgd·‘õ‡6
+ŒíúÁÈÌ{o˜˜%!Ól2Ÿ=faì_{ ¯’Œ ÏÃû˜ÐÝn؉6“ѨhaF F!9ßh4«o
+‚%ãsƬ=nb,;ú* fÌô< ÓÄ?ª53Søc :z‡ Búu‹ \ûÚ4$d_Œ,÷"ô•«2Z
+U3ÆBï &óþ«fRe\9iaBÎ1ø ö!§·Ùlµ[z|Fm¶ñõÝðøÑS„ï—®f<R4*êcôøÔu€í³Ù&7àÑ/ ò6@â—âî‡Tú …‚ÁäãúÚm¯ËÉ*ê2ÿðå €;×Yl¶ÿ6x +ØýàÌM€oÿ pûo~
+Äá1äís~Ìùðó.@xíTÎKì=ŸI€ä'AÇ»jŽÜ–æQ·®9r\5F‰ìS¾•Ö?Æ[âmð瀸E=ÒÀ¤õ–I|H–xôä¾×T›™ F»¨ÞÚ¬1LR‡_D絋Sò\Û>L¹tR’V‹x½¾ù7¿}!
+ûŽ êâ)Ÿ j¬ ¯¯]ûþª(qênås— r’(Iàcñúï®ô™ Dö)·&¥õÿù(¼°[ÚäkŸÀµI@ ™ëìS–{TºÆ&q3žêš¶ÙfºðŸ4àñ°çÀæu#žp-xo}…Ǧ1<ŠNõÌÌ"º§±õ8@ï@?fÜAlÍ°µ[âBŸÀÖÓ³’žl=ÕgèN¨0tŽ1¯ èbÆs‘[¿Â†ãØäÿ›B+ÌX½ÝZ …akԍýße
+uÓ”Æú–>l=ˆ. £³wºWÿa³W^3ÞU ¾Ðç¨7Jƒ*¢n(.\Õ<Â+PCÒOÐr
+/2ƒ¡ÐûX0î[Ë"Q—xàRÀýp”l/ ïœØ‹­ã[ÃÖÞâ»æn
+ú%¡N÷g€Ë'rwÛ^ïýÞôÔÆVxÜY p$àôW7¿Ⱦp÷
+JTEšp é÷‡©˜Ø€K,¤ààu4ȸ†ûؓ¸\/¿M~yù=æRÄB°©B<›ã=Å¡x†÷‹Î&€¡:5¼¹˜ñÕ܌ƒ–Ñr˜ ©bԕàdTàÚhÀpÛPҏƒbÅÀ'Jaþf*q2êqÊ­eEäñÈQóׄäËFœç
+ü—ü*ŠòºÂ¸ ¦zŒF–F­Öm©MQ1²ÄØHQTˆ‰BˆkÄÁV jHâRŚ6qp FQÜ#!(hØfXD„ٝaÀ¿ïÎ0fÞÅß?Lí9¹çðÍãÞwï{ÿ÷–û.̳¾ƃÔ֚”ÏólXf1œ¶òrabõEò[™™3­Ü]]®”Î…ÏœAº¶LƒH³"°ä ´ÀWŸHÝ÷Wܨ
+SLÝKà*L1+˜@©7PïFxÕ¼¬xAâ‚ÞÿŒÀþ0×B¯º¸Î²1¿R V·E;,'#†‡IÔw`1 IHá¢l€/TÃ5I€^€6Øńè'…°¦Å*àVé>¸<—èÓ ;§€©€ºPÒ -Í݂¢•— óUÕ°ºÕÀL-”
+ñÆSWè·¦Ö¯¾å‰¾¥¶æ]èX Û@›æñ}µ¸ p☢:¥\¦”QÊ:eR]K®…\ÞÙ®”5¶¶530Ú3¤³AÚ姐ɪ¶JHKÞ[Š„
+¬ãˆÛZ‡—³ŽÓCbúòLºƒÛ\-øþˆ‡¶è.z´µ€œ·­eºjšä#Wzž‡}0ݤ­¨¢­hRl•‹XH-@%ÀßÙjødÄiÑI…žZܼ à;7‘XùoÓõy.Þ ›¾óFb1ÁgƒØ
+I6Œçu:>“l§ôþ¾í.½ÈY‡é)‡zy^>·p8«Øg^ ˆZÃ:LOyáYÀ®†u|“°µš£#E¸à5¨Šu|“RÉё"\˜Ê»\xH(ô´<0î¬#@‚•£È+¡±,(a@…>,*CÛ8Œ€r€Š’q¦ú!N‹O(žf0ãÎ:æbiP„Cù®S§,§›ÎaىYu1äYbY`Î÷tüœÜ4Ø8Fb’#p²£#MÆã6äDº³.†LC@¢áAû9âx·!l°yÈ:¼IØÄþ~¶|3·!¼Ã«`Þ$¬æXDQe?·!ðÜÄʱšf…ž€V™qgµMH¬dæêµé˜ } Ôb×ŽO ù*Òö£|£§¨4…ž€²”ÎZ„Ø-\" ë‹?tžM7e„#±˜,×Ù» –uwèDŒ÷NÅÞÏ9†o4=‹(‘´Üj@b©‘*I•¾ïBZ-ú®cז4 ±d*éÜI‹pxÁY ¾kæ·!w@à 
+ün_žÖ/…€üø%µ‘R÷8pvÀU`!³€@‘ˆ@q2˜gírg†©¾+Ôtœøuž¿ä*æè̛½nf(€Éß¿~/!éÄ:[ö·09O0[$×;à«:ŽŽ4ù†Û; ¸ëð&¹C+8:҄.ÖáMBÀ*ö ðlá&[ËY‡7 Ú;ª¯ä ·!ü™ßÀ:¼i^‚
+ŽŽ4áp–ÏõZ†x~g Ð Ž4î¬#À÷6«`ýú{úx¬¢»\\ŠÄbBÎ#†Œ1ÓËÂt:ËܼZŠ•°êv…ž€NµqgM$–D£ÚTØH7µ«XŒª³ÄÙ#†Æv:MjOó
+,š‘˜ä¬éËZ€Ãàÿâk»¾©8°µ/kxÍjcÞ$$a×Iè­¢áê€x,Dz@A”qg Ð,0ÉsÞB²À…%H,f–ÒÑ,à󝀀³GùR>G+Qi
+=e;(µóX%º¾øCçùÑtSF8‹‰¹…Šì]˺;t¢Æó¤Ø8Fb’#ù£#MŽ=ÿp|ŸuøÿÿbˆÃ%èâø‚w@<ûñŸ-rc ›„€“†ï͟#²@ä´K9ˆGžá AO€ªÄ¸³Ž€ÛXê,DóóÔ|ºIšÄb
+Đ3vbñÏ °âí¡ærl#1ÉØؗw‡#àø‹
+;*X‡7 {þWYà؛Tu {ëð&! ñ1GGšàã¶ÝžTuäØTìù*2\=ê»Æud£Y¹ÒÕYag è&6/¦H†ê68"–ìzÆ>ƒ¢Ï˘mÁ÷Gœ–bÅP!Z -Ä^é"º>ÏÃÆ>˜nJõCb1k/#†,[¬òþùc.Eïïle–BÉêZ©R(þC~•GEy]ñ©hM“¶IlÕ¸51ë:²Ìƀ3Ì°­QL]pA;E¡®Ä-b¬{Ý÷ŠF=Dq7qW¾™ùEweäë½À˜ãÌ»úñÅ99mï9üøλË{ï7ï½{¯ƒ€rƵ­!àV)ËNܶKƒöä*²F¿]BÍ2˃ÐÜ(Ô¬z'›oóùÍHsp»ØÕ¸†€ø‹D¬kqÔ,Ó¨fèÜTÊeUm\UPÝ`¬…M€ „‘uÀŠsNÃj ¸™äjSÝïοNÄ*œWEh’
+ƒæÙè¼0‡dtWšùY‚šý Åyà²Ç<mA堇ð9â
+À7©Kq³É+ί%ä-„¯¼e7–ÜžPü5”ó'Û?ÏÉ菅ڢ-;朙„Ö±Ö±å€Ñp¾có –á|sÑïŸè·j+À.œåü €ÜáO#ˇbÁƒuówg6üphÀÑÇñë²N€e&.7ô4Ê.UCðˆÅe
+Ã÷$úÀ·8ÏÖoÒÆD”WŸ ¯ð,L~€L"&ŽYYÈÙQ\ß$<àÜ(€[ø–÷@¿pü¥¢0MÅÆbé!€öâÞw"]›rþªÎbàë>n¨òój?,t†d
+kÔ\©mú{M Á·“Æ`è(Ó‚¼eZc7µÌ+X§þmû?o¯à âã6jUçŽzo·\«ÐzuòQèz´üƒ&HÞX­1x¾£ö3øȼuY'½Qç¡ÔÿÅ·~S£AûþÃü5-Þ Õ+;¼oðS¨¿›Â™ùïõœ…?ìfáÏyäy³öß<υ-åÍÜà©fnÊÞÄ-‹ëû·cœ™ãRF™9ÓOÃ͜ù§gNëžÆ™w7;b²ð¡ëL<ß=ÑÌ[~má-±}!Öâ0ÞbÚÂ[¸#!,Üٞ©ày
+BŒ>Þ£S8Î2|sº‰»€3eŒϙ3föƒå¬0r<¿Ccæù£ž©¼å¼r,Ǹ5ÜÞg,gÜB ÇÍYhNçV'š8Ó¦©+¹‰'Çïˆà8~o ìê„æ„™çTÉfÞ°Æì½÷‹Y<oaᦆ]­ì9ù[z´.þ/}ºáyŒ·ª,­H'á,.r V5Ù¹xñŠ>Ì1D°]†¯üM¸í«¸%¬Öìé/afoô›‹9ÝT„kA¿üL¼Žéa6Üüççá*îæ¾4Y6€H@²—‰¤\ÉÃåã,²PŒ{-OC¿3hÍáj×`¸žpçg¸…Œîc*~Š™Ò~~™§ñ‘›YàâE´¹†ë.D›GÕy1Ɠ¬FppÔW\ãra Qñ
+DÕ&¬‹]kèN¦ÁPöx†Nå=˜­J¡²“02…PœjFeÐlúxyPµ‹«|Hg ÉW`g…DG–l«{ˆ |,:¼åCú½L@’óEû%²ANë&7»-:|iýk¤N2ÓÄ?Âo Y D–/:¼µA©›=Ft˜WeùÖI Y@^ÿ ՎÝqn`”ßs5ˆXTJIJ“”ŽI¥TdRD=E•s¨,{ap· KÓFkS-ñ'ä,pZ1ÿÅðD¬ìñìñ+C½f²U§c‰XB•k²ºh Í8ŽM@|d›žÓ '³sæ  8ËŶ4¤:™œ}BIJ]’5uåa‚´"j]B&õlݝäEhÎ=d~r’‡ø,ðš7 ,ø©è0¯Êò·Ù HÈCæ‹ï¢ßæ#(! (ë‰_€[•+ё%7,Þ-ċ¯CÞ,[ê^ j<§¬ <–qN
+6»ØÖ°è*ëÆBöx~—±«Ù*~KX“A(ò‚4„æ»+lV$C¶í#œö;×}îw±­% ™ÊÝ’Ùã÷“6b«ò¨u ?R·¶h°‚Ð$° Ø·c„ü 5‹¸' <èȒurZG\Á¿»):¼[˜˜/ё%ÐÊÄ¿Ân!`$Ý_Ô]$dÎ1
+{B^K€sã VfˆÏBo–rZGêU,:üë)æUYõH¢#K$\aa}ƒüf‡Ãg¡~E{ æåž&€!{¦¯XÎÑøŠ7s°sʌ¸: oÀƒ>v¡Ü_~Ðo/À?¬œphÀ¥ð*xòÁ¥çýðÈELÈíaÔ7ýæ-X;Éá—p/~¤Ê`¼«}±ŠÞˆ¹xûz€ÝÿHYpº¹`$|eá†î‡X¡"sÆçi‚:'f|ÍI؂œœpÀ?(8²U¾Íú¢
+»~E„~ÐiÀA@ÖtÛZRi0³?{übÿ!¿Êƒ¢:“øĪ­Ä½²Vü#5U»«¥…QdE…ˆÉ"/Tb\u9D!*Äf=¨T61Q‰B´Ö”Ñu³dÕĀ"bHV`¹æ„áîCŽf¸ÞvàŒÎ×Å<}2©Lÿñ«oº_wï7ïëî/”mJõ%bq_!ؖÉ&`Û´)÷©<&òTŽÀ!Akÿ.`7µÖìèO…€êÇtd
+ÿà`×jvô§B@¬…»€ŸK»ÙÑ»F—^·G˜uƒ49ç3Ց¿O¦ÆWé£ÿMÏ´W
+‚èÞ0&àWõ||Ùr±íÉc<$žFœX>áãa/÷ð‰.<1ÝOã!1&àä² ÷zֆê›íÜã]À”² ˆ‰.Pä8sÞN¶)q‹ ¸InEp®ß³=¼lžÿe¢Œ'gTÝ*(çÚ±ºmJ€„œˆ¦®)¸N4ˆV)[¥›:5m•A€˜¨4²\[~G`dëy£|?‰#À¯r±oÖ?þ"havüæ€÷Ö}<n’¤Ä zâxàÿsó/C(§÷֑¶¬±›§â5‡˜!kŒjÊ©‰ pš’"•tö*`9 ‹ŽNÒK9Lü££°
+ÿ FüÔÛkzCCÇFáþ*ÎÝg¯EÃ%à7¢@2ô£p)*º4`QjÇQ[?
+”À¸¨SÂÓ\NΕýJ‰<ð¶´H]ƒ~µHE=^YZÐO?
+_~½°T KÎm՘  ìPuJ¤2›œ—Ø&»â–@=ì³ÇÏze.7v
+ˆg´'ž5 bF¯ð‚pX€ûÄC“w‘ŠWxÁ x›¬u)žFGÇ ‰ÿ6(‘ü¾À‰eÌ°6ƒÛßzG¦¨4† (ÿdtmJ@˜˜ˆ¥|‡­/Ùõ§Çئ̃D,.šê59'<C Š糞‡wÜ9g}2aã
+ëJ$ klÚ6% [MÄÒd±õÝçRҚ¨}q2ê£i(¸¼Ô x@@1p秽kká.'ô]à꫆µ9£ð,ª©²EpÞg}gO"Wø°v
+¯ð‚® ˆ±ð$ÀQį
+gôÁ2« ÿ›œSjñ*Ñ&ÐîóÎ{ +ƒ{Å ë˃¢4œ…~Ùj€|¬*rü²«Ð¥;ƒ& `0jäȽ^XÊ°ò)4¹é™g¿KO«Wt¡® ¸
+íCºÂ¿¥Ä\ˆÿ -
+@ù@küÛáø²ÇpC4Døùÿ%û úÅ¥\ÄT×?È<P¶©÷º†véÈ¢³Î%|‹úÎW_âkâ3ßx‡ÕÜp¾v0²yÛçYÜØןâ¿|"w‡À
+Ä6[6¿Ÿ Q&K,Ý"íù]†—K}–Í4}¡aÚr•0HèhîY„AâÆ֋ç.ØÉ6%¬§²$†¤ÊÅõ¶ÞkþÌgnR]]IŽrz-¡¾gm1[¯‘û$”³M%T–rjÚèTQ.
+PÜ(¯¨/h“c@<Ѓ2H0¢„e>]Þ ‚qÊqªÄ¿BU‹~XomÐ  _!>-Ãbø@M@K#À}ì#m©X:qOZ)ú>ðóDÎJÐE…ï҈ Ôúê¿d
+`ã€0L²·³xžX­îÎÚ¢Vw•x4¨ÕÍÿ§xŒY£Â0<‰Þå.ÜáÞÎÌîìÌíÌí!) ó ¬‚Fì‚J0ÁF ƒ¨ ÄpX±‘ B
+Q ƒ•¢±µHÄÁ‚!7ß÷íæ¸6oñÏ;±IH§?æèg_Ò­GûK÷ «· üç;àý·ž÷¸9O@?.‘§™?w§6ñÜ;ùì Ââú½œò‡sâë™Òµ~¶¦ÿ"ì^øE€×¶ÉûùŸè}o<Üüà}Þ{ P,>@Ü|•VΗ®õSˆ´5ñ›pïä÷iú}ý+«èáî³àésêÃÊ2x\[*ÙÚBߟ.#ä_Î"ÐöäÒÞäWDœz ”_\.Ëyr£@x3WÂÇ%WY8 M&™0.fÜڄY*ŽIMT«u5?TïD\ §’ëÀpÑW<–±â‰7ª.…1ƒ\¦vÜDÖ±amí`%uéë8Õd.•ú˜k QÕZÈFœp%ä…Œ¸âZpÓHBéêœÇÙPCèn½µíáQ™º€)k‹;º¬ë$с S­Ñ‘TŠVÓ
+37 0 obj<</Length 4330/Filter/FlateDecode>>stream
+(ÚYìÛ£@bŽˆ; wpB)Ïbb@à (i}¦ï ]+2ÐW·ã áæhPp„¡(dç–‚#ÄÚóÑèîtÈtDÂ.à N¼¯<Æ—îOãÇì®[ÃMøÃø1ÃFzûú΢žÁÑl·Žé†Qhè ´ë΁7{Âü`é©€wÈc³Ç²’¢™€c'¾
+ÜÅ12N»_ŒECˆŽ1ªáPÒÛèÛ(œY%› [š
+’ì‚ôiúáÝåÙ,4*D—¼|uñæl&e¬bLç?]ίß]]v­³½š¹äêèhH´PÿzN¢w½ÓZîzž’½”úú¥PG8šÎR±8Žšn5/˜|Pÿ-Ì ;'Á(F¢™BAÓÆÂI+-#ˆÇ$‡n¨àˑ†˜næ“Ë`Pdp¨ž^Vl^a‚Z­vYíYŽQhW¦EñÈVͧl´û&u±“pÁ |a@ÑôKñ¢Ò
+9
+l~·-
+úC”œ”@?¢æÔ¡ÿvWÊõó„ãHIõ¤ Ù*úH:Å¡ñ§#Ù÷l ‰]>Ö¾œ@Ǔ:ƣʊ¿‰ñPŒ½N¥€j:ÿ×wM[‚
+ï6ÜBòa՞Îw5A{,ÖLí
+ÆEµÉW³"»'+û¥­QÿMeÂW9œˆ —>¸Ndn«Ø·ß³<ͧÛï+{àöÝrિ£Q+áƒ;¢Õ€ë+€šÆ›GŸ-2ö™óò<ižU0¥E-JÍù²ùæž\ïcšo~™z…ÒtŸÍÞWl~›ogˬ úäfåå¬a›*«Ùm¾¹eùÝ6[§”ï¶bôN—I„¢9¡ñnà‚pϱ¡ ,o¬?«z¨8
+m‘@+ÉK–îÙ.¯©•dëMƪ¶Dýy^Qœ+ÀÛFi¤tµž†«3|ºlôÜi1dH5ª“è¡zZËÁê)}×(8ÒM8¼ì®‚XA©:%LÐ’·°6]Ááj5[[xË}ňvö@s°˜Rmþ‡ý#[=®ŠŒÝê=f•n\Qü;«`øwÏß ãw,¹È€­âXr{šO#Ag|$¹ûnµDÐ 0Ín'Ñ#Âi-GOi„¡¡‡aKÙ ¨+¦H0A \§—âí€0Ìqb’|›± ±_d:ûþk͂pìU¼™"ÿßí„À­GåDŒjÇåi>QñFõÝj…]1ZYŸNê8:UFØûÚ¨ã+‰›æ™$$*ŒÂ°Nß_-Ý;)’üú;é}U׳êf¶|,WŽpì—éÕ6+g‹]š—¿œ †¼!IJ‰¸÷©&µí¡À³¼(*T z…’áuSg«7_>•ÀÙ¬ö ˜¬Ý¾"»O‹|í‚—Õ.C¬V¾®ï9Ôǔ‰? Ñ0˜&öPiŸãéQœìXú·A¤?Œ\? žtnqØÚ@‚AÌeä¿Á¼XrÒÀ›¬Îk<÷ȧÅÇł^}iY!`;¶­êÜÞ«>l·Å#»¯Š}º¡e¾OC §ØQh›Rb¯³û|•=/ÙBŒ”d#ÉæDÉÖ*Ž%›§ù´d댏$[ß­6ÙB‰)ZŽ¼ìZ‰^ºÖrùæ)N¸Ð áþÃ|,·mÑ/è?à(ÌIGÇqœtZG\Ït2=°%³c‰RŠëüW>¤‡þO@€(‘4m§'ÙÒ>p‰·ûö-g–ù§ÂñßQ&ŒÚŔ©°‡É/w×NÙéÈÃýøPԛrŠ àkHçÁ4>úɼí@+2j5½kÂyõ„Yx² ?—³¢‚ý@5ä³IMõ#LIQ£?'š€r‘í·Èñ9íæLQª¶A7Tx8&ß¼®–JwÐ'*æß Y«¢Î7P"R®ºÛ\—Õ¬pÅB¦p©m “f¶'$4á7$ne˜\`š³Q+ä_҄s<Ï8¦Kê³ô&Ä…è±õ6ò$QØ>lí{iiQàC¨OL„-
+T+
+6È#
+y¿Rûã=ªaY®Êåv¹g¢4£Ç<“c²ä€uhÍÿs9Û<Êö‹Ã%ŒýÕ”jüw´@!µñí2)Ô4ʳ¬Q–ó|ûÔöMƒ8¦b_0Ú·‚Vl¥ùŸã,BÃðkӓ¤ºläŸÅ PÍÝ·„©û:ò-芺¦è½’äÓiÑ4¥é»ºÈg2ªne·ú¿g†Ú»{®Ñɲ?·uû9n§\-c³²Y?å/dY,«úEÞmwå¦1·GÔÕÈwÃwRÅ nìi¾)±Géc¸°ý%ìøĎÊYtTmâcT»¥€gí.YâÛ]LHOv г»ØÈÓd§;|xwé¥edß²ßˆACõsb=“2ˆÑ²³ƒxd'<M•ìX;î§ / dx±xtu{÷æâ’
+¬8éè
+°ZÛºÚ®fg –„A{¹3!.wÐݍ<‰»ÝáÃÜõÒÒÜÉoyÚñ€[OëçÄS‡»aL˝ñpÇEÀ‘îŽ;í½Àk°$ˆFW°à.MDîÆÕsQ_NZ gÀë—uÞ4R<$ÛÐkÈuN€~}K¦ù:Ÿ–ðçY‰@„ý•Âf[ôØ60Ç 8÷jáNãº;Ú¶ÓnJ†éHz<æ£ZG8\£4ÙÈÃ6‹p\k@1Å1~¢#x׋K±8£ñÕÒ ÞÝO®ÉõÃë yP^\‘|y<
+ƒ$ôè® èÑf`ƒmiãN£­;z¨-{)ÚðmÈ|ºk"چQš6 t˜¶#€bcáIK[¤LhÖþ¼¹ˆðlîXѓI,ñ…b·˜*‹<ºùc]¡É8GK¾_mŠÖâ<m[¿è¡»ë曱ünóX´Ãxý”¯
+40 0 obj<</Length 7274/Filter/FlateDecode>>stream
+j…ö áùÌ6 “$xb‚MfÆÄåÂÒöBr9[E2ñ‰æCØÄìí÷¾j(6oLnϐH/¥SL‰@€m2³ AT(òÊ["IJ†%†`Þ ˜ÆxKáٌ Óy’/Œ²ÇluðÑ1aàê1°Œ™îœèþùTô©p_®¿[¸×—ïðøG¿ß¹[²¯L
+•3Qªh}ÔW¤‚œ‚‘}¤eþž€eŒÊ ,ÿ·}åÊõyY¡”_¹®hË}_6u¨ç:pÏ<sÁèwQˆœñ}†à²‡=äæÞ±¡]±.´žbh=»Ðz¨é4õ
+!OH"…a ©9ôûC=ïê¼âl©{^nßC*V4»}ӕàôn³¾œA´Q¤ež¿a_Ê­kŽ ¶îKY8°/ªÃ–¬ñ7ñ+ª|·¿˜‘„ŽG'ØÔcvuÁ:·Ï½•.ð¾ÜÁ#³õ.¼²AÑÁóP&£WEpÀîðpÁê¦þÒTyˆaði›½kÙÎíšöñ‚>Î؉?•ôpÄv!EÑ>v}^±¦+ʪ
+4(»þðzEÆǛÊyW·«¥BÄÝæ0<Ôº|ûìkK†¦0 Û¼Ï/¼7óÁÛ¶ü¡¯Ï:·ð§"ŽIAéS6$žÐÂø°è²i¢˜B Ñs
+dI«u¹ÛWåm‰z5„ tº*sÄçn ɤÐù;»>çìùv[†·¬:„ÝJR!µÉ"SȜ©Ýëå ÈömCúvì ¹¶€>"®ÏBvgCmI(ÅRˆDxàãúïï.J&M+ôpgæt}~Áü½©áº #F‘óÝlÖÉœ'¢ ®ÅI¶”äÏOI"´%™àHrqÕtݪ¹5}ó~J2´c·È²Qæ¼'V˜ô7‚¢ƒkÆs¡\Õåï99®Aæ5Å?ÙQڃÕ囿¼ÿëÜà³æk÷Dè‡*–—Ý#Uò¦4„¨»C՗ûjLõŽOåpt±0zj0üڅø~2D±Ä&CŸ@MǨƒâgwWv”²'Õþ(.Ñö%MGóá쭘×ÁÙ)†EyjãîâPjo;R¶Ù×Mˆ¨»ÈjhSv>UYwï\,GtcÁIyfGc Ï¡”Ævê6
+ªUp4î<dûò]g®TëŸj7£ÌdÅQ(:H}ëª&ßзƒŽ
+ùgà!òA(Ǿ²ÌÅÄÆ¡®w=*Òî¤Õ\~|±ÇÃP™
+¥ Qµ¨n46
+Pàíò‡rwؑIßï¨Q7oæʆý*#˜Og­CM J´sÛ`tô£o9:ߗН·î‚¡‹·aöà—§€ë`ìX,9å­k¾ÛzêbJ2¢LúPLýG_î]}jX²ÖÂ.V†4 Â'ùMçêþbªøå.¿sÞ
+úT[ÌøìæqÄñšOüË!CþՅ&CØOwL
+ž
+
+µE)šÃ܌u؇!lس¯ß…™c9… ^غžìøüÝø°˜§ÔP'÷՘9›¼‚ý÷yQö¾ZøÔÍZ=†áÎ^Œ/b*¼vˆÖçÓ¨ÓÐTá‚2¯Ñ쑁[÷ùP¶~¤›Ce3™ÊfÈÆ»‚R„âÙí]Z5ÀÝ
+nöq‰}aB÷ØМ 韴à0ëcy…¨¸ô^PÂZÚò‰Ï‹,7cWqÈw–ï|õiöAoµ0>m”EvOz›0͐ÅBƒ„Nl„/kLò’;t¿)è x÷½ÜD’ÝÑj#ýjcÐ1‹“”ÓZ@[/Õ*•&ØLXÆ~Ôx5îI ¶$=-I«YÉ"):š1ÔÎ4¶$*=&Jilmã¤I7–6)mSšä&
+×éD éI†s–Å‹36<@ÑLÅð;$@&€‘C8Ó¬°€žo(ž-ßǙÁ@%Ÿ«PD7 µÈ.z1Ӑª°›J'
+Y¦6–f=gA‚åÖ²éu*|„LøÙ
+FîX-T=ÅEè(¯
+”4¡+Úp+íH¨<!Ñvyñ—!ãJúø;¡àŽÁ؟g(F=Ì …î£ì/pN(ts‘ÌŽpŽ)¸“P'QKœ
+q0Z!ã)yRñS`¼KC¶UXw~R©È¶cÅ=¥²!Û*¨r7å¥!Û*
+ïß¹Q¥"k•Œ±·Åºå³ý´BjB†‚i¨[#õÙVAÝÆG•Š *WŽ¡nøЧ²}ŠSu_#Û§ n£šîR‘ñ”8© nu˜«È¦
+Ùé²n}º_ëô³cûã†×r%ì†óur]u×o„GßðQ÷Ðj7," ûÄÎX1o÷ÁZál¥’2TCN ùQæAŒ¥Ã¯”þ\ æGn›
+èíœp}ãoÉ££|Öài£G3‚êHø\×՗h‚/§³IFsOÞïùÁY"G!˜uVH-¸òáçï~‰Î‡J¯
+
+ᑯî?‡ýýٚÆó 8ʯwyÿtÿXbn-&–A®ˆÁ'1‡Xiݑ‹È(¤ÎÓ½ªL̶#1觌©c‘
+à–J¼"ÂÉ;¬2².º¦²â¹Ú¿ÙYÌ[cË+ªa­ˆ‹ˆ‡eÍ0ô xAþ»[SÏ¢ Ä šmzZ‘b›!fÊB/S‘æhÏl@]DŽlMlÆu*PòšWn•Ù›š×RòÊÝÌE4f<µ’×€¼6ä7çUœÊ“mGäµ!%¯yuðUDgӀ’2¼l\©:ŸqUÄ1‡
+KIHU„ˆËñ¬cË¡ÈScŒîH‘É–1­÷oGd:_Mb~$ñÌiwöÌQEŠ8D"+4rœqvT+¹(.¨'¤>[—àVBZ°5z.Oº—c£ùâލXG¾ä¥èEÖ2Š©ˆK
+ª}/Ž¢wD¥E1ÆrXE؍RªnýµàŽ­w–Í¡wóµ6„~[z¥ñ/ßI1û—Ý‚`d¥°_,D”&-´3Ê75,*g@O£ö½ѐæD5Ð|œoñ‚A°`ÅÈ'4ê+QàmÁUÀ³ÂgÃÀÇÔø½¸Ò´ëöÝ:™õañ¥~Sƒ3cðaÑoŸý€4Švwp¾ÂËîo;‡î&Uدzet)Bˆ½N:|‘lˆ’yUßO@‡e[Eú'ŠÐ£ÓH—Â@ÌDl}FÚTA(aö)²]d,;KG(ƒi#}
+ýJŽ<ݑ¥ž1Lsª÷±ZD+¢·F$ÉÕp€u|èžå…]!´ƒ¿8µÐ>tÈbgF;|e^…ÁNC;.ã
+Zv2ÚAïwq²SÁ«ÊÛÑNE–»ó놻±j’A¸M
+CpÊ4ÍÒ‚† ¢ŽKÔ'qXlU™^~F. ‚ Pz¥ó
+2ÞÊ΀³,ßr;ʐ°H4žT¤;+@¬ä•Ý\ïÉ¥–v ¦V©ôX©0e‚ÒrOÓe‚3)wH•å?`p¬724“M£¦¿Ï-VÜ
+6
+‚Žç
+Ðx+ëã‚pÂØfú¤ñQn×V!†W;‚™Ë‚`…ɵGÄ2nÁZ‰…¾U„q»{ޑS!¥
+ÿðç^ãG–¨¦Òó§ޗϛáýüòF€Âóx~Ùýzxzx{Äà÷‡Ç㟞ÜYÒo»Ç£°""lŠìïü1>ŠÜ ‰å~wâªd(w¢ +‚&þ|ÔùðÃñÿ*òxû
+6*ëÒ¶3ä€CàÄ|ZñFQˆÒPû'¤ïéðñîiÿþxJ8$Õ#N†þ#r'‹bÆ:Ñ.EŸº‡§ïÞŸÿN8hp«ûZ M¹r½ÁïßඌãƒX~õbÿü
+|-Gcí°r´<4¶Üìþ'ÞÌÞ½-5‚ÿKèÑÏÆÍ!ûõðËëãI‡Ã]+…"¤¿Ú-ebÌhÙÞ½ÿ𼊚2NÑ\ º¦x~ÿ4ݒo*QI~–xIMs_Ui•¥ª BOÐÏï·µœ®JA•3Ž'ӋTDk4¬ ½®ÅϟÞ?ÕÃL.æ\¾JÃãùþ,RH’OÖî11W/.Æîav>Z«Êèû㹎†(Ð…œþOoä-ßÈc»¡ÒIc…Š>ü›ôjÙ­â¢Rö÷fÉƗé÷ô™@²$²!krE,+åÃò9§º«ºç:( ¼¹®šîzu=N™éaÔÇprݼȯ«Õwꉩ'Ö\>©;³õ‡v‚Èž“åè
+ÀùG
+¦@_àz>ß/fT
+l d3ã;~úþ¾<ÇŠ( õdÂĕC5`ÕÀ@5NªæÑí@Íu+1òZ¿X} ˜a؍"f~Þ\Œ“¹;Èæ:q
+֞ÁûqwȄвéqpƁD\eèÜ»œINÚ~ý,§s&9Üir™åtÎ,>
+ƒ$4°˜¤Éàä¦Í$`B цŽFã0͆D'`Wš$m:ŒÓ­0 ÝÊ3?Ä7 8‡r'/  ˜Ÿ@U9!‡#ޞBS
+ûQ-í@»WlGªBiæš=VÀqÍÞo&ÀHÓ`œnC`6žy±+4üº}¡uŽ•øë\høõûBC¯s¡aø¹Ð:=šèe¤Œ6ÆéV¨µòÌõMæÀÆùšºo2:‡–Ë´ÚÐÙ٘ŒFk ê[ãг¹™Èfó3nÏ&ÓÈN”6­T‚ѦÃ8Ý
+èêò·St¿·.?-‡ÇϯürsH÷~É)JÃåPóß1ÊØd à
+43 0 obj<</Length 3945/Filter/FlateDecode>>stream
+H‰´WÛnÛHýýC=ÊAÔaß»؇Äö$ÎÚq&Vœ]8ÁB‘i‹Š”EÚç?÷öT“’©Ä² ̹›Ýu=uºJÒõèÅë3I×Í(#¥ˆ1Ðrðw9º݌$4Ò‘Fxl»Ìˆ@ï=6×ùÎåOT¥µ™&'ŽEŇø´)Ööj:zñ›$IÓ+žÈ(¥ÿM´ÐÁZ²^
+Â+£6–ek²ìßÉ{)¥r,eòåpŠô_&X¢Ef€-¬ ¤€ˆ 9³W£ßì„%ÍÙMx6|pH¤06–€Žë’×6rÐ¥ÓZ
+—©t^[¬wï3ƒ‡÷
+àCº5Kì×[‰Hhøq½•ð:@t+qWkˆ3D¼—°Æ $Fè8r€d²™¿Gv!3,`÷zDÌÜ£@™)¡õ
+«âgŠ-cN‡‰2ÇòZÈ+’QóúvUâµ ùl5›DmÝõ:Ÿ·4« ‚šEqÕR}ŧÏØ° LÂî!
+Gõê¶J_›ÞÆ>Ië‡a(7‘ƒ°ÈYÙÔê²¾ƒ­e}?¹Zç7·y5 ª.š¼‹ß¬üß|£Åíò “ øRÙ5Í./‹¶¸ËŸ’&:Dþ¼Œö%lã"0*zÆæøŒ3s–¯fh êõOQ­¹À7°v
+¥Ô;ú-°S’›(ê"Ú¤4ÌëåªnŠ¶?´º-{\w¡ÕuŽVétý„œüÏv=ۈj‹%'¤¨b€‡3ÖÖQIÊu^åÜäPçMì¼1x<£†;ܽ9û×»ýgÑ5y.þÜ%@qƬG:Xۉ9BŒòÎ Åô@“2ëp+è¨Møgt ¼/V tfë„÷‰DƒcA¢Ã‚L]º‚¤Ó³ƒÆź®Šo³-h˺i&õÕ$…øóøøôìó^—…A!©Øáo º®ÏEq½ â
+âþœ¾í£ md?ï1ùwupV>[7Ô1Ÿ~œ
+zÉ 
+À̟˜qÍYKÙWðev ë]çÜ&o™¦g„®üa@eÌÄÀ.¯'OñÐԕ Š¹ùú7å…û›ù†γ»‚‰ã
+YšCôÝõOoŽ¦‡ôx™Èè5²ñîþ«ݓ¡ºø’ÑåH)+´ÇÄ
+ž+DÞ¢”;dÍÐ@ïgƒMž•Ø1"ò5ÖãÓÆî¥Þ NÚY€¡çi¶}?z}Ä
+ý!60Ë`˜p&™ˆ‡Ò`ˆ°’ÍQ0-hWT
+ièÄC’„˜[ºËÚbÚÙ½õ”×£b-ðª,æÈ_ôûb|ôî=èñüôxϛñtÏÚñËׇ{_¦oÙw Jð;oA"–Ûà.eµì}ãY6ì´= K@9B&ß,ðŠsÛ3å·’o[¥¦ÃÑ£R ,""¬ts•÷8`
+]_«
+7gÊn= !\T— š‡ÿ÷Æ'Gï~‚!%‘;°13©äà(Ø*Üرl$®&Û#æI¸ºÈð¨…Yqƒ ‰Z
+'ÚÿéÞ4ÜìÒ
+?I”æCΙ33È>LÐc 1k!a®<ãi¡œÖ’fü!6n\v<†ėj8þp/½XŽ¾ôrqŽ.¥ƒä=cúHå
+(œá.Òû¸Ð×1ôµöÊà¿!äF#$v@«0¬†™Ž¾!ÿÐí]M¼ðý~ò~:k2Ô:} br|jÂħˆ.–u65ŒWaœi‹\ªÃdéñÁ;d!t¹óx×j^Ñp6‹ÄǁèöcùŠQ'55(Ø,Hw´\,êцG=ÃŽŠQç¨õÒi1꣞Ÿæ¢—p1ê.D½ˆ Qç¸<ÍóX“¬**™ô,Қ‚í£Ôú·v3^Û =ë&ïV4iҒfŽ´l+ÔP3ùmûŒ¿*ƒ='\PxÍ¡êlHc¥nvÚËI…/*}約z@ß9©H߈Gâ1…úM0hF6¼F/Pº$
+ðLJšFº}0aˆmTW'ŸI)Y#
+44 0 obj<</Subtype/Image/Length 1612/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 197 0 R/Width 697/Height 324/Type/XObject>>stream
+H‰ì×ÑVWDQÍÿÿt²œ%s™IPeö~H®#ÚÔyH.àï°¥ùéÒBI»‡Pi¡¤ÝC¨´PÒî!T\(q)®“¸ƒˆ×IÜADŠë$î "Åuw‘â:‰;ˆD™žDœÀJO"N`%''°’À“ˆXIàIÄ ¬$ð$âVxq+ <‰8•žDœÀJO"N`%''°’À“ˆXIàIÄI¬$ñ&²D6yQ"‰<Š(‘DE”ÈF""Jd#‘G%²‘È£ˆÙHäQD‰l$ò(¢D6yQ"‰<Š(‘ìµ=éA»È)τ»MԋœrînŒÛõ«„û„.¹{–pù#tIᲺ¤pY ]òËpß3½÷]rï¬U¯“íB‡.k¡C
+—¥Ô…ËRꎯ×ÿ¥•KÝO¸,¥î÷âpý'C»Ôý„ËRê~Âe)v¿Ã¶Ë[zÿ=¶Ëê±}þE­»ŸpY‰ÝïÕáæþÉ9"v>á²;ŸpY‰O¸¬ÄÎw{Øöö7á<ßÍa›pùŸÜõnÃÝKO¸¿RîzÂe!w=Ა»Þvû+áò.w½ÏÃýPæpw¾@¸ír×{i¸o¿ TðzÛÍ/„Ë»àõ^nòŸ¯wî‘…û[·Ý¾_nðà×ØNøé›Wnï|E¸ÛÁŸÚ·üùë¼0ÜãßN.•„K¥„{4Háržp©tWÜ©x…Ë7»/îÔC¸|¯g‡ûï_…Ëë=?ÜÃ=
+—ó„K§íÙáN¾3œõìpGßÎ.•¶Gz.?E¸T.•žî¸Cáò€k¸÷Ï2Ýû½ïÉw†Ó„K¥íڏpi"\: —JÂ¥šp©$\* —JÛvó8’©pùiwáž|ÿ†ãážp©$\* —J«(/ƒÇño8þ
+47 0 obj<</Length 4598/Filter/FlateDecode>>stream
+H‰´WérÇ~¼ÃüSÆhîã§DI¶“R ”â”äJ­€%¹%ÓO™GÊ×3{)vªÌbØÞî¯ïîÉ®'O¾Kv}˜æ£ä1¶ý^O®&¿N$kØDsÇ|0܃ì„áÍ¼÷ îëá²mzV\hæ¤[TÄD/ M‘¶g‹É“—’I¶¸³ŒléSs¬eFp¥´aÖBaPš-6“'çǖ&¸Ô^YúVÒúômMd‡åv2\Ø%`Ÿ'Ӌ§?ycÝÙâ—I†ôd—Ž¹o‚!$¯²ü»é¼Ù^¯ëÙùMµÝÖkv±Ûî–7û3éy˜î65{½Í—éÙOëz{öóâû ŒñNöx>™>o·ëêž}nŽ7ìÕöX_ï«c½b/^¼ùñõõä¥ÊQÜÀ8Áèf9¯<³{eTg˜@@“aRÍ¤RŽÛé¿ÿ’¿äʋ=1>rɬâ
+Caìï¶H­ñ±=®ïÙî
+I¾ñöîÈ>ßÔô>ç?pñ7B
+*#Qn¶Ù­jξRdhz¡8Ÿ@pÌ`—‹ù9Ùóæéì݁>€<T8Á(ñÝïl¹¿? †;ŒœÞé¡®ÙËæún_˜ùO|Æsè¾ÒÀÑsCÈR\Ãèܒ’9=ÏzØëòY¯ÿ@KZ£h¾¨Ü’B붞h"vÍÙwQëÛõè]¤à@òïëMëåI
+]Îüz·üˆ áˆöá> •#Ÿ³²;ñ#…_ʶ€Aãá$À¬Mjkµo>¡
+ Ï]ïIªsU»Ünh±øe«#;ÿáï¯.9{ Ô~zä—T8ߔ9rËŽ´Ëcrq€Îõ™1PÏIAšNëºúTŸÔÇO/Ÿ±»m S¯þgmœT”÷úd¸÷çã‹z³ÛßcöÍ|zñþì‹e¡q {4ª…T±–²±/ŒU‹½Éؤ‰*9¶¼©ö¬Þ³jµ©*K¶­}ƒhßîPi
+ŒÞãûv·](*U1‚.$´wÓ«æ7 …;v[†ÿ
+ɀ<wO7;ü”áOmv£­6² :Ð4ì›áŽÐt§ ˘v•‹ØÊíïnûʾÙPëûÝ9Fn@m¥†ÖIĖ³ïvÊ4ڋ$Ž’Ž˜íÁc[àÒ¤0Ò鈯PÚÐ)Âv×Êtð;Ÿñà7?¿„Æï_@³†}f†]°w? ¶ÂÂâMzÌ œŽ78GÜ5UOY±d,Q .z˜·
+¤bº`¡üpk+p×.!(dʖ(½Â­LY¢ôR
+¸@©%]ˆ€[ªÔ¡@ð8¬{"`mËX"@Ä¢hLëå
+„h灂xÒ®.Pz4âY$ôök
+§—%Ê è6X¤ôRFQ¡½ŒQ–{ŒÏer‚‡àJ”A
+¦;f~JË)e†‚fh9cӘ}–R}nk!MW$‰8iÛV(RöÔa›D x
+¹) <€ ®PŽ)b(àßÓ3»+éV
+–wRÓSuZ¬b‘ƒ”âÒdƒ3›‚šu¿ùqc£ç̨ÁÁ•E,âë3‚%ÑTÑZÌ܋.e„ØÝ pLâ/t(d֝$wdJ0zæ>*¬ñNöšN&šÒ=‡G³#Ç._.9rdžŸ@Q')݌ Û9fñ+QÀ¯Ñ
+—Æz§¹ËѲ„[½
+b•²VZ'žÜÀ=&šLð1­Ô|ÇGr £lÐjYÝídÁØß°º£ö•kÁk O3ÐýɁ#ª^be82¼eóæ è›IÏa‚r«5&²Â9Ø8¯ÑüÊ­ êeM€3 žfcɚjîÉU2\ 6zuŒ•û?pà24UE’·Üî8Pâ“4ÿµ9lúdÎQ¹‘ñiÀVlA>ú¸‘¬4’£àwP_̱Öôe±sE?2’õcÍÊâ¯ký˜´¾ÖŒdýX³zúÁ»‘©õ##Y?²ýÉú± ­~X…jýÀWºt¬ú³¬š¤ÁÀ,«*mXõatZùÿ—„VÄ…ø/BðR/®’½‘
+¾Ê>ó± 1Q~¦eȒz“«5tA>–za]ÉÒ*°I˜Y}¥ÍbŒ9Òæî knSÇ5UÅýO³©o4C·<ÞϏ¥Øç®´~6IáÜh-Pb)L TÙRHìGmhÂ!“§’IëïLó\1 ˜> 0 <*¶*Še£j:H!9žB} TÏ9ÙC
+ CˆÍsÅ@ñ[ï:Háà“í‰\;hP§ÙÓ"™d Ÿ†b ”yö$£;H!™ K-Pqœ“ ²E
+ɱ°-À빁›Àªç;ˆ‚m;¤R흸t)›çÁt·s(rÉ$K«rX€ŠÈvB²\±*Žå–:H!y®ÝýÏëÐA
+âl;HayÅóH)¬e…>tÂbÉãŽß"…•"z±î!™E,qÔE2‹Ð5ÙRX¸vŤ°Ð7–“_!…Ŷ;v‘ÂBç ¤{Hay£ÔA
++ðÜazHa±9ä1 E
+ §šŽN>#™ex¤9:ùŒd–Ác0²tÂÂÔ@ä{HažµºHa¡?§zHa!3¹Í7@áÀ3¤D=¤àl腃îìRÉ$¶ä*t‘̲
+ÆÛØRX´®’ŒüiЩ‡–å*¡RX˜â´2=¤°<W‰ï!…åa¼î*#…¹JºHaEdœ=$³œâ*¡’Y£
+>dðaþÅ£ëÅaCðý›ÆÈ$^çëáAž‘ f𚰠Ý‹ä$‘þ´¾6gŸh¸{Ü@"êßzøVô
+50 0 obj<</Length 3421/Filter/FlateDecode>>stream
+H‰´WÛnÇý‚ù‡~ °|Øa_ªoIY$ÒÑ®'²(4uҊEBþ>§j.ݳӄ` ñƒ©9[U]]—SÕF}èNÚõá¾Ó*fÓçœÔmõïC÷¾û£3ê“ê\TLÔGÀASŸÔ6ÆðëÍBùoêN¾m¯
+ÆB,[âpšåÓï»Ó'Fµá­É½Uò¿­ë]ò^ùhúƒWÁ;ŽYío»Ó³û ®ï•î‹Öó_k|”¿ž²º¿¾ë¶º×ZÃð5 ï¿w›—~äÃÉþs''h51êCRÈ*d\)Ã&ì`âÍf÷éîÃáf{öñÝÝÝÍA½ür÷åúã×û´ùr{£®î¶»kùŽ›››»“·ûçU 0µ…‰ónsþéþ߇wÿQß?}û¨žÝ}»ùðõÝ·›ßÕÅÅϯ®^²_§OìŠÔüӊÿ‡X;Gʧ>Z²“gaÏþùùïdkŒ±½Ù'w¹Ø#ý:„ ž¸^ªÀõž’²¨ˆä8³ï»¿"ØRKŽ³+õ‚Úˆ) ‘=ùŒºH´Aéø>áûÀß>“
+8Ëɷ郶"ï<¾—ú\ˆ)âöŇt;¶8~Ï‘дþž-¢xJt¶¸´Ç' ˆ5">Z¸íPD•ÅP:A”¤øÌ¿g¾‚&6°Tƒ©Ï:ƒFÛÞ¹*
+Emef*Ì'-|?!ΰ=ª”Øeœ0
+Åb^ótúqN0J)þÀáú<Þ«¶Ø‹2Êö“–§ËîÀ¹tUZ-^‡uêù•ڔ¬zý–½ØOõM™DªÔ÷„p}£r2Ë,¥Á¨Gf5ž8ÌÈ<Ï
+#4€¢ÃCݧR”&~Y#•–9Ê֌ÌZ.ñÌ -„µ\„sìZˆ¼_@3€‘À|¶ÃOKs)gÉ»¬-ÂòM©…-°yXäjFŠžOüØl ¬%|âÀ06Ø2kÙÌÏÐ&2Ÿ.»¤N-¤h…a¥n E+à†ZHÑ"îÓBŠá®‰-Ë][HѲ¶OÔDŠïÆD-¤há¡C¡‰ÌZ&µÉÌ:?-‚<E%ø“×HQ
+Ü#M¤ha&ÓDï‚©C )Zèk“â©%ÜÍÝ,{ƒq\MiF3‚¹!r†QqkÄkL)ãå·h!•˜ÑÄRiá7×Ï©´xÄËs-‹N"æ´R´¬÷ Ri¡³3ì
+©´0ɜm!•˜fˆü1RiQÄó³…TZ`¾ S©´ðÕ¼H­J‹"®¢ã°u~¦­¢„ýk²o •öG³ˆû„TZwp¹TZdÀîTZ˜™Ú¶J #{Ý
+¤hñÔä'à)Z<}­k!µ^þ¿¬—ÍnÔ0…Ÿ ïàe+ͤñ¿½¥P`Ñ"”´©›ªŽµƒ@ˆ·çÜ$þ™É]²ªòÕǎ'××çH†T*uzN©Tðáv ©T†ÎIdH¥‚q5j *£S¢R‰<RÁÑ×J¤R:%©T5CŠÊv§§$‘¢²†Ö/A¥Q¡5G=-‘IDy‹üq´©TðÙÇó¤~®£†Å·Ô½çžŸH¹`ß[çluw0‘Iy9ßAýŠ!E…oãpC0$«¨ÇvÁq$«v•çHQÁ/J³Kâñw¬jùL10æ†ÖŽ”•‘ Œc@^7õ*†d‘>ڍ>Ú õk5GŠ‚ª>:ŽdUòß É*ƒ´°S†՜*RTH¼fIQÍi‰!Eá²TàHVY$m4G ¢NI'®i‰!E¥ÃÉ<’îr88º%"|Èäu"ús"/…À›+'+gãZeF³öLe´Ð8=yŠVI"²²6d¢t‡w`HÁ ›¸|Fv³;@ÒDg4ZÉnØJǬ옸pF5úCHåRRB:áHށ†£‘Ús$íAãçt!0 hðkZŒ$¢Ükêi3Èt^T5²öT± HP“ÒKŽ$‘¥BdAÖXtm‹<,Jž@ßühÎ„GWó¨‡{"ˆµ÷hÊâ°i:á#Õy@åûñ™N±pRaêƒÆ´ ý²×¢¹xß+±ýÙXÛÜ>ÎbvJ­ð~
+53 0 obj<</Length 4375/Filter/FlateDecode>>stream
+üÍ©ƒ·IŽtÐy3œ»Ù}¼¿;ÜnÏ>¼»¿¿=ˆWŸï?ß|ør¢£L›Ïý­¸¾ßînø{ÜÜÞޟü¶ÑÁ˜,.#öϺͳÿ9¼ûS|ûøõƒ¸¼ÿz{÷åÝ×ÛßÅùùϯ¯_‘Q§fðB’Æ)AŸ0+D…O2g&Ãʆiw²ÕÆé7ÿú¿ü㫜ïø»ÎÅ,µðF„7B§0N:Ë!}ßý~æ$²VNOÉa³ðQfMá5r'j‚´šrŠE0Òs’y•d@Pp$eÇ@#ƒÒÐk'8AIŸ ‹"Ù#@«µŒ^± ¡ƒž$UŠ“è1Zº\‹5È"8ióÁðÎò}”a± k¼Ì>×b3Ž×^Ã+–¢C À"›tmí(£Ü–ødÉ|@É KªGˆoŽ4vi.Ûڑ}tM‡\B&֎th!Vb2&±µP‰E¹Eæ˜ñРW8¾±R¬§ødfKpÄ>)ŠIË
+|“}4"£PÔ{bÈeOŒÉ0ž¸Æ³'¼b5“ùûlNx[µnˆQ ŒZÙÏø™³¸ûÿ›¦¯«1ã½LÑa}€±ˆ¯ñAØd!)O=…[ýÙî»­~wvu/Ð.?Ã߄¯Ä[T7†
+ý÷›¿w8Œ,Mh^(L”c?#zu&ì:Ry«ÀÕÛ@7¢´DW28v¨‡Žei‘/-úA0†1j}gÑÀSŽ|,xJ΂$i‰^ž"IJüÔ½å8Q!Èܜ¥\DO¸SF‹qœð#(Ës`¤=uèþÝ9“ ÙDÆ9¤©AÕñ1Üí0#>Gé’&¤=D¶ÑÅZŽÓˆd&AˆŸÄ½€8´+Ò_””J£»êS$i-â¸@êÑWõˆ±
+§9Z6༩9biByúðN9Ÿe: ­ÁŒr’ÔªæLHáPfxWb«§ê§¼Íˆ$ÝÌp´
+¹¿]í5 ͍¹x­ “×–§IIªm²‘|QÛTÉ¦å)’Ä;X¶ Ó°~ðÕhU
+, g»~©²x}¥íÆËÈRéÓ $ƒ`;mdòp5„¾Ý¼¹þeâýfûfwÁkGkŠÅäÑV[>•ƒáSkáÈNl(,‡ ŸŒY }D8¶xŒæ´Â…-_s£OÍs¿EÓ´ƒP^ÅHûž¿>Ñi³¿<{òRìþquöüõõÕå?Ÿ’ýåõ+1Â
+Hc|<÷ó//wçâòjþú͉›'/™¹¥ oÐG¶4NQÍ´4²ÑlÖD½´ùusý외¸<ùì×"C À6Ÿ‹ó1úåùó7çWµ€Ó‹4¤€¦4ÓÌ!ÿYݐHsB³V£–çÓosAOJñöÖê šÕ–¶‘UÈþè
+Ð<{¼¶5gD
+€Üx½ÒxÎïë#hd±xO$ìÎG8#B¹†¸΄9 ¤/’׺֜¢ ù­>¦«pPQ*Ԕ(šZ /b eô+Õ$¦ÕÁäJÓŠ·PCJÙÊüLÒ±¾÷Š3!•ÿ
+gD*9 ¤øo­kÍ©t¡‚©û­uUTpl(Pij~[QH¿R]ùxÑ4îJ˜ µ1 ÞÔhmH}Ä™oèI… Úd¸‡c›Ã_9‡9¬ŠƒíÌ$Þnéí3à8ñ;äpÜÍꊢÑâ²j8cfUœÑágȬbÍÌÆ,€’°eôêqš_kš)Ö`¬e߸&b½tµ˜êjˆÛ„à37 ;!}ñVá,¾ñ¨ òèhò„”«/¾oÎ5§¤E ðxõ(RZ /ÙVQZ¤_eäa•m•“‹œr,ë`ÍÈ,g‰îƚUsZ¤â]ôsºÑõ΄] „^6ŠßgTœY—Sx[ëzgFf]K<.²m8 ¤â]Û´eTºِ¢k€ãÑÛ|ÌK¤â]k¼­cñ(΄] „8åfN‹TœY—·û\‹GpfdÖµDˆƒeHé†Ó"§Ô †Dûµxœ™HÍÇâyH+؄VHÅAÖp3ÆKëS°ŠS™ôucgý)a©U®æì”1՜q:δ(Tœa:k&`2¦ý^Fn!´@ߨî<ψ•–âç14R㖄ñj1“õ†zs®ïƒ½6)]sF¤/ž*œRqFɇƛƒ=3RÂÔ}‰Û*+Æ|§:²£ž ™¥´@_Ò¬0 _%âa™d•{'! àXŽiBf)-@ 춍ž¨EOÂ3%7j~LYMó¿g-u¨œ¶*Ƭ„žVʆZË#832iZ`XÔCªB¼*FÑð0ôµïřYS €6‰Êq  bÌz<½t5?¦LÀ¤¦ýN¿{ GՄ¨E‰Ãj—\£å»œªÿ/û¶CÿÇ2å±óy¦
+•Š.:8‚AÓ°”y×Pi²™1.*†TSã¡g®·á ™ÇzT¨+tW™ACRy;Æe;¿“W}ÊÌrZüÖ1Th[Y;h:dtށ
+ǖªZ²Bq&…X<õ$¬X´%>HGhTp‘„zuN0k‚0B½MYõà¶oaËv֗Àeƞí'¥›%Sώnò†æ_1Ç)€¡\F;Œ~ ¦­²ÃWӛ•z¿üÏoËü ú0ŒK~C %CVÅ.D™š€_Ì+ÒۛüÁ»
+ÈtCî©M¢ÎãPhÜÅiÜQê†\î‹LÌçÔ+Ä୘¤­¦Z¾ J‰gÅ­gf]oKœÇ—óŽ .ç¸C¡Q½n)Λ<îV…²zÞ É;¹Èyi§Y¦—2ø"˚I6t¾Hã@¯Iîó¡`]>÷Ó½²óéF+ûp‚¥Ñí˜Ca&WÉõ¾xƒ³ òÍÌ¡p<²³eÁhe¼ƒYL~½÷øj̊¼ž#™iJóÕ+;[æx:e¼ÓlƒÝ°á>_Ì`FÊy¦Ùi_q<²–ËL+Sî|SÚÛéb`gY£Á´·Ó+ûðºÁ {YÊÝÏ¡°¯N!Ɣ¼&­FøÒÊ>ìF…Ô6…÷°Sˆ1§¨ùwû½”þ»¬Ùy·lð¥3s(ì¥SˆAP÷¦W#|ievLDwäU<‡Â¾F¦[Eñ¬õù«ä}³¨~l’©
+1(ÉqUŒVS-ßë ëãhR©¯±0Mi¾z…LdÎ)F+‚ñè÷Á;͝™b…}u
+•èn6+™NŒX»Ž°ø¢~I0h†¼•Hؓ@ ÕJAh¯†uáí½ëËðôÈK ’éÁp8BŒC' V%”r—›Âu„fBïò¼±%#û™ª\…tµÈñ¾ö3É­Mٛ"ìtJégüâ£f¤/­ÜÏQÙNUFFØ©»!­ìΉz=ø’L­ÎÌTEøê®û’ÑÊ>xõzðÅL«Î9öÕ+\÷E<²ÞEM| ½1rŸ¯D<²–KÝ«ŒùPF†ã¡*obRŒV˜áxze^Á¥UEÏQ'ÙW§ƒ~Ú¨x:…éK+û°TµÝi«Jô¥N…,§ *”Êïë^TB LV/ƒRÖ½Ö½© *«F2UaOZ(•ßz È¿Ûï҉öa¸æ‹};ºÞÿ‘©}Ø[ÔjçÕUed„TÔ¸9Åh…Ïèkˆ™*³‘ת
+ì©JÁG¹PˆV˜‘ÁèðöÞ5Õ{Lx‹Bª"\uJ©÷fUát
+3rÝ:@Ñ0ƒÂ¼Úœª_RJþ–äyö
+Ù;„Ët5ý1áZÌ1Ü`q§4?Ž1Bür3-sÜPê7Ú´_æÛü7"±pb€m† òËy™?Ï4s¸ùïy]æ—óôäÛ+3¼›<jf4sððBérAšÂ‚Ûda|##WáBo°íX:ZøÀe0.‡òaúéÿ
+öëëóô乛×ùüaJ'‡¬§H7…þðØ#
+56 0 obj<</Length 3408/Filter/FlateDecode>>stream
+[Êj&ÚÍ:ÆÂ+K²‘¼± ùû=Åî&{fÊì&€¥>â)’u=4ê¾;ùicÔýS§U̦Ï9©‡Ùï»î®û½3ê“ê\TLÔGÀASŸÔ*Æðëíùïê±|Û^;ŒÅ²lyÿ»YÞíù¶;97ʨí¯Lî­*ÿ¬\ï’÷ÊGÓǼ
+ÞÁpÌjûНœ>uó¤to\´žZãcùé)«§›Çn¥{­5 ßÀðö{·xóì‘|Xn?we­Æ-†M}èC
+Ô;àÞ)ŸûhʧëSžýU÷6ÌWïmÏ
+î2fd4œ ÀYB‰†15chÜAvìÛ؍fÉN/ijÐhÌó‘4ðIæ[.¥<³Rv¸%ÒþÆ4f·-'±Ô]×\ÿ÷ÿMG7³âùüV٨˱½F:ú \â0ä©S”.~ºùaߜ^`»WhƒŸyRß©7êí;­>tÞè·p:÷xà{ä×ì*àLŸ ;Â;nø3€Ãj†i:š7Ù5fIÄkø—$,\‘‘äû­„€#ÏS7T‚€T–µ¡ô©,‹[ hœÀqw'šR?åG¨‹"#N£s÷<@Øé90‚‘A˜Ö–çœvpi&#õ
+ØA@ê0ºÑA q¸{ž™€J!›{½gµ"•D¿a/ri,4«D^B+ú’vRYœÔAF ½Ý¡C:ô„¤¹ÓVåE†x
+ìè»2læfh%¤rlJ˜ŸFBÀòeä[oû¬„@x_,Säž&!mwԇ‡î¶;ê,Ú$!•e ”öRYCIHcY[$‡€4–4œ€4ÖØ\g—pPõHÜm-ä|?»¸¡ep
+@XyñØÚÅÒÖá®Ù·ƒ4À†„¨²‚z(y„°LÀ®ÄXŒ¢×i &i¤ÌšÛIHcA†¿€TñàB• He‘œ IB˱;„4:²RB Ž32ÒXϑ„4²;ƒ€4ª^©,¯9ûƒ„€Åª–èoø;Ë=4Ïz,–§Í‘€Ð<\Œí8©›—·NBZµ+HHK4Å £„4–õhxFBËBÊgi,‚ò‰VB ÍMXB •dc”ÊâÂOa@n3ˆ(rØU Z™“€4»ØÉ9i,²FD ÏËh‚„4
+Ùä(!-êPüæø»eŠØ'h ѕœ„4J8i,ŒÉãHc¡„‰Hc~Ò% i, <B¼ü1Ԍթ"»† ÜÃÀL’æ¤"
+ñÊÀD9&
+ æK:Ïm:~Ì°gŒJÉa@r[äE´üˆà¾Tø!‹¯Hxq"lA£Æ=Çf84åÍÅ$í|Y¡QÙá%ÖÅ=BUóC$P‰qäçtž¢Î¹½Ñ<ûܽ9‹Ä/8Íj…ŏ-yàq^Uxåy;!ŶU»#[:Ì|®2Ük ç%„¥ƒ³a´cXóãŽć†h´[f™oQvœMåôºœ‘õÔÎ KPBf¸#åÁ¢.pBxÕómwr•QÛ»Žû‰Òø¿üb3+)ˆ#¾>FETۇîäô)¨›'…2Ç|÷üÓËOÈõtóˆäÝÞð?߻ŷåös‡â.Vù§eÁ¦3ÇCFכóÕõå/[^½Þ‚{?¼sgQuü؆-ª©QÝç IÃ{§Æ³·O³ˆŽß5ž‡ )ž¥bsœÅsBÉ¨°8ÚÁ¬/ñtږ5#‚†•÷âÉJ‰»Q‹§C1Eí÷âéÐ-CœÇ“G(å£x”ÿëA<ËüÜMá0tW5tû£söŊý)ã^mNì ^¹²¸ ÒNÕĖκ·‹ëõÕÒ¤Åöåé³×jóëÅ鋫ˋ—ÿ|¶ôàåÅòÝöUoâ-¸2=žT#ïç_^oÖêåÅv}u½tqñìuY¹B?³„ÇÛ
+ò|Üd1ueÙsynhñÛâòìL¿\¿>ûmɋXQ@~¬à^nõüý!}½¾˜89OCe¡³²cWYgGK|C^T¢P6©§|1ý­–&öI)þÉygÛa¤Ã&P ?0iaÊýÙPŽ%]N7?L—Íé”|-ì© ÷dÅ
+s‹dF03Š,FÍeï+ˆjÇT8Yåf„šQ¦8ú
+ ÓV_ÕR›>DŒU
+$åqL W³‡n‚2(˜ éXÃW†Ž/4ÄÜçÁç}çj«îÕ]²ó $v ,EYUøÁ|Ðç3)WÏIÔáPˆH¾ÇÒÅÑ+¢|݌@¦°nêAg59lc
+ç‹z#´ò{–$”ÐaÐ|'¸NM^RKúÂ2ÕR2)‡„ˆEçÓªb_cFó
+ÆæN}ݶZhYKN by°@ÌB
+59 0 obj<</Length 1963/Filter/FlateDecode>>stream
+H‰ÌWkO\7ý÷?øK¥Eʏßþ˜òRÉk·/‘¨¢°!DËÒM}Ïøúúz—EA-•)°;ŒÇó:3$N»Ýg3§W!‘L)Šóæó²ûØýޑ8‘^„he€Ø++£˜† ¼\¬þQ¬òw-•ž4Ԓf%þnÓ|Û·ón÷) óP¦$¡–i¢sÂ*©µ±Â9\µóónwïʋã+¡$™ ÿÖäBþílWÇ«nª¤R
+#¿3%­½t“_þ“ù)ûsþ´³!INKðÜ)´•Öä~ìÞÂÏ9‰ ‡5'Šãä0I¸ qF8BîÞKCœSY`ƒðZºœdNEé‰ÉfÁ§¡#+t¼’.ê [#,>™-‚–HG#ìhO”*†÷h’6µ°ÚÀIx+Mo>4œ5ù=JgØ5Œ «L.µ° Ç[¯@éŒBÞ³À ›¨µ¶`Œï%.6ŸB/P2Á’æÅðkGÖì`Ól2­#ÏG‚N|ÈFdbëH‹FàC»1ÀZÔB‹r YG—CE€^aó‹•Ê÷Œ>Õq½OƋù–[‚Ö÷Š$^рô¹Ðr
+ø (sÿäšíu »þuµ€¶ønCzµÃ>øÎM¦ÏgO3S®ƒx\¾nP†ÞåÇßþn áÁÆ&llœcPþÞ·4\ZŒ:Aé5n¤Ñ`žfw:ʄHdÝú†MŸ‚jŒ
+ê<Ù)ŒRgLa6!qCmRX¡*à[½È?úP\Œ<‰duÎÿ^`=~ëþEh°ÉŽ*ƒ`Tá·œY>±F– çT¶Á û%´œQ§JªÎ¬Vj)¹¾J7ëåüV½ôO<Åÿgõ©5j0·dt$_üã"îÅ4E¤KÐzI‚ÇBytshÙý
+Ú8•-"'µH\â9A«Eƒ ´q†qˆgîӉ•Œ(—A
+=¸®#…•<o~d¥éHK³ÌbÐCN™ó¼’Ç
+w=ø¢dÛ,ï/Þs"¬
+&üƒiòôìôËÀ÷Gâhu"úµ$õw¢÷‚‡KÑצ^MÂ[ýøç‹Ë³¿.V×GK1û²:ó³slPâýäÕ|¶—¡ß<þî‘Øÿózq¹”.NïwJ/Ù2)`7ãj­ƒBëìàíÜÙm,Í›£Å
+&Œâfïë”Áè6s›‚¹%4×mȼËC¨‚%¸
+=}Ð¶,›ª2–U ±Rú¾Õ¬¦¦J–£¤¢ öX6â˜[U”Ùρì0?zä3&ËÈ ²ÁãüF.ŠHYêÇÎ]%¸:o
+Ÿ€¥á^ÌAüb‚¿(Œ’­¶j0UàPPDZ”n"
+ÇÚBjà,;˜8D^ÔÀÚÓ&ÚCo;v‹óÁF·À‰jj=`@ž¼K6:à"ž®[Üz’»¹„-á+O2`L ·Þô®¾i!Š ¯Ð¡IÅuNGó-ÙBìؠƔfšB49½FìÄ ~bçå×zLùô ¡€55iš0&dV­i
+60 0 obj<</Subtype/Image/Length 1341/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 197 0 R/Width 577/Height 256/Type/XObject>>stream
+H‰ìÖÑvêFEAôÿ?'y„¬Ó#wÕK.‘‚§{örîí£-m|zÓÔ§¯õBŸ^õßÔf¯m½X›½¶ôbmöÚfÐkõYkŸI/Õg­}&½TŸµö™ôR}ÖÚgÒK5Zk£Q¯Ói©f½L§¥všõ2–ÚiÖËtZj§Y/Ói©f½L§¥všõ2–ÚiÖË´Zj«a¯Ñk¥½¦½D¯•öšö½VÚkÚKôZi¯i/Ñk¥½¦½D¯•öšö½VÚkÚK4[i³qÇë¶Ðnó×m¡Ýæ®ÛB»Í;\·…v›w¸n í6ïpÝÚmÞáº-´Û¼Ãu[h·y‡k·ÐvÕoý&ªß:ûM<T¿uö›x¨~ëì7ñPýÖÙoâ¡ú­³ßÄCõ[g¿‰‡ê·Î~´ô[g¿‰Gj¸ÍÃ#¯^Üû¸ûꛇsßÀäÇ?ãí]õÃÇeYõ´ýéùáÔW0÷éOP¥¹OŠ€*Í}úSTiîӟ" JsŸþ”“=7²лœV¯N}sŸþ”Ã7¶¾êÛ~2ËÑWo¯
+h:*4÷éÏP¡¹OŽ€
+hy‘ÁÝÃÛÓÃÍï¹==œêN¦:l¡#sïu°¼Jæñu½
+èñáTw2Õa mͽ,«_Ú7Õa ¨ÈT‡-´б‹Ðê¯K˜ê°•^þóoô3µ–€JÌtÖZ_ÐݾÞ<'­öròÿÿ
++ ãæ9i5•˜ç¤Õ6z¾Íû‡z0ÍAë ¨Â4­÷jôÛ¼* Ó´ž€*LsÐ^Ìþm-ËÀ”–£N7íu¼ªa•Árè×_÷‹wF^oþíï~Ÿ·¹Ž#¿]ý–º=ϲúž¹ÜÿC®·ùåõU¥cœ{JB@DDD@D¾# ø†ô)"" ""³ÓÁeå, ‘‡ÿƒ|& E@ût@w? œâìS"Ÿ¨jŠ³O‰|( â;ÐǼèáãÝò?>v°<?\¶’Y}mÕgŸ‘ùÙ®€8O@DDD@D–e…€øY%rI@ÕW* ï°ӏ×Ŭn¾* ?쩃‡Ý?~|~u9öêúk èKˆˆ€ˆˆˆ€ˆˆÈn·ýœÖ7_½•÷# ¯ñ.™ÛÁ»¯
+63 0 obj<</Length 10216/Filter/FlateDecode>>stream
+¼­ëâQ÷û¶y|<ºþõÇͶ©G§–)ˌÓuB²EUq€ƒ° ˄½/¶{FD‹EuÒ¶+»m[‚@E®œ¦¾jŽFÁºêø•¿\¿›ãñúfÊ¡µ«º¾›™tp :Pôû¦­þ ËT‚ÈØç²í«-žN՗òб§}‰4–¤ÔIŽYՖà©CzÁÓÝ3“ì®ê;òqWôÛŸá(e¬Dü}їÝwP[õåëY“Êœ¦»C±ýçkT
+jRl‚96R<§9v4ØRîY$u@çQœ‡OlfiÞak¥ú%þyÒB³—Ï“Fl½»í¤q©,`ûåȸ×P¯PZsƒÒ1Ø+“ÜùL¿çפ` w
+³$GûN
+1c¥‚,àî.ƒæ‚#Åià£W0ÅRÅÒ<±Â=ªqþ[· O/̓CƄ9«§g8_L˜3|12иÄ{Z
+sZÝóðÏX'2ŠÐ*g`R0>Oäˆ<[„úè10o5î–ñw‰Ž1®{\UR6sÔØW~ˆÅW¤DÎ(€/Ʊ!ÄT1z éÐ2,u¼Z-‡¤»24ÂsîA^€œä… VÊ-“`öi±ziX{boÖy"5.µéLþ§ÿÍ« ^>Sò_2b‹N9ªŸš tÅøþ'Ü_zÛs’Ë믾^_þ¼’ì'ÌÅß!Óðé ï—ìŠ}øÈÙaä¶ôj«‘°LI¼¢ê1­Ñ ¸¢ñKß¿šNil”RX¿ÐF߃„̘…|h$$@E‹ðÓGPÞ!h)±‰2Xb(²ÃN€Š%„RHh—öIΚ’(9FKcPÏ|‰YJ\&bK
+\…'°ZžÈºd'ü~=
+P‘dônòT¨Hr5r9£bÉ9G2T$9‹òl¨Hr5Ò9£bÉY”ç3@E’sÙðŒ ¥`¤8Ä`´)\ÂÒuꮲ¥@ãý‡.[\J(’F"iʦ3fŒeî’09Æ©P&Œñ„™¨„ @±äœ¥1ƒ78FäsCÑE³ðnÆD‚¹ŸfÌèË Š%ç,l
+ÂR§Iênh/–vñÍKͨDSÓb¶§3Zêêh¦Ã´àӁÃò¼ùþ¤i>{à½1ãCŒ®(õoÊ«m·äˆ~ÿaÞ2³0•™¾O€} Ä±Í5E*äȖ`åIÀ ÖOyØýüœªêÛP ”Ý,VO]»ër
+C†- +®p×ló Ï(B@è°ˆ1\J”Ì“8„Yõ…ˆ ) —àÇÌEÆ U¥'³d¹K!քeð{³Þdp§¼ïi|¦“We¼ÌØ2û3$¤‡Ë!à¢í¡_u0È3.à¢rêƏ5ļ<¹‚1K™—'WP&±U»wyrÍ?Z‚Â3Î1˜ÿQN,õ*܅±Hm@˜xð£8Ï`à7^Šn7³ä°†§š°-~‹&ÍٟO(ÇÆ÷!²ÄFò^-ä©ǀ
+@–Ž<¿]
+Iü÷§©DÞ÷Œê ñ!yjá1[ãG–¦”ÅSc©´o¤BFͤÑ0:3Êæ¼ö¡ªä¬Ô
+¥ðs³9MÉ\”V"r2ôêJ^Ú\1ÉGÓòtüÖ­1 T{æú@íЪÙ6ZúÈw÷ysÚÜÍP‚ÖÔN§s*‘:”k<í`îjåÐý)
+¦]¨Ãˆ¨ !Ŧ©¾.¢þ¯5g¬œèqä»õ½K… ¹Þ×i¤Q€4ÁN6Ø ä§U\ (`®Pŕ
+ìp+GÏò®[*N¡{š9ΘÓ}F,NÓÃé(]æ^¶Uj耂
+X‘Äð0Þs_ùN]Árlè&Ú¹Vuëà¼Æä¶hø>“©ü =%(lVí'±å_Ё\Ó))‡Ôƒnƒ/¸­¸ôÚ~Pܾq_´å ÷²Ï|o-üB -ì ÑWM¥€ÄBî:â°ÅÑw(‘]t@‡ïi‰Ò
+¦µ¥ÉPÀ‡á]¯}<<ž§mj'&Ô×"¨-"Ù®*÷l P“‘§ÊõÐH³ÄGŒ—~ðô„ùj10‘Pëø#£ MDÉõZ£
+ظԨUÄìÞ¿&fDOa…c­Íͦ×êª:hä¨qù¢·§¢HáÆÐ%.¬ÜWì†bk†Ø©'tзÝ#ï }(L%H¦’)dàÉÝ&>=îÅ ´*À*ûċ>ãÅ·® “´]xgß+[\ ìÝaØí:} ô#QsGh“ ôÍ?iª¡þ«Y‹5U5 G…Ÿ| GºyJEÏS+’¯ÔFS}÷7~eéDŠv°—ˆ•¥ÑšðY»¯«l=~/βôÒ÷×Õ¯ì=Àí0Ž7ã`c8ñ@“€(ã¹…’%ƒC!%]}‡»¨‰,]HÒ.áà@õxOÍ·CÒD‰Ž´'’Ã!ëù»ø–¥—¾×á„;¾
+Ë8±•œÌ'1£Rl)ãRl%'Sl™#ƒ5$:çdu•5ČË6rNf/Gñ;¤wÔË© 2g
+ºo w«OŒCµÔ^ƒèÞ¦ýXèWHdTÍaq¶ÒPh²!râÿ„C4`ᢎ‘mMɋđ¼L–qäØp·
+Ë (0­QùÎñ+:ôã‹“Áì ¨žB–Ö<¦Ç¾Ð¯+mPɪâÌX4T4Ù 9ÁÊÔ ‡hð7ëD±!4$²‰#y5\đc³?¤q>ÅÆ'p©Ä¢½fÚↈc¡clCÅAžkS4dZlÄØâÉ„C4ḩPÙ:ÆækŽâ7k¸ˆc²gÄ~ðcq¢Ã˜cã¾êŠÝD—Ø2Gò<i¨h²QÅÆi,±Ñl¶%4!«ÈÒ÷äb¿‚+mnú‘’º<l:¡A›NþËwµìZvÑ/8ÿp†!—í·=M@H ˜¤ÿà
+KN¾VsvÆÌvBðÐI…U9vU‰aUæÁó»°ªÖüYºz‚f†Þw½á!ÅC)è¬Œ× ezI¶ÀÆÇ^ó˜bÈ
+øÙ-â*NÚÜB3w†%FÒfôڀé91'mny‹‡[ß!«@wO5™ª(ÂÖVqmá×è#Õ$1cÞgÏä!°ÔK0RQáA*.bXMFfaYš‡[‡i{öI5™ª(öZ¼à8lKÉyëûY%-,ÅŒ”“;jóVŽž€}·ülù­àRåՌԒ9ÕR³ ^‹–TúÎ9ûrÃV&™¡BrRgÀ
+Ѱ,¿H‹¦;cäƒËép‹¦¡Ú ‚ëƋ~
+ǘ;ù~ÍÌÚb¡šJ[iJ¿ÕQW¾Cã³ÓòÀÀKAX†—kÐϒ¤›.0ãCýö)U|֙0¢ö©ژE›é0ïõŽ‚¥áŽ‘-ÖGiɁC‹ „¥`Ë-Å[„üZÓÐN¨ߕ á±Ü©C šJ*–kÎÀU)ÏIóPxÈXu9£Â܃
+û•ö¼ÿŒÿÿò~õI5Šö¾0—Ò¦/zøTg¾¾~R#]Pµ»UsF¬p<øyˆÁçYl…K‹Õ
+VÈvà*hÍ­Ž3bµ?z_|í=“ÎI0‡ë¼ o Ôõy0nÆփ¡:v‹ýõ„Ç+3¶ø(’B0ü|Eú=’–å·î±ÄµÊ7Ýîۄ)Óª¬âA—ñÁ¦qÔX„í“,(mzŽ˜‡„)†
+´4ßÿџ8Ǔ^·ð\ƦÝyùöúÃÏßq¿¿qÄÑ*ý[ ?ýK÷ýóß8t_>_?Ô1~÷å_/|˜7NÇÃaÌ÷—?¾~xˆÿӗXüG+ØëÏ¿üO¯¿üü×W¥£Ü0jô÷?ñ•}Éqí“⯙2?Üo»þþÏß^?ýÈ&?:…‹Ïø¯™ßXô[[Ó°çO£«îS,ÀÎü¿ùatً§ãñ{Þ tkÚ ù‚Ýðë
+qØ¿²Ÿ©Ì½êëëï?Æ&—3>:í(½lÉ£â¹`Ar+ÕÄì‰ù%2¢«âAyW’ñ þ‰p¸¨·$f3>æ:#«8£çýÈjcò¥©ƒð ¯†¡©Í7ºzm•aE®ðó…._W‰ït|[¬6(ÎÙ܈¹ÆÛWcÛð »w0·èúÝSåÅWâtµ€YØÙv&v¿‹#z,¦Ð €_YP¸6Š˜%‹—’¯HÞE ØþÁÚeõúØk„w"†£ëwËMWß¹g9{àÖ]IÎî¸t—ËÄ+Ï* 9ö]ÓµÕÅ{ȱÏt9ÚpvÝ»Àcß#Y^}çNr
+Øü[c,ó`)Þ"DXá)G‚î)Ã^ ¸ižm“/ŸŒévú|³øú
+L™Ù¾ð@ †#F0’…y°,o¤­Nºp¤¡ÎÉM=1¥7ၳÛöᱱ҃·áÏ14;g‹szò˜bÈ
+P÷p(’gFIs·ås^P-!²G ùÊ® ’¿PŸ÷Šyù’Ac•xRp¶’J<)àª)!gÏú9eÎi:Vnô@Ñ!ô–BJ ™ß/·eë ¬Œd½„êÑK. ¤´-=ãva)=£ÆÔ¦4‰š”á@ª>—šÛòŽ)ÁÀJ£áͺÓ.m­e`<ÐjµÄaI‚‰!
+qÆF’óva!ÉYòbàEAbò–)›K0åõåëw«‡³¬íLež=8‚-¸ç°"{Õ£VY#,y4nÔIp³i]©¥Òޝl$Mïxf¢Á4(¼ÜðE‹:àås|¡%oكDì+3d`,´æÑ£•Ì FRh¨.؁îïìl'ìî9´š‡TÝ"TÌ)^°dRL-BÆÆrCƯæѪæ …—FÃÁnw ¨![‹ÓŽ)µZ>MOŠחIëtó²ÍR½„©u¹îi«Ë=U-Ý EX/ŒxņÉJ6‚õF[9>}&±)†ÁÇ tš}÷©òyròÔÉ^‘ ‰8³ø‹û:–¿"bòr2ꅚ¬ÇÑÄ<`4v.-á‘ÅàuàäkKOC¿Dß©ý…ví~zz˜<izÄÇô˨YŸ•Ñ3æ0¼éÃ-—uõðݲ®î¦c¸ÏΨÃÕôëêä|³ÛœŽŽqƒ˜ÕvwôÛáŤ×ßòÂ1 áNe‰ç%§v÷«MñÞ¦Y}œè 14,dð¸èVÒ¦[S4€à»-p
+Ê`[#TÜst WQ#Ô*—<ˆÛ¿t̵IÅa‹áGNŒ¦Ý/?¾ñÉ9
+«ýSÎϼÚƯ•ºØ^¼Ú½+§kMÄ óø4á
+•xô‹"Ò:¬NOwÛòc/ÿÂÛ­Ôùó³su¹:¹Øœ_•Àyíµ1 MñŝKD
+‡GˆˆžñUCQbx'4A™y‚Œ
+ ç-‹2CÕXŒç˜€rÑUø5c#ÁLº
+fÑuPwW„P³[cƋ4eªûkô9Ó&}«î
+ÆldUÀzŒßäDŠ$8ÙWÐ䋍„-öMé™à“³½Q&%åhÚ¤üŒ³‰[ô˜t¹M%Á~zóÿ+©!xž<s
+66 0 obj<</Length 4179/Filter/FlateDecode>>stream
+H‰´—[¹…Áù~l$Úø²}{È·É‘À‘’(Š"DšËz2€4Ê¿ÏrU¹ÎÞul“‡dÐÐtÕçíåååKYõþôèׯ­zÿõdT*V—’ÕgöïO§w§ŸOV}T'¯£J™tÂãhHgu›RÂÃ/w¢ñŸÕýò»ÓÆ«h°â*T_ 7W{{r>=úÁ*«ÎïÛ¢-{ísŠŒvΓ
+fçÕùóéÑÓ¯Q½ýªŒ¶>¹P:Òò3PQ_ßޟn6Æ ì[”=ÿrºyñø/‰B|pþñ´Ô7­‡å·µ*Œ&Sí£¶wkû¿Ý¼þxÿþÓÝíÓoîïï>©?Ýÿôö×6é|óÓç;õòþöõÛå÷tswwÿàïçߝ &EÁ¨ó³Óͳ_ÿõéÍ¿Õ/¿}P¿½ÿv÷þ˛owÿTϟÿñÕËUÔ£ÜêBÖqF՟“K*d¹&ÌÀÐE˜Ín­sQ‡›ü_þ[†òüŒ‰¢T´UÁi‡éMèS9Òä—)}wú|^Bäë´.A 5¾¨t±5Á";ɪµ·5SËJ*:–“uĤ I.´<5j ƒ%mÀD£CvKÙíÁ¥,þå;.e­Õ)ØKÙCѵŸ¬MN­
+úqVSáe‡EEÒ~•"_ÆcÜRVÔXʺ K(¼lAsî
+ˆ`–*6ÆúÀ#M–«Ýj\Æ%!û*ߦõÑJ؈ʋ&BG•FÅs#?_`ÒmmDIäF6‚˜XÙCV–°XY,·´0nk´=À^AˈYú¹xÒìJÐ$¬ž\:®½\=àÞ«íŇ’qYhK„ƒ·è>Þ¶…××ik¿C‘[g)ï™2ëxS{ J|ڊb]-N¬Y&8±…ak³=€5aq"˜¥›Vdÿ}ׁÁ%Ù-­s$l½.Bœ ;sûÏÿ›Mß²c&“SµaˆªN¯«?1Šl÷ÃvrÂ6¯Ó2×xbHyìDY~˜²Ò;ƒÑS)
+ì”WÈ\êÑ$ï7pš–…†‰RÜō “-Ðþbö®ÞU“ÈA셵K$¸l48ñ¿¬ç;õvmȵE9Œ]#Žj
+$Ãï…7­÷F²¢þz7lß|Wä¸ÞQ¤ËhŠãœOK컁<9‡7ÏÚñ\Ž[tî¯'g·èºL&gV¯Ÿu†è{›aþ»6•®óÕ0ž¯îA&ôõ³_ôLòàñ!4l9ÿS/~ÛҜ<.M’Úä\M}ø/ÅÁp5ûm'j˜Ø*eœZNƏ[eCùVyHŠÍõÓ~«l xØښÄÆs°÷Nxå÷óТ´-̜†¡‚·–cÎöWºÅ¦P?u»hÈy™§K½n01*£#¹™7ðµø
+=g"¾AŒ;0Q2ø@ æ(Ç
+dÌÈÀI™Ý@ã4>‘¦rddàŒi
+ÈÀ@Ό äÌÀÀY™ÝÀàñT¤NȑfŽ;8cš‚‰’i
+ #Fù› Í=Ž ÒÇ¥ôÃLjQö.È0zd”¼q‘æ›ËV[sø¸¾ ¢mž!›oé^›¥”ÞµYýk3G×fŽô¯Í“"»o!êb¦ßk,Ø)Ó¬LÁJ9Ý+Á‚åÌhÁrf°`gev½ƒIÓàqb¼ ÒÜH?xBJ7xœ!£à1d¼q‘Ý7“—U<ñß&HóM }߄”®oœøƐ‘o ø6.bÔû“õI›˜•ÍN§œ”Õ.E)ÅÓÓ!çŠn6ÛL€R÷@i%]vÊÒ6]&CrʃZÇû]çNt;8¥fL•æ|Ñ9“mPjrˆ²Û6Û²fÿ\“–t6Ðµkžj¾ËÕDM±He-¼äè$äÌà(œ•©ÊˆÂrÇàÊ¢Tf}Öy‰aKõÏÚáÓl„@„¹§H‚°èÒB±3•C’eèÀ8«cp³®¨$M¨=C’×uÂf=m|ž3Žtö4íÊ`\‘ȁñ)j”š3Áiwðï0SÞemlœ3Æël³y`\*:šétº€¤ ;EIÓR‘RŽákù”±+&z]|=Ìë&Ø/"“§fÒ@ïádÛ×.ˆkȓóéÑXEêüîµÅΌ?Ë?,.ó”"a§ÄâÅΟ±Ïoë_¿œñó'xi‚õhr~†G•}¨\}qÛÞÜbˆÖ÷öº‰¨è¡
+×M‚]Þ»ë&ñ¡JUî4Y+.-1H­E®ªÍ®m¶w\m|]'k#ëÐò,µVËKÖSè4
+h6u­#ŠV- ҙQW麑«VC£ó£F¹Óf;htñºÑfE鴂ß]i­JH­+·Ál͖7ÛÜÂs•Þ]7k‰°f0ÝC§fy››N3Øî!Ôç±Hßiß BɎEÒu3‚óTÃKÞ얅N3xOJiÜ[ì4ƒù¡ÁŒ{K×ÍÌֈ6¢@NÝFœC)­KÖ¨_©'xüô÷Á)V,ۄsÓ§Õ맿yüêñÓóóWêÅó/_ýµrVûhÕX¯¶å¶m úú¼Õî”4.Hæ͖äTKr$yìŒìëºé4™ÖN¦éß÷,’/²ìäIpÁÅÙ³gè¤1nŸãÉd5]¯ÙÙò’ oEŒçÇg[ý†ß0æÎ ± F‚yF.Å-9™mØùìjzÆ&ÓÓÙb¶™-o(ÃS·`9,N.l=·[‚óæ0‘²Äv[DÞÞlލØ•)6'ûçÏ"贗¿Î6S›$K`%ìÂþŸ,?mØøxåaÂr¿*°¼Y/ÖçX]lØõÁô
+ˆ,ŽÏØúÃbÌæËÉôú9h´†w££K®lørÅÞ®Ž? j¶èF94à0ð4,©QŽ«Ûo¿°ÿnìŽ0=$ɚ—EkɚÈ3D0S—ž Ž\´g”ä©càB{‚K”ºÁN•<DN˜4ç²¹`W²V ²
+ùíˆAôç-9R¸2Äräu;§jm¤Æ‡S£¨&=\>d®]ùQ»½è‡H˪a²áTzI¾õëß@ÎŽ'ÍsÝÉ PGr„=ãÎl:V Ė¤µ^„Õ……%`z“lú9Èӑ&ȳB9hþ^(i`¸‚¾·÷ˆfz™Š0JÐûµðÜtZ¬œü«±“#¯È[
+œÝ+›ƒ³ž¦¨jZì¹y¤Mÿe†æ
+­œ†4¬=¸;*ö"_Ճ7MÓìhôþ›„sÖç ²Ò¡¤qô¯p1€J+"w<Iª{T÷µÏ^hċ´©ã
+9=ábëb%ë¸,˜¸ÃvÇ^vtïiùÂ7þðí¨}Ú©` =Ù»MR¿¥§¨&ôÎìAªú1i ¾hÃ6ŸlÃÖ3Òµ4Ð*Õn©“W¯¬èŠá©0¬â;üÞë/¡{žµÖtў’¡6¤(ÓÍèŸ‘Â Í °ÍðÌöržãÏÇ{òñ°MdÝ>.Ùgû[¦dÐPûßé!Z8?6^3ž
+69 0 obj<</Length 925/Filter/FlateDecode>>stream
+H‰´UÛnÛFýþÃ<J@¹ÞÙûæ͕í6Ô4•€pŒBiY$'’#ß3+Š&Sèƒk&g¹sæÌÌÙY¦Uuñˌiu¨4ÅÌ*çDÛÞû¦z¨¾TLkª¬
+q
+êƒ
+)d
+h‡8ē±FÅ[„mM8×CÌÒ  ÉÂY¾gIA;ºÀ¤²/€¬²¶Wlp9Ä®#LÖ(±ïqlºÀÀ[òYE.¦U)÷¾jeB÷ ¼
+þ;³>:¥»
+œ˜PNOQ¥T3Cc?øÊÈ¥UddiÎy\Bés§wjÊáLoaˆ±ia9½È”1h¸íyëÔ. &Y²`9J¹‡Ò-¼0AY¢vmc mØÂÄ8źÛó]ú_^g¢sïñ£ ":Õ£äÄӘó¤(³?ž^.ã.“‰ 碌ð°ñ¿N{ý2ç'—·ö¾û‰&ÓË_Ë«ŒV¯%
+HÑbŒ!„8Å7îì$¯â„™‡êHó%,~Îxd Œâì9ƒ=ŽZN8푖 úvˁ®žÝ+•µ$?™ý0ùÙä78¿·OXKÁÑ3±¦)ÝÞiºïîÙ¶#ÁƒŽ †¶#u¯%³W$Ý¿Ý]ÿJƒŽåÊC.\|ó£
+70 0 obj<</Length 13>>stream
+71 0 obj<</Subtype/Image/Length 7722/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 198 0 R/Width 277/Height 378/Type/XObject>>stream
+H‰ì—¶ëª
+ÆðåS¦óÿ(¡È€tîô…š5M¯z€BjŒT­†2-(ž­Õøß)Eü³j^¤C1ÿÜþ¯€²pšœ­S{ÐWC¡TòIŸ·…{&åtžêÞFOõ#”wï)ò´§=íKš>\6žö@aíB…²™ö‰ýÊ[PúÇëËgy¿xõGdrýJ¾2Ÿõ¯[Kô{Ï¿ åß³wôqšõÇõ³(Ó¯ä+óYÿº½DôøüãûŠZ#›™•ö·1‚.ô+ùÂ|ÚVéíqý¾Ö)ó†äPúœÃÈþ¡­o>ÚÎY(.<ƒ~“&öª>‰-Æ=îße(ÇöôI6ÓoL¤c<ê÷ØbòªŒ´‘°0>ê·õ­B†œÞ©ž1fçHMQeS“nÄÉU(mÓ+¨›:ûAÿ$,´~g›âH‡cçBMQ9¬™ñåD$Áx·èL¿ùó”±³­g ™šÓ§Õ »H9†IQX×#7¡€âü¹Åì,Òþw—£Ìé`¡˜¦;ýÓPÜÎBú §\!MÃícú´Ÿëȸ3}ê{
+BiLZz$‘À 1:E L ù
+¦®ÐŠ·ZCéL²E4þK§Ieµ°žÑ¯äʱD“ójÖý/“É™þ,}úÕésáòVBiXs
+/í*”Í?·ñËÐÏ_¥ºOìVm7‹¾(ûwºž,RN†7¾]Æ/]^¥
+JR6 ͘ïÀr(.œm’èËöG\äPì&"“E(@9Ìv’AiÕ?‡â"Ñ,2Db¨q»‰Ž„ýŠ§‹ƒÂÓÅï\›šC> eÿ›€‹ôzç¡´=Îo´ìt±PNj˜ä…ðdM9le‘2?-W ÄšPÈé9;tìlzdv/˜¼<}Hd‚}柽·Œu›€—7…œ.&§ 8ˆ¤ª…~úž’ÚɽÉ@èö}$w¨”Xȹ~
+)„~ç|dva¼‘ÓB;óϦ ѨŸBkqOÜ}gzå×híÍ®TÌP(MÎë1c&þY9óÏúïÌD}
+åÓÛ…´
+Äñ¯ºÙ¢Nöõ_{3PÆ3ÀäM™-Ú¾:ÛûÌpâoŸl<±çuCßùc˜œ‚â™/ÚÈ÷îÄøÕ@MÆßE#VîüA(v½Ch´”c!v‘ó~tœÊÇcúœ…rÌd7ÉÍßÒ§‚R¦Oÿ[ß©9ý}-ÔÉ%(n<‹´©½†È¨)¿ŠºÂ8¦¾
+Å…†wë•7Ò Ù ­3qéÅdSU¶Ç²Ý Ŭb"/úÑnm6,´Þf¼¾ÿõ¿ñOFdìH¤§Pô¿ PÊÓáTz!RX­?*eDÆ%²Åù,ÿu ŠßÙ:]æýšMŸ%($Ršþ$ŠÌŽä
+îl]Xg}’gõ}úÄH‘`ïK ÌO›3…—îü´?-´½¦Øô^rÔÁ¶ž>n‘á^sæˆ6L®Ö i‡áO/‰öÎC!‹PÉA‰7à“PÔöW L/oý¸?¥â
+¹Ñª+¬°HCn-’Ü"ÍOËP¦×ü£˜Œôb¡ô~…½}¦PŠEo©kýكPüè ï¡yb¤Ÿ¤O¹fïíþHû›9Â/Ú§P>½=PH{ ö@!-½§ÜQÿjÿò@¹
+ÜÅÉÃ5Ú=ÀèåÉö¥Y\»¡Næ+X‡¢þk2èû üsäáóï¿´·Í?Y›°Ùۛƒ‚‘Ò»‹PÄÝÆ,hÛg‘j% Ps3í‰Ó(zNW‹Ý@õ;ÕlÌÃ;2ºÂç!§/%”þC1¨AžAi^ŠÙÉ+P|:‹±ï#¯‚ó/AђBš> pò,”QS8”(÷›ûs(ù¦wŠà¤>gaÑ¿hjÿÉ/zŒwd¾h>ÿðŠà¢¬ÓK“ž„b™A ún‘RÎ/!òÏ¥Ï
+Ñÿ(v|r${{â흄"ZZA£óBFy
+î|Ç'‹6â"}¦Pâ‘zJIà$ȅՔÙ"óES¹9(Ö ÄÓ£¨îkN•P6A¦PðtdéžëŸ†0(@¾t
+ à=È\ËóÓÆÎçúóýX3 (’?珟8Á· ô»y¾ˆCfú}
+ }Œ‡ùF·Ë}¡yù$Rìçô)”OoÒ(¤=PH{
+-é?Pþ¿ °ò×BY¸F“È §¥ÓþPdÅ}»
+E$؛¾]¤Ý·u(ce)Ë;ÃɧNH)ÉÛ(]䖼Õü¢ù7 /Nå¨Liåý}™B”¸¨
+ʎ%ƒâæçP4Ԕ®ç¡Ê%qª'cjO"„"À¿°‘…HÁšO)”@žé§P¢=¿HA{Òþåé[@96ÞnŠ^hqQóH±5b̙ENK˜9”n¯„"ç⿋ä¥HÁAeúL">§ß"8¾í™¯Q˜®ÐÂz¦é“ÝS<ùètMœFù
+ {8²[d,Ä6… úœ>…òéíBÚ…´
+i¼Ð
+œ>Eõ“þŸ†"þòv[ÿOCÁ{I)AŸ÷3(äísƒÓïÚkýä­äûRèçÏS]߁Ґ–0¼æÿb(/ŠíkÞ\?²ŠL¡ /’~åôx›9(j~l:[,DEõ¾
+¥cqPb¤Î¡x}ÅAG&=2NA ýû¡´Œ¶›`U@aúԟÊ(œg¡Œ÷AN/¤´‰~"w—7“Fm‰“Z(X¨®A© $ý
+ûÖè‡ù7”ã¢Q¡¹ñ(8Éçô)”Oo”ÿ±_
+a%Çàe(U̾ ś\;Or„Ê.ƐìÓH°óæ9%‡‡†H©ŠÜLHFù|†RÊ1¼ø÷üœÏúO=Å6ÁP1*A0šc¶wWc¡ÄõE=Ý~ɳŠ@ô®CÙ%L¡TJ½ã‡ëPx½”
+
+娋PÈȁe%¹¯@AIJŽ€º ¥ túAÖáSæL”®¡Ì‹#þ^ŸLZ‹ç³«ƒÂ—€ôÚ¬2?8¨
+%%NËtm8ŒÎO2D¾à)žÃ³ÝŠæ’ ë%ъþ.c·1ßB)rñ~(üڀ< I¡ˆÑ¯A±ý:(stMx¼
+ß×äb?)&óz̾Omìŧ±˜{
+”.ñ”J*ôÞ½í/ò„häð¬¡ï°àg¡‰r甌1r÷ˆ'Pø݆=na€Âÿ<‡â?ј@a¨¢ä`ò¬?¿–P,¥hNÉP"ÄAa|ï™ÖHÐßv³Dþʦf“ƒÎ¡à¸<o2\’zÆ ‰tÅ(Tö܂"žà2Œ=×9˜%Ïâ›;–S¢ Pt1Ê ûÅ$¯•'‘J_襤ü¤O÷. ðëÁJ“æIÖK
+·Ò…ãŸà‹4Ÿ¡ŒùJŠ9»ÈYEH‰o®?$0”¨t†RyÊ JÊiO•õ§PÜH)‚€ʊz½åAõ4}ÍêK
+·R‡£B‚a'ÍúÊXÃOX„ ½Î´KMëÁë=>ØýÉ3AF¤'].‰rL%KEô™A™ùwË%”O”b<PŠñ@)Æ'Z|³üÆDû>£ç²ô&o—_Õïg=E+ÌwË/êw
+\3Ͻ‰Z…O÷z€Ähµx¾¿”óóóü%(a“?J¥.ódžŒ%¼?äÖÞ¼‰³K ë«Sño`›œ¢$!7ÕÍ»ÒcAûýöÓ4±ÇœQ@ɞ7ÉQ¦Qï9>ßz
+Åxð×é¼+=lnÝ[Œ(vÓ
+­|FP¢~[䃟ìÞ¾6Ñšñf³{˼)½M1/‰óJÜÿ”R6ýŠœõáó(Ã(b¶˜²3éžØ”(k(iÞ=™ç5h¾ŶŸäש†ÒÍóMށÒ%֋Pò÷{RrHëm(aˆ;$Í)¤$ÖÁX;£|ÃJéŗwu“æà(—ËF7uEž¯nþËPbt%¯¯ìÖÉJ´%ÎÖ)<Â&c>fs…v|ƒ`t
+'ÛßsRGÊQbtnª\Šì M‡Þu@]çóôd›É’¾FÇ‚˜ë”þIëK(tÞ¶¶Kô-”¬ÄçÈ%”O”b<PŠñ@)Ɠh ùò½Pª²ùÿ)×PJHÑh›ŽâJ½ ÍkÙEI…|W–ýNz©ñE€âÿl@ÑM1þk”Ò^H¡ŠünæßïGae±¿^…¢7¡žVxV\_Éìyµ,½×ˆ+A!}”hDº¹“›ÍߏƒƒÑҐ͠ŒKhÄøéR¸_÷‚"7=¤òêzi?𡗡 ¸ûq€÷÷ŽóZø }ëx
+ô1B•Ì‰õÌÓd‚°ËӜ±ïÖå,…RzŠÍwPæ›óӆ1Èw<%­P0‡ô9Åì¸xˆÆ4VÚïÊÉ%d(êI· dO1ƒÊ2ƒ2tî<ç¸9¼ÏSä‰-Â)ȧPYŒå3(Z§¸ãԉKç=‘RNiㅜ¢‰{e(œˆo{ÊØ}>Yé¬äÉ¡àWO±W=%ç(‚p&Ÿ@ÚÖ÷û „MÍ&¼ Š†sÎy¸%{Ê÷AAgÄm(œ¸á'”òz3ñ&(Æäª'9fAIÅ)MPŒAóúÅØáï“pˆ9îŠí3&3(üѧÉ%”O”b<PŠñ@)Ɠh ùr Jª t­ Q_•_óx¹çÑ}Ÿe+ïfßÇýp2zë;=ß¿¤EÃd©XmŒ^ÃËî£%ÛåíÛíïñý°"ÈqÞ<=9ê›e^ÒÏ!•ò±Óñ‡IJ—*J&%vPæIÇ¥’&2ïuSj3úÞ½¨§Öž{Ü(AIžUA9¨Ô¼ó› ž¢ß«§¸MìikãÐóMçA ²§¾ÇSʱGj¸f9±«UOvF£ÀPbÃx%8¿¦õ)ÜV¹”3(aܪ†C0‚ç‹œ2´¢õ¨Ý7|®9bæ)N›_J:àœ·¾ä)dt‚Rä”Co‡oœ(-1wžÐzMäá[3OÑõÉ>w‚Š9J…6՜â©1„Sð„‘cV¿•ÃG¡£@žçۜ’.µô”E?Šî-9eµmÃME÷”œW#Þ\€š¡¨ûǜ+ âùýÂ%i8‰çÖP­SJr·ì)“'¶‚ŸDL ˆ§¨û”0y}Hᢑ0­h«ð(é&'á3ŒpO²÷¥†ž‡g‘°_ŸU („
+J‚t
+EÂgåyl©.Þ +=LÅÞª‰–ŒÞ§
+xýöƒé§¯Ï>Ýä”$¯ÃûÆ÷ѾŠO”K(Ÿ>(Åx ãRŒ'ÑòßåÐþåæùëÏñ꥖Ξ%×!gò
+T)D£ÚåQ­qÃ8Yo¿D#£¬úa/ßJOY,3‚=e¹–2Cv¥C­®¿¥*›C/TB¡²<CAÒgûÃç£ñ”ÿ·!¨¡´ž±Äœ²ðGÁU(Û-ÅC枢ça\vë)Ê𒉧ükߟXy3†`ӗ@ñ4Hï#P â)d„ž†AYðÝP\íËPŽ«t9„K†b¿„ï·ÿJOYÅSÄÈ
+¾ ÅgZ¥gPü&£QÛÿ¥-~Âþ°ðҜ‚s(9§€r
+Z”FøÅK±×U´ÉSä{vÿæ{‡r!§|½x{”ì)ûó3…ö †=ÅÖOžzÊ1¾Ræg(¢ôЪ…b?]ƒbÛqOø€”=‡ê(ƒ&úOCˆÃ»WJ”ëÚK«-ëÿJ(<A‚Ñ#Ōý ƒzJÝÀÊÍóìëžÂ‡|˜\Bùôñ@)Æ¥”bü׉v?õÕõÇÃr>ïö|9±¶PSr¯ž ßçÕõüQfŒ'y±¢þFïÝPîËKwH0qY"ÿ5`ûUF-¼ß~êNþ¸KŒKpîoƒr{”²ÌÞЙ'H1ڔÊFQƒ·“Pö/
+
+è÷ ,üÏã_qÑÔ (¹!Ûîß=!C1GXÂñ!gl«7úJ†~Jù㗠`Ñ.õØÈþOöۃf©Î·Æ~û¿¬«­¡xÎù=P°˓KÌBeí  –;ÌUûË¡¸'ý( (K¼ÙƒOÜoq†6áuQ({$ù~ëBá´º ‡¼üÃ~n1‚PX}ÿ‡î¬ÁFZÛép¹œ~•Ž+<c9Ò؀BV²
+Ås(’1Œ€S^|!DS"L
+74 0 obj<</Length 4936/Filter/FlateDecode>>stream
+ð Éý ¤…ñ¾o´ìzÕ6ìa÷í§àHKàŽ#FgGà©ÑX½û+YÃgÙï)gyc^2hºPia£ší®g_U)[¦ÕºÉ+æë|-™z[c´Á µÒé®­*äçùŤƒŸ”–äû¼ªØRÕÈ¡êõývð„ó`ÌØ 4l±W}±QÍzz~Õî`U5tÓ$¤ÐÆtjĔëêuÈ#§i%ÿ燸xâj!iMß奜·«Õˆê`ŽÃ
+°„ߝßäd²Î¿™L˜Çág²“z¡ñ—>E?áàÚÁa{Kp€óãü#œ*bL­8È`Á÷‚£ƒ‚ÎÚ¨¹÷qL¿(9Hb ŠÞS©Pïç,~øˬÊ;êC-`ò¦Ü«`<Í üË¥K¤ Âô1ʌåÑ뷾ǿLå{Yš†î½Ñƒ2_ތŽ&HÕÁÑcÀW¬yžÙ™Š£OAwI#zË·ùs% xzF¡õûvèc†Gþq$&É$ÄG1p°Dä^™87Ó=ðÉ»ÒñqÕæ¥þi½ ν(å)†Næ…ilgÍ"_³Û¶ë0”œ?,už¦^ìÎQ$C^…+v²WŒö”¥ÌÓà3p¢™Bz½z=¯óàG‡I´Ý¼h::ùC”áÒP´;PŒS2
+ERa¿QՄÿýx µ@Øf‚ŠPÒ¤+/
+4Æ6ÇðX©ŠèTX¦èiUEžÓäLœÔΦ'µ5¹™ÊŠ<ÌюÅos\n"ŸóZòà¨Ãã̎ÄZ5˜*%Â!Q…tPçS5Ô·=ÔÝ~ƔúmÛ*¨´z§{"zÂS6ín½¡ @¶ov‚@¸ò‰kÒ`H>|¥¹ojè¥)`q}Å·§Ù[Ј³×^ip$0;¶ß²Àw/ÿº\ÜB: Ûù×V•H”¬.҅  ¥šFîÕëd'b¨ÇÐ
+¹ =‚äüÁjê²¥k¸Eâd°AÂúöõ@ y‚*Æv%¢‘Ò,Ý>þ}ùzŠ…X‘x‚>EL$&‰¥É`N¯ˆ3¼!â3W,®ß\‘&^™“+lXO—WL¿­
+•x©º:j(ŸÇµ¸‘yІÉã¢Õ‡æ¤8ô¤Ü¹‹[†ÙÿM‚HÁÒ<nµ9§ÆnÛ¦±3 C-ñ‰`jŚ¶'YVþtLàœR@>ð…S²#6yOÝ
+[ýsö`Ú;øEª‡ïîé°©úqñµï]þkù׳ɝœ¿5狯Kl0M‰ ÖŽlg HqìEIhÓj"¾˜°‰Yÿ<¿$IâìµK@¬úJvëÝv‹֓$U[üfP¼ýð7²ÛÈqjbn›—ûЩ»Wë]G“—©ª©Âcdžòf–BȬ´îµx:DƖ…ÍËÔĐccbÕµµÉ¶ Ác7=4©ysŸ95xQæ‹Qåò0œtââÅùðò÷„V*„›û{ê\٘^7dóªC<[HÄñ„"Æ=qÞ"M2;%wïeö§4 ˵»Ç¾ldì›.$™ñ#Ñ|7&hè4ËN2m´+i.°¶¤ü•dI ’º²¨#¢*‰ÈÉ7ՐdêÜcïWÇc#AñS'ďÎÒøÔáu+õ°•$<L_͂ð âÑg¬UYÚÝ#g&ðZiÐ¯\îŒ<Bz"³F”GþŒþ@ØO3åIÏÁQÂ+ÃÜkٛ
+öLT-lX½„×RL8ªÕzþZ›ƒÑ˜Skº13ZÒØzš=,n´¡ìm'5ãÊPÛ,/K<9? ÒŒ*É:SÉÜzóúžçïËS)> ö4³T©‰RÉ:©d€ € 0 #)êç‰Ì·%FR3ïûZÖ¸ìÏ'HÇQdɖ?]^ÎEœxÉìz×·óÿÑ^m»qGô öú%ÀЎû:ݓ7šdd&q eôŠ‘ð¢4ä|X>$”S՗é^qǤ,KÜ­­ª®îS—S—7ë;¶qêÒ g’™ó.NUl¯e$ÒÎ4lð´QÚ´J‚ßDž—*2,ñ L Î}JCA+º!õ¾ª$CžÙ<XѪ—1:,à”à9ÔjÒ ÙYêéñ±FbX k
+Vn7|d·µP¹E¹yÖÑÉ( hwáKÉçLo’%˜¸ø&ÓÁtÊg‚úí%ZÓô*`}˜‰ThœÂ΀T"·üjq±”¼†`Ëß‘Ž(…’S2
+ð6£«‹«äuÅ/sÙâ%R2$›$ÀÓ8~ 'ù˜ì¤|/qÀÂißk#F­ Ê8jÞEgãîÿ^ N…Öy>PMŠ¥÷Bü.…U?ŽíqÃß-^^aïÁgR¢TìŠ:ɀ‘AB°Æ]\áZcî)ߞ¢1úØ=wm8Ç_\o<%<*näs½øf÷~ë{×Q'"%öüׁq߯)¶2S%s.,4UžW]ŸæÌôaIŒËâê&†½½“ý“p9qÇÆþîñÞþ ýª`°àá×1Ä_~8;'';?Æ Y[›¿í´ÄÉñ›•øMJ|ûãéþ
+#žï-ñêˆ'ên°KúU¬¾ÛÙ;~#Nv#u{ëUˆ[‡ñîáÎwâÌÿYþÄa:Žv< P9ƒÎÞAÒYe07HtœDLdo•Çu†‰'
+Òv™1²3yýw½xÆÿô8ÖÂx‰n¬T<O;G?a¸qÞ쮶æÍj÷)óW„ô/ÈñIXq(Î~’âÝB£œ§bsýÀÍM •S3T—Êçê&ÚEh]$ »ÀŽªEýÃBa©6
+«Æ´²§$!ÞËZœó´Pd1ðaˆnécœ4€ø¼IÒZñyE6OI‚tÓCQ~KlpUŽ’ӵʱ"É9¶aÄ9†¹³áˆ¸˜öM’eK</£®Ž£4sŒú$ÁP\u^¶ªÏ«<¥ó&­Õך–OjK}@_ÿ$”DG¢Ùª«Ù:8D€Þœgë²®+ÆPDgµ óe«Ç6l•&ð׺L
+¸BnÏ:ëå‹å`ÐuM÷¿ˑªÊtx}Æ·yjj—+Ñ \BÝM9êøÚð„¢Ï*15óŋC ­Ý†ïë¸k<).ç0ÀL˜ü+ªÙ°C ¬à©ó5Uj·'#à¸>…Éf#Ç9ë”|/ûÅxišL³pE­l5Ödöl¬’÷9¨ê 
+77 0 obj<</Length 12088/Filter/FlateDecode>>stream
+hÙ‰þk†¬ýányöµZܽùFgiDùߍ•6y/|Ô2ÆàEðŠcw—åÙóÏA¼ù,”Ô6O?ö±üô.‹Ïo–%•RPüŠï¾,O^ýþoÑùðôXP¢šØŒú C
+Y„Œ#%GfH…ÙT|ÿäöÃûõþæùû×÷«xõñáã›÷Ÿžê(ӓ—{ñíÃÍí›òŸÜß?<ýáî%BTÝ@ÅW˓¯>|þçúú_âˇ_ދ?>ürÿîÓë_î/^üù/ß¾"¿ž}m¶P$éàŸôS[ÄÚZ'|’Ñ8Ó<Skñìïÿ—ÿžÞh­ÔOŒ.gyq‡ô¿[&xb¥r¨+½K "’¥Ì¾]¾C°K-YÊn©ÔFL‰”ÎgÔEB 5JÇ˄}v"À–-ßZe
+ßz|òTˆ)âôŇt[ÒX¿wHhš¿w(ހÝ5ŽúÈŠX!âUÃeAM8Ç4æ€Ò " $‹Ïô÷LGPŽŒâEa’Y…®P+#­eQÁ¡ÈQì*âS+„Ø3«‚ý ðÀ[᳌º|Z™2û«’&pö`ž
+Çì²ÃOø%ð˜á—`˜ÆQ¾jtš)̈æFØ귖>Ñ £-ví{w ãäi0õ‡Of>:©ötL(ÝSª’¢™Qc¿òW³ÔŠŒš’ÓøJ6´Þ+ÆméA8œaÀ¨c­jÙ‚^ÊTcÐèšó*TÄ$Ó)4µRfZv {‚°D7v51PÍOŒ“ZíœÃñþßLtÍîOþá\’AR¨F„Qð̅6(Ê~û«CüöùŸ#^b
+œß 4`<ÆzöÒ¥U…‚«0Â|BŸPñî@T2X
+&œó!õVêUçE‡:v½3åüÁ¥ªJ)ìm¾°ap˜9M›éEa\½5‘lDx,:Þ§ÒÐM¦Sf-h.Ú0²NRŒÓõ¤Àq±,‹ŒÓÙÖÇémkfœŠœÚš8õÆé”
+œYš(íc”Šœš(hzÐR3Cå1É<êó¨Qô¶
+za–Ê´6±f-½"Žµ7:Tã՚ÁÒ©h×؝9"×jÆaø+ŏíhh$N©@g4™3-™VîÄ<>J1N׃*òC¢pµbÖZÎiHç4©3ŽEzc89µ5qêíÞ)8³4QÚÎÀ(934QhÖ=ä¡"g¦fÎcò9Ù²å*áuañòЬþÆïK—˜uôš8VßlæP ¸ sâ'²¨ˆàyïãT)ƙôàJuÙ\³µ{¼sºžƒqpYÇjÈl댢̞W莜ٚ9m]fœŠœÚš8mœÙš9˜K:‡S‘S[ç19m¡GBò<§sý4Î\c½6æ¼ÿVGL97(÷ìyŒ÷ݹsömzç4©ÎiO³Î©7FÙƨ2'”„Å;Î4äÄÐL™ýÏ=›B„q'{ԝW¥f=ýžc<Û:DžhèÍ9íqÅ®ò†0N•bœIÎîÌU[»Ï;§ë9Hõg%çTd¶uÆ©OOÆiș­™ƒÙŸ†œÚš8OÇûfGÎl͜€YiFNENmMœÇät¶…=5 ێ6÷nä å¹t©YO¯¹g[‡Ê¼Z?¿½ßNÕ3w²UFZÃoÑcÿ3NßApÿ¤!‚7‰ÏÃöÚÆ©Rgœúîì”
+q‰|tÏ#eÜÔt:‡q¶–q¦èkȞ†ƒÐ: ‚ãúäÏÕ4ΞMR]`Þ-Ѫ¤]ùN¶¬Jè©èxiíÈnè ´NBW&’Ž(ŒhK-$ãjyšRLZ!³Û0N
+uŠ®·†q…¢ðڊˆñç–rœ5ãh<<“wuÔ±¹nŠ¤BtƒžzÍ2§ò©­^ÓÕë5’²·•|4kx.
+þ½[‰;ñ
+>È$>ˆÒ§
+Gñ‰º¾t®‡ã´¯{Ûµ!ØǼ¯ýÎ¥Ö僔5Ã5”¨g¤[\¨ˆbI˜÷ۅDÂåÎÚ2O‚˜¸íê¥Öå-ò´½0L±¦sؚwA°Û6T”iö¡¤{"·é91¸¢X¦Dg݂…€F_0[üÖ)ÂKÒe¥)~ïH¢U:æ E~fJè¬T¥¸u R•ðjD`{ˆ6„| U—*ž;+m‰S×iÏè$8n1câ†éÍq‡@7})ý•!í\?H•€#šÎÖl–N¡ø”€o…¹2„
+¥|*u‚iaýAOÜ gsÛlLñ߬WËn\Çý‚ûwI.fxûݽ5eÅv;ÁLà…á…2¡”€ˆ
+iu2YQÚ&¡cöN«V@œŸì·ÐŽP¯£ f+JÜÓ
+¼zò ªRë´´ð¤cÊÉ x“sìÜÑ-u­}£úšl(mPº¼0ÏeiÑj™l\&AÚü.g+NålJ’Å“Ùr™è֙ ×rsÍi§xÜÊ}{®ïŽÐHrŒŒVœ¸3Ü E8Œ9ç‡ÄB‰{^XG+JܚT ¥8rôY‡¼­qøâ¶d`˂ªK?ñƖU—~’óž­8ïàøê<þ–ۍ5º^œ¾4Ž„Rß³UÍ—").œ®”§–F˜k‰{Ö
+¥À;bJÏVùÂ-/¨ÅÜ¿hQ4àh`Mô¡ËíË:ÏÓÆXÚWGli_³whøcËM/<t€/&”)XŽ¦ñÀ¸ÃP}æÇې­D›­8¸,Ÿ­^¥æNڀ͔,ëMj"‡|’z“©79[q4Œêh8>
+=3I9
+W"Ý#Îé´H'š àÉD—¢Ý
+– *þIbo œ
+ʺå3„0;!ÐuiVFœ}£š¸ùú
+Ö
+Õ³Â+ˆ4
+Ê(
+Un1ÂYT5ËéùlÔZ2>MG³õ¾!¯v£>ENä‡­£‡S=PâŠ,rˆ"^8¦QV(ÐüñÂA•{ˆŽä$Š‡–äp
+>öSbâdï¿AN)u§B.aR«jâ5F?m’ÐÀ$¡®Ú<T¹ÇèH΢xhYŽçà³a
+)åT=Ôr«1zA
+ÈÊÇîAÈ%FCJÍCÍr<G%‘±ÜB€$ïBŸÙ¢ÐØ«3BFÜü¼™æVÈ\er—cd¹He„èá慇.שYT5Ëñ•@j|Kq6 ±+ÑÇF¿ëN›ÜÂ
+„«JÞ-B;ÈÖ)¡r(®¦‹5@jÕ¼f8Ž¥ÆªJk:€¥=e•Góâp /ÁOç ™¬^–-Øà0,õà)¢4œÐ:-Ú#EìX|à‹ÊƒŒdێ>{/ˆE§7ÈÿåʊãEê(£'Lðó®uZþ³¨õy]Ðlր™@²=u·õÖÏõóÖ¹@sù¸ü²~b™Äê± ð;)Ñ_ýúxZ©[íè§ÆË?Mëéñ§S
+FyÇ3Â&FšXZ/ËeF®MÐi­L&äÚÄžÌÂdBæϒˆkãv‘*û"£fð}ÐG#T©Þ
+°£qå"Ôß_ÄïoFhßàMªÝoQéÏ&ü‰ÌTt†|„Fw¢ (‡*qF£¬c\ºíÝÊ&‘ˍîD–N;ä2}ìF·Ü”–Ñr¡Ñ`¢k%T@čvu®ÜàOó¨ç2B£;±`ÉI••Ñh_gvS›\Ëe„FwâB¦À]¥Be4Úיݠ{:'s¡Ñ`µØ¬,ï
+?'¦Ôø©BœVr |W-™3Y‰ž5âr`¿õ¦žÄñºVE!Ây¼Î§€zY£…œ ¢ìf«Å³¶ ö[û°nYŠqšµ‹³Ä˜eÅ[ÉЃ›MD½©WP®ëwJde{Ï~Ÿ/a—'@Xî‹ÜWýà
+ øs¾¸
+®0ô#)âmôZHaÒic þUZ'W›´¡ØL(
+ e‹><v Q„½7­sÂtFEâÕ§ÿýòaBØNï¿|úýÃôã>|ùçïŸþý¹Vˆi:zAd03T
+Û‰ø@6{ÿÖLÐü6ü|hP/pÆ4?R¥ |>¡ìaðj=.ì ÐÀ¡yLJ‹lÅËonlPX2F
+=Z‡wM—<6‰E¹Õ,@
+Ú¨ T%}'9Ó8!‰[¦HA×hÔ^YÓUÒ·!g
+'è‡ìûøD2è4šdÑi‰pª’¾“ÀœiœdL<"n’A§Ñ`ÔC»8ªTIßI`Î4NHòæƒm9HJãiœ#®
+ú>QbðÏQ Zó(Û 9JÆ‚Χ*»¤«LÑ/ù„àf)î èÃ ¨å 4vIW!§
+O‡wWš_¼Š…+ٙi…Õ:ÆéþRtÑGCùa¾Þ½YVtóËO÷¯iõ´Ú-ËÚ<w²ò|½|ÿŽ¸Qg r9J°E¥ß5,aÆ·×eEÔäù%3j¼òʊÿ}Ò¤þDg…’öp ê•èÐH†²ÉŒÚ,wäg»hñ¿[4f3û%ÛÍÍaÑìs\4&?§²1~R‡¶’ß\â³ð12n&À‡ð„©çt¼®UQˆ8Q_‡zY#¢5’A´ƒÅµ±
+y*³¶ ö[û°nYÊ °,ˆ3ü
+åð™ÝŽd1WÕ*·y‰D µÆ$÷ž¯e¾„}¯ Ë}‘û]G p¦,¸
+@dòºX}Ù­Ž
+³3…"7; ¨ºµ/§¹ÀÚ[ß_âÛû=Ñ?
+F‹7Ï}Z9J¢1f<ˆ§ï€æ0o ‰¶Ò&2ìùwPnød8.¥'õnn¬q[½«÷ʙo«÷t2åÌE¼û.™\œªª~»q_¬ÚLsjšºüa¾¥(
+zÓó­ª÷ŸR lSMð«š^O®>M͓V‘q܂;<x±J(AB]©%ÃìÞÃqBÚ%{zêoƒGÈ¿Óæ1㐿ñîüû=?|·9“ñðC%
+­úΔÕ&Α⦩Ñ$Ã<C£]x¼BñS‚)—¸éßC<c—¼ó ˆ&=:Ä+Š›‘ùˆb¦ÞçîDȄ¸^£°ÔD<¿¢ R–ÞÂé¹¢­ 43LkÄ«çR§¦ˆªVZÐ÷Ógþ6(SÐ(9øMJ´ðâî·0Ý]§¯Õ»ëÝ;ÔŸüñ?Æ«m7Ž‰~þ¡»èVóN>®Ç°a[V#yòà8²V€lge‹ýû=ž°ŠCi#±çô©Ã"Y¬K§fʈ—¯º»ý~aT˜4ºG‹(Áemà:štôYè$LvãOoÁôpN;8€6A¤eßÑK#Êç¥IµK#‰p@@E‹hè‡Q°Äa¤dsšýýôýI÷>/†
+åýà
+Æ®ûZh¬@aH“ÌOk¨c:–âH0Î.£æ˜'WÎYƑV Ç'ó¼ÍfÑp*„qŠŽ¢l-u¨xyÁ‘V_ŠÕs:ÚåÀü©Æ):†^¸Ðِ©¬šœ†J0ºæO…0NѱèèÑJ3Ά°µ¤U“ÓÐA$ÂG…QDþÑîqʆ°…„Q“ҐAt'î‹
+£ˆ ñ6Q¸»!l!a´Pt8£si+®H 0ŠzÄ~6„q¥'æ
+a #¢ GµgTؘc™/Â8EÇd5^Ww„­%­ˆƒ>Së3:èJ/á5Â8E©"͂³!l-iÕä4tò¡8Ÿ
+frØà
+ ÓÁ•ï8jmËW0²Ð̹}ßëÉÆ8bÁ[ü÷úÂvï;²–Æ;¤·\¤¢C† Ê— „Ñ)ÍirñGl7•„iFq•”¦à¸JeB*eÝdԌAdVÌL!ƒ1©¬²Ò>IîJÈßÁ %­&›„Re••öpWÒ8+” ŠB°‘VYiŸÞv%ƒCюÛ!Z"­²Ò>{íJëɽ8‹äë"­²Ò>:íJž
+Iävá*¶[e!š„ä#œ<p”<Ä1UVY)O,ž+!˜¨(vzžñ²„ReEJ4k͏I#œœæǤ©ì:/´¥UV”0G¡¤"j¥PBVœ•Pª¬²ÒÞãïJ§â…Â)%¡TYe%jѝâJ§byðh„S
+I Ò*+åv› 9¤0Åã™o>
+De½)ޅРðÐ¥(omC:ÿAíG*4“ïBDcŠ¢ëQ‰‘p±¨îÌ]HÈg‰šÙ_»¯ù76f:Ü8âßD¢—‡ï¾;»§ªÏñpl½íþ‹âF ñòõQw·ß/¤#Òtþ.âRÐÙi$’D áè-­íФzMOm1nÞæ
+ùyiyíҗb²@‘Dµ‰h
+é‡óØv‡‡ü”ËdvøÓ÷'Þû^dE*š¯în<Üàü¦îׇ»Ç»¯·Ýáß>~z¼yèþùøøp÷ǏǛîÅÿ𿻯]_Ü=v?ýuóðññîÛ×¥˜a)W3ú{ë•×Æúý·?oˆ•;²[:E§ƒaýî¦é÷ãa§óùâç}7¥™û;¢Q—Ë –cÁzx—rCaQ¾œ ­N˸°T¡bU!­È`\¡ÖYUH£4!æõ™Q…4ÄÅÊlŪBZ͠řS«_¬j¤ÕZd:—„U…´ÃâW.ŪB-¡¥O$Œ)( ¼a䐞)­È}AŒÏ¾1Tû| )V•2ÒÅ?NÄO—Ë;3•“>Qàs«
+!+zËÂ
+헦*VÒ\ ÉJÏb­
+FxJ<£âhÈá!S#ŒSd("úXÆِ©¬šœ†ŽÇ¬¹?Â8E‡úê 8Â֒VMNC' Ïã¼F§è Qxƒ+ÀV’6-Ê©HD‚S!ŒSd$d¬¯[HÚ´(§" ©P<ª
+'•ƒŠ5¤â—ÍÇ)i„̨è.}ñóŠÄ²
+ÄгzŸïgÖÆ„k¸ØÒT¢M¡Ÿ²ŸR·l!RP1•7+]щ2úu[ý‚#ÞÒ×4Ç´ ù`G4·¸>Dypdñu
+êÿ„W]oÓP ýý÷šÝï›<²
+&! :¯ÝVJ¤©ƒ¶âßsì4Îu¦ Mk7>±omŸc´hez»«ãÊ?ÄܸXïŽs ´n°³Õ ø¢ñ@T¾àî,¨ïÿ5ޛïº ™”yŒe(bï¨ò¸ˆíۥæ©ŽZ —”ñ²Lx$_4oTHʚ†ëÈôfÊÂSEwÕ´-<£)œŽ-¬ìÐxöÙpž5/2õøͼǔÀ:Š6q¦ç>¿ùzˍ ´!•0ÖÎz¨A‡IÙa¢¡ùÆ:9…$È1$Éc )T™“4$±5ÂÙáÿj͵©VـMŒŠ‰`‰Ù D谂âÜC¬-3¯ÇÅ]µ„
+₪ý2UJRíÅH²>
+RÆúU%4®ËÊ¢½I?Ajñ<¯À]RH3/F’•M:<Ï*$0rŠ²h/Bš–®)Z,µmí-Jß+ƒvb qa‡§©L¢ËMi;eQNŒ#›ŽyÐGtµh¢” ,ڋ‘duˆ8¦è¹ìHtãØCâõ"@„eeÑ^Œ$d/Hh¤A´¥¶Ì¼IÖAÊh*ðÉlÐ̉Dù PÓСL~%5T\•A;1Èvs N~mÊ´²h/FÉ="% ‘éU*]HÊ¢½i˂Ay}ý’-Ð/IY´#‰Ì$ ýܺÚÚ°‹õo9÷"¤ß "šÖM6æ‚`2öðbÁ©f¢k
+º°ëHw~3{¾FïC’q‰Ït}q±:f³Z›×Hg½úB"QõÇ8KƒñâjíÍÉ>@3FæÆÔƌm1x ±Àeøiñ„5"ÝáΌà
+80 0 obj<</Length 6486/Filter/FlateDecode>>stream
+H‰´WÿrÛ¸~¾þ”nN0~ÀŸ‰“\“ž/i¤™v&Ét‰¶™Ê’O’íó½W¥ïÓoAR&™fR{l‰w¿Ý» É®Š³_æ’]
+Á\<Ïn’ï›â²ø½¬f…æ%sÞp¸†{6sÎÜW™òßÙ6>+.4+¥‚XP$D/`M‘µ§‹âì…d’-.!,‡Xü¯¹öÖ2#¸RÚ0kaÐ+Í7ÅÙù¡d«\j§,}*i]ü´&°Ãj[ÌB€vÚÅC1¹xògl9]|*$8ŒQ–Å'+×F{¦`mٙ¼­Õñ@*g/tãc@œ‚!$#,£ã/µ¦-¹w¾Ñ|³{¨ö³×[)“2ˆ¨¬eɍSŽ)SrÑ*ÃsålôœK)utq]±6„ÿØm¤ßm±š g«z¿º«ûGö~òæõÛ÷Sv»ßÍȪÀjÒª°Å³lIðÍØH|_¯«[nY½=VûírÓrê+z8^/¬†ÀêXßWly !€;ÜÝF ‹ŸˆMc{‡…+#ïíæ‘Ýï6ÇåUÅ®—v8.?֛úÏjÍ3j®%Ì=UÈ&bŒ‚ðdC:Wõúvܑ7õž­«ËåÝæÈ»К­6ՒD®«ÞQéL먒&Ò®ëÃífùÈnª›Ýþ±q®ãoÃj®ªÃO¿ßՀ’¸õ)nÛÄ-…ø÷áçh¾-ïwõšÝm«?n«Õ±Z!¼„À¾Z®Ïöõ1qNtdºlBŽ«^i¶»#Ŏ_³õݾÞ^!2àq!uãyMâ¡;y(›@‰2F×ú
+T×|³Q ^„ÝßHB‹"Ù#Ÿq 95]ŽZ`3z‰6›®Q‰D ô¹J”p±>}‘C
+ÍÚDïÈIdN4-Òã•Ê´H"“k52eÐ_çA”^§þ D¦çÁe˜·4Wf2¹ÖM¯õ5t(j€‰?$‘éy4ûŒ§Cz™Ö¨ÌOI7ƒÔŸ’Èô<3
+©L‡$¶r­Q™ÇóôɁ^¢'Áø¦Cæp‡$†2¥Q‘jš©/9ÐKô$%Mà™»’ʔå¾Á‚>œeMô=‰whˆY<’ÈH*O‰+Ñ6|eÁÛlH"Óóϵñ™L‹$2¹Ö¸ÌG¡0xm†H"sâQw$™Ë´H"“kË|ƃÂàDºYC$‘éy0ÜÊ,ýNH/3ЕᱼLÓxô= MeFÒ!‰¡LiTd„s\¶49ÐKô$†èÌÝI eJ$‚Ì|ƒ‰­eêËIdz‹¾žõÕ’ØʵHFñ Ô7x0šÊ´…‘D¦çA©"“éÄV®5*3ÂÓ\áH"“ðädP@œNc÷(´˜†J$Òq¼iØQ%±8$z"Ð>ŸÞ>øŒ u¢CFœp©p×è%¨¢z—5x¯¹ÌNí¼xº(Î^àüK¶¸,…Â(Ì邕E
+ ‚ú[)-w(´‹›âK3>Ýf‚ t©Å
+99G‘4WEhz„ÈDêF³T°7ë_@×Lg¼ŸH Ìð`)›àö§„a‰µ‚ͽrÒ7ы©uôÏr=Ý'|‰_d¤x¾(ú;咒Ùåf€Œ^‰mNµÈØåFárlª5DFîlÈNtz¡"c*…c$2­2vgSÇÓ§÷¨!2–Áüo3­2vgS“¼I/°CdäΆS><Ûw0Kñ[”×€3ö­Óݤõ9ååROÒÀÝäÉ8ìÚLµèètÓ1ÉÿG’²%˜ü¿›Ä6$&èðý$æŽÿ~ý#ÂQmñV~?‰üžÄ2†Ò Ø+‹«Y_ 0&¸ϹÓÜjBÐÁ(¹ ä£2É{åpٓ2‘8µâ“Ìf¯ð÷KaØ#
+oPPÆMlðÞ¢²â<Ác Å-éÈU6ÅÇ"à~£R–€› LYBàΦ,b‘ííª§ù/ëÕ¶ÇqD¿€ÿ0»vÕ÷Ë£ÉĂmIF°J ȃb1 ŠŽEFþ>§jfº«z‡”" ‚ÀݳuNß«NYƒ&ÎXA³xªÙ{‰ ,V²¨JI)¡î夔ßm¥­Y¬ä±¥A)9lHPJÅ4…h+Á ’3J›â¢ä!$‰h+­}kWŠO¯%­¤Íb¥µíìJ‰
+Œ¥÷b2#"bšŽG‡h¬
+™¡9›!£>Sä\DÄt¼ádäÝjHXsL(ù:‰;\1Ÿ1]½«Uï¡!b,͚cL.ŸÐÉx{²>Œˆˆé:xÃ)«}^1–fmÆlèÀX'ùÎGDč mLú–݉¨‘±°ÝAÏIû³ wA¿™ÈÂzôN|€g@ãøTùÓ²’€„n÷hœP°”¥rš›Ñ27£éX|†Á?|D‡ŠÝ͎®_¡nG?ن:îB¯NÔ$>û.ÏÒþý€”baÍÑSr,Ü,‚ÿ¶;]½ØÒ1î~Üÿýõ4FƉ<
+/®òÊÐëÂô`1t—Õþݚ9 cÇùw^ V`÷‡LE˜&D# þq†CvÖÏÌä0Þ¡ÿnØ
+X’ïÙb‘DŒƒíòÈãŖy±Kâûéϯù%áUšqX1N»§ËõÖ©´ÛtÛȸýNJ4Ø€~Ÿ\ÀI¥£Õì=­Þgieí\}·F6Y‘»Ž`è¥\-úg@ç ºwÿøæLú|0$ۈNH]"_ҟ“¬!VIšLÄaÁ‘­±êÙÁM–+Ç
+C+X²É
+1ôď‚võX@(žZÁx\7†,%K>»zó©d±aíÝ« 2z<õþÀ[>ÜL7øÿü"L/)©%ØRj`•°”7Ð|$²·ùˆäÅ֕ü“F4 ö¢ÙÅó–J 95*&è«B+eX¬¥R.G­ä”®ªÅJè1½U«ƒk z-0l0ù
+Ñ,Rr0ûÕH%g`nÕZœ xËÑ,VB³j–JtÊÕKžÅKóÑ,VrÈìtR]Ʌ£IQò_ÈBKD³X –?ª³s°­ÔEt5껦° 3eꕐRPh ƒÜ©UzûÄÃ¥H^#šÅJ°£¶&Æ¢]ë¨5–y¥P9sž¡F4‹•ŠÁ#ŒrN(%–/x›®—óH,T)ãH\œ‚¢á“Qˆ&‘ŽÇgÏg»
+>Giή
+ND"'
+ÔʳjE˜klùvs6ÉZ²ª€¬F.!TÌ|>ŽÚŠx,*UE->©+â^Tš
+s¶.»Š:ÜèÒV¤`…Jç%±‹¶GKCòpóÆÂ!¬-gŠ^„ÊÊ° ŒrÝM¸Ã!{Üܜø³|@ȳ\ëS† ¿©ðƒ
+?ØFSPêÞNŽm5/ñ¥\ΞÀ–ëÆog¦iâÁA™Åxeó‰gBÂa/5sZ …Dä°_º~)vÚÎ[-–…+r¸˜S§|‡Ô|¯$âa{î‘Q‰O„4‰D( òB±¹E!Ø“Œ3ð;*Ñ΢¼RlKQ C¸ÒIOÔg‘,Ê+ņ•,2H•<iª”Ey¥Ø
+83 0 obj<</Length 2736/Filter/FlateDecode>>stream
+H‰´Wín¹}½JE4á×ð(
+›mτ²2§_)r~síÙv¶ŒyÆ9Çò,˜>†“õõî±Ø”ì²Ü–»Ñô3NÕÝSy807f­É\:Œp¼ 8€‡ù6½-ÙÙÁïVç†]—Åî~SnYÁúg°O‹û0|ƯÄÇ#:’³± #Ùôˆ€amJàÝm±{ÅoË#„ÛÅÍí+6«Êb³e;:_lïªâ+[–Ëõæ++Vs‚þ…Єuµ™"€mÈ
+ÆÌ7‹VënjMk¦ÑAÁ¯BfÞhÓ7Ì;Óãݦür¿ˆZΜNE<Ôa³4pëþŠÓÍߺƑSód\Ï­ÍQ9_nÙ#èÔ¿9d’»ç.®•pÍÅÛï«mù*dµŽWup£íSH¨˜®kDsƒˆíBhA
+í?_'³0¶Cøhôqú~´PcA.¥Dx\ìnÙ 2üfSÀ…ìøøâòü,^K֊§C¤_t7™¥"w™•Z֖%
+¨c˜½‚ÍôÝÓ¸&€þöˆÆM ˆ.Sªã,Ð ,ˆ ý¨ð§cchî PêrŸY†
+@=n ð¸¹ëø½açx«Q•ëïJ4R”=•äMŽ=ñUà.‰‘VPpê ØbB4 š5ct Ü¡eg¢Q%X-£ÓM„F¤˜§Mi>ñt A©ä;(ÍDk Übuÿ`ӛHÇKÐÖ
+×PóÙ.H3í–Kz3áýLEÖ:<Iëº$½U8{‹ïÀÑÏ©n’ÅO^äGæѶÀ@ÒúX¥xjb3Ó½H7ïš¹˜eªƒDrdBÏ× qô˜Êuê]„¤%=VeÇ&:E¼omjgj›öw$¼<r²cÞÔswlJ3­Mû»IàÕ#IˆXŠl’Ð¥m°I+²©AUµ2Ķ¿«‹ÔÚTïkmj‚M¾ƒÔµ‰Š‰W2  ”ÎQ»êƒM2п¿ÂkkW©ã§´¯ã§ÿfÜMèº@&Q©ML[X~ õr`Ø
+84 0 obj<</Subtype/Image/Length 1903/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 197 0 R/Width 736/Height 355/Type/XObject>>stream
+H‰ìÖÛr¢\EQyÿ—þ´!n`ƒ>–c\´…Ym)N(îc¾†ÙÃÝF‡|Žvv&猖þë†ÑƒËÜ(“G3ÿç€ÑƒX幙Üvôà=Òm&Ÿ=wô`¥
+=>ӊ[sÍïmóhø¬Ñ㳌OÊëaãُ nH5+4tåt erÛÑd!ž%ÿ<œmõÍt }¹F¹}ƒ~í{:]}¦ò¸¯—’<H÷ÓF“™ÜN³ÕùÚ_É)£ÿ™=LuÆSÙׇØôÉÁ]]Àÿ‡?
+¦îï¥ï_iµŸ½ä6X²€ìÑ} î*yÏtïðåíۙš·æ7ú®ö•é{ô0n»ïâ_‰ÑŽ£Ùtîu¶Î݁[óû£Éÿ>ºƒwj-MæCG¥}½¿s~zll©ò—kt~³+¼þ98Ý_‰ÑŽ£’nØ??Ê£³ïgÛèìQI+~Z—9‘F%Gµüþ%2Œƒ®|"JŽV”w’zçÈè¾£²}w¼ÿŏnôñ£j^ïáӟÌÈhiTΟ¼_ßô¯g˝H£’£rþö=üúѬ¾Ô‰4*9*èÏ»úôcEîÏ?–=ÛFgÊZß÷䳍³Pù+1ÚqTÝïÌCoß]£ç³Sµ8ªþåÕ7Œûn>û›9Ü}ôüãÌaÑQõ*÷ÝÅ3쯇µ¹·ŸýÄÑó3‡)£»x§ï™¯¼DpFŽîeœùTõú6ºgßÿ¾ïÿÿYß÷Rî.‚ÌÑ=Í÷Ýqè"øÑ­½dޝû}»î4J0¼tþõ0L>{tß»\'
+U©ï±‰¾ÛÏNgxrߟ}93JÒ ºÝ÷tî£g TiôÖ(І¾Û£ö™«ñ½}lßßþöýõЗ{ûYÁMGù–ún?»õ"X|¶\Ù£ò]ò×Ã1}¿1š¾ö]œ¾OñÒ÷c|ØÈ°ÄEp¯Ëéúѧûܾ?cÄH3÷vß.‚;Œ˜ñlvüÐß÷Ƌ kT®¥Š#ú}Ÿ±…›üc|xíEpòHßq^Ân?{ÊEPqtí5ÇAro?;´GÕû¾vĕz.‚öhåEPq¤oZú/‚Š£“/'8ÇE×ä:\ýa«ž¾N0Mß$Ó7ÉôM4“Lß$Ó7ÉôM4“Lß$Ó7ÑN2}“Lß$Ó7ÉôM2}Mà$Ó7ÉôM2}“Lß$Ó7ÉôM4“Lß$Ó7ÉôM4“Lß$Ó7ÉôM2}“Lß$Ó7ÉôM2}Mà$Ó7ÉôM2}“Lß$Ó7ÉôM2}“LßD8ÉôM2}“Lß$Ó7ÑN2}“Lß$Ó7ÉôM2}“Lß$Ó7ÉôM2}Mà$Ó7ÉôM2}“Lß$Ó7ÉôM2}“Lß$Ó7ÑN2}“Lß$Ó7ÉôM4“Lß$Ó7ÉôM2}“Lß$Ó7ÉôM2}“Lß$Ó7ÑN2}“Lß$Ó7ÉôM2}Mà$Ó7ÉôM2}“Lß$Ó7ÉôM2}“Lß$Ó7ÑN2}“Lß$Ó7ÉôM2}“Lß$Ó7ÉôM2}“LßD8ÉôM2}“Lß$Ó7ÉôM´íƒ‹ƒê66:|ÛùíÀ®¶ú¶Â©mSŸ?²8•mìûÍ€slÉs÷-pÊÚÖ÷øHàTµ!ÎßA œ²Ö·ùš³À©jKß;¼œcm›­›µ8U­ï{‡“ìÔ·À)ie™sSÓº0';Ö7%­í{ò§ úv§¤U]ÎÜ¥ÝÀ©heßs8åìÖ·_(T´&˅¾N9+ª\˜ê›zöì[àTÓåâRà”³cß~¡POw”=}o|øeý+À´û^ÿ·ÄÙYoN=»•i6k–8{Ú·ïaNw,qvÓR߬?˅„·&î§c»öÝxG|+mÿŒßüÓ~·âzûöÝ·ë-d9¥¥ðúËç¼g÷¾—‡k>×ÔyØxšv:é{}»ô~q›õþ°î½¥éڏuíùáÞöî{qº­Ja³Mç/á¯7·•&çÚ»ïÙÀåÍÉz‚[ýƒyòòæ\û÷=¸º9ß}·÷òæѭ²ß&\∾_¢¨›kÓ÷8h7o®rPßÏÂus¡Åö6Ç9üµñàmÇõíÞÍõŽì®¦o¢-õ«oîl¡_yskú&™¾I6°¼¹7}“Lß$Ó7Éf –7w7×°¾¹;}“Lß$Ó7Éf–7·§o’é›h“˛ú&™¾I¦o¢Mt,o"è›dú&™¾I¦o’µC–7!š)ë›­”åM
+87 0 obj<</Length 4110/Filter/FlateDecode>>stream
+H‰´—Ûr¹†Ÿ€wÐ%ÙI­C÷¥O™xjˆ3†ÙU©TŠà¶Íòdž~ÿRKÝ 0¢¨Ú;äµþ^Ò§uhÉzï~Iö°î æ*É«ªdOäû¼wßû«'ٌõ
+œsX\Õ[ΰEø­¸(˜•
+f•òFþxšòO;÷Þ½—L²ñ=ŒeÅaþ/xQôàJšƒ–ª`ã§Þ»‹µeÓ5\Nÿ©¤qáÓ芭§‹Þ@p!d§¿ôúóÿ8mì›ñŸ½«q#q1:(1ºø¿_™`bÍ’½0)ؐ}ù*Ø]ÏX.-³Zc«
+[-%/¤k潑ߘT8Áv€?†_ÁÐV°„‚²a;)4v[?Ì֛zÅ.ëõt5{Þ̖ ï»÷º9 *è æ?c…äNYíuüŽMvŒ]©*lûl:­×k¶Y²É|Îғ–Ïõjâå×oÙl1ÿ¸›-ØÝlý<Ÿüøg
+¯Ø—óëñ·ÿž_ݎ¾rö‡Pÿ=yzž×oÙ÷Ù95[$èÁýóì®^²áò®‚66„ò²šm6õ‚MÖìóP|‘_y“—±p…‚%RÉ
+­R`¸ñM`J¿H¥,7ýoÿ—a+(Àh5=í*ŽÛúˆdqx&Sšë"ôˆûÞRáûDè<Æw›¢bÆñJúc$š‘“ÌZ”Uߤ‚F%V܄®eDÉ- À¥¬tXØÒð}ÍHÍl¬à¦TA6.t²øV¼²ÐÉJbŸ«IvG´yNÉEé’
+ž£$²—ʪàÛ/šðaatö#TÝÒ²Êð
+…ŸÈVp§§ #‚Š´Ö/¾”Óh£F·Dbʇ/]³ x…HȎä·\¶âð¡éª ùÔ-ºôNµÍуԘ,¬#²;IV#ˆ,Ò͝₯ËaÇB„çtg’ÚHàbš3é쟲·@Ï^ "u§¢ iC¢…+lНnみjl,^ÞÂcK¿ýÀÐP*Û;%šœMeÈ–Ä<Š"¯ÂI4wÙOñ2DŸ¸€£1á$ŒI"íï6x嶫FÛ ñ©!#}L6;{ÿë3EʦB„IÒhÜW¨²@­X¸æ‘aҌ%QªPñ½p$¸&'͖q"jš¢ïgiTiǸáä9Ž›’Ì×á‰eÅK§B˜ši[ò
+sU,{É0\¤^«¸ÿV" }jǛ2.ºÎüÇíõøÊ?–
+/›€·íŸ]^Þ^FÞPú©A£uuvÁäöêì2ÉæïG…°ÌÊ;V:j5½9<ÏOj[jÁÄwíðç
+pPͺÃô¯[NmqkL(·ÃN-7âÔpØ+rëœ@í ,Œ&F‹ \$á")ù¹ÇƒŽ>‹¥19™JRÎAé¤ ?«ÐP^ƒm(•Œ[‹…º‘úE0Ä-C32F“4rÍx,T‚äúeø.¬áªÿáfä!¡×éþ¼ý³\l&svs¿®7{¤„áè-;¨¬PU´9™U«MaEíÝvh ߌmžV´¡´2n--êÖ‘ñ‹´ˆ[ŽVéGoÓ¨ „Š”Fªÿ¹!„4BJÕ«ÍlzÆ¬!ñj™K¥ds*ŸN;“LT¼ã£+ÿ*/qɆðɹ%>[nm¿†uËñÁQ Öí6%°Ò¤äùï¶R>ƒ.‡C°rÒ¯§÷Üaý´\ý µo—ƒ~Yfó)ٜ̫ÕÎä'¼°*ü¼šãm(¯Œ[ˋº‘ úE^Ä-ÇËh^9µSüºIà I2ÿÝZLûÜ~xƒår—ÜÙÝݪ^¯Ù‡ÙÃãAÑâHÂ5&'óKʹtë¤ =‹Úcó½+ÙPz·–ukcÈøEzÄ-GO£*¦
+à°WDÔ9åI¤KÒ½Q•¤•]» mìâq²šL7õ*ÛÈÆÎü\MNf–”s]¬“&ĔæúÈŸl(³Œ[ ºµ1dü"6â–ã†Ê¦÷Gø­.V‘ÚXu]ì‚v±=pÙ>&Q{LöÉæd„­vŽ!'±*LöɆB̸µ© â _„HÜ^‡¨à¢Dy46õ²³ð…—,äÙYàå/Ï«ëey½Ò͊
+à°WCŠ8å@9Íџ¨ó
+Ŕqk9Q7ÄA¿HŠ¸½ŽJJ_a%/œ
+ü½GË¡‚šÝ
+Ì©"œI$±A°nrðV±é˜MW°é6ÚcZžåí’MªYËfòØ°ùÄF{L“…¼jˆŽ$Kx
+“d™ ˨‡Y]$C²—É´†»Âd›¢õe ÑàTÛo|øl{…Âp4m€Æú®ÖãÙ´‘ØhxöÏg[yöI5«ùdoáôÃæÄH›Ú5 ³-Ö0#A–±,7!è"#’IŒðD¬Í³íŠ]ŒTÉHIŒÌY¼.6P¬XM(;Ïo!²&>
+90 0 obj<</Length 2513/Filter/FlateDecode>>stream
+H‰´WÿrÛ6~½þ”n" ìÌýáØNëNl'‘’ôÆÎÜÐ%±•H‡¤êºïuÒ÷¹oÁ_ éâ™^< Ðîb÷ûv ÁV£“g‚­Êg~(œ0 ØÖú¾-G_G‚¥lä:šùçøØÖÜs6õ}›E2PþÌ2³–w™b¡$!ú§I:íõ|tòF0ÁæˑàŽdœ ²¬˜Y ×s\éJ¦=ß ”ç±ùvtrVj—Œ;Âõ¥¢O)”o>•²2ÎFSîpÎa6†óÇÑøSºHrv•/ñ!Y¥e•ìnüéŠßM&ó_á†W»"Ž?úTÚñ˜v}‡+Ï¥³ÇŸ‹´JX´XIY²2Îz… ¢…µðŸ2ÉÙT8ŠÍÏGã8y¬uãb?°]ñªHã*Yñù?Fä5 ¯}ƒëóœÕšUΪuZâ¸ÚýWX&l™o6ùcš­Xœg‹´Jó¬dÛ]Yu.r¢ÆDö˜Ü'l›T?œ º>SŽ -á@DhÒ¸ €5ÕÒsÂñl~:¿U_ƒÚ‘xQL°n“m^<ÝëOWw—³¼š|™ÿ<ˆËrªñdW> ¦½@ý³#„§ê³eöùÕÕ­´Ž^¤åÃ&zêž}8ý¾“ÓÌx(rb…åKvŸ,7IT4ÄtJh†”–ôßÔuÜ@)¦|d¬¯ÓÊEêû¡É“«Ó_|OiR7Ҝ5âµ$–tÈtˆ
+LZâ²Füv<ƒ›dz¶Ž²,Ù o³<^*çۄÝdÓYlÖþ8I2¡ëø: MƝ7<¦Õš]fU²*"d»¸x÷áæªKÖaHrÊxú¤Šó]¥Ǘžl=ã(bãÙ¿ÿ/ÿ&S!„tÄX*ËÅÍf52õX¹‡žã:Ê ˜Dÿ \ê#ËÑ{0b:—K½Ät't"ɪ|ÇS!ºP •BûÑÆ°V!jg¹f-š yWa=Ô§¶ ú!¡©½¸d±YwAhð|ÝYD«ÔhˆÅ¡=:-“ñÆÂv„œð<Ëb¨‘:}È Ïô{H!p ՍÁÀ ¹î
+ºISF#Î¥f˜„… R
+-+ÝFï `ñ½áÁ^CÌ`£9Öx‚-x'³þ׿g~ÖÄ¢p6“èW‚äG¹’æÝv‰VÒLnÛô\%›¶GßÀ¨Ò!,
+ØFãëû¯¯ ×—óÉÔ£NŒÏ/ޜ~|‹µÄô8züæãõÙüòæºm`_kÏT }¹ölj¹fáTZ¾‘
+ºí•pǚ›I¿qLÂq8ëÆ0edêvVEÙ"*l–l’¸ò$Âï5‚fp3óe.Ç°4ÁLŽ¯ç³3C–QÃAn¯¦ûáP@áÝé[²o³Š™Jq@ª†ƒ©µÈË9mL(mLï¿Ç(¡§Aˍ‹kÊóŒ6FkµŒZZßbÔC™À/ X7ŒÛ±zżÉT¦*á}˜ñ}¦ht7Wì3;{Êâ†Ïú‰r7žG÷›„‰úm2`
+\þAdN5šÐé®ÊKÒ.kí»qò&ð,Ú0³ý¸N2ööfF£2Câ°4;ð3ÕeE›LcAysј|æÊXP–\fýÏvªâ~¿üC;SŒÄË¥6¼Wúá O:ËVš`Oʞp…0õ0M‰AšÖjÓÄÒ:RøžÇ¼èö ß}^øûõØ=ÅP•™É‹v¸ÇsåfvÎ.·Ñ*yƎ•auI—7Ë偖áˆÐ›lJFO}”ËFäÅd¶¦±iÙîé¤M78Võ­„Mç­†N[띜žkÏè”GélúxRTiŒ¤²_y–þUiž6Í»/:vUÑ3¦ …MäÙ´¬EM6¤Ûm²HñÊÛ<}£TiF«Ö ËÐ<Xóâmކaû¸W9áµÿ³]ŸígFÇP/÷Væå9Ò?š$–u+K°K´ɒFb%‡µÚ,±´¾g¨r]ß ž_ûb.ôªÂ;jÿrȗÕ#,ö!)“Š½N«•îñÏÔÒ«uZ²û´bø€Ò+m6p•–hÕ%#kd«Ê‰ö´`‹dí6û=Úì’Ò\”mzl“m^<‘±x“@yáè!ªw!bee²MúW?ý Å<þ,<#ƒK¶®±mdªbóÔÒÝU؊–øʪ§‡Zä—¢àü?¥Ãæp{WBv‘#,¯Ô0…H‹´J்Òä'xl¹ãÙ»K–?$…©C@¶Îw›…ѾOö—yÒz~?NÛºëbW¤Ùª«J·(³‚í2„»Hã DK¶¥ÎÇ»¢v8U»’ªŸ0'Dâ(£ƒãuÿçïŸÇk1^÷ö"‰Ýñ-Óû°±$[(­qŠâ8)˔E¸.2¸ËªtcgÃQê›L1 öˆÒË4KË5¢¹÷þH¸s7qöš‰àÈ7“VæÅͤ3~¬™ØÖûfB»ÜíÛ±<Ôv3i%ìfrD«i&¶Ö‘+x# ¾ßCø÷\9æéðz·\‚ïú8Rº¶Ù]Çؾ5—
+93 0 obj<</Length 3051/Filter/FlateDecode>>stream
+Ù ¼*ñ×Ù`¶˜Î‹ýã»ÑbQÌÙÅr±ß­úÒó<[Þìj±?Çß>+ŠEÿÓðçœñN#6<ée'³õ—ùè‘=Ì6wì|±)¦«Ñ¦˜°7o~yuANœª2 97pN0ú„[Î+Ïlν2ªvL ¡Ñ1åúûR)ÇmöÿË¿ʛ!.~Ú3>pɬâ
+×ëa“)͎WzÛ{‡<GiºÖHKäЁYσ$FX îxɜãZ§âñÌ)n#ɬȹå’::ˆ†V. ã·¹Šj«ƒV-¾é­Z)¹·²U»¥´´“s‘ûZ ì(ÉMHÕ*æ ×¥û°FÇx„Šj;:¢Zey°!UO³ +¢éh°I¦ÞV:Úxà‰Í5¹/}y x€'IÄê;Žäš :Mä}{€K—29˜˜&Ò 8Ÿ¨ÝÒQ«5¨…D-ÊÍGUªô
+#"ÚisR4žb˜´†Éʓƒ4÷BrÙfEA¥‹…)lµ„yÿÜÿV‘WÓµÕ¿á‘*o)o8%Êä&Øä £b^)E]ÅL”\6ÈDE†
+GŸç3%k#Å´¤„ÕXG؆ÿ”ANï
+öv9ÍY¢õx¹Ø¬–söy¶ò5”Ÿ\\ô1•²kû‰ ÑGö‹“ókÿé¦ÏÖÅfÍ6еÞ`±aË[VŒÆwl|7Z@äU¹‘SÊÛPY~Ÿ£ü·m¹êHø: #£ùœMÊu
+NØÇ;š4o© Ð'ºïh¾Ð{ՔeSäöOÌ¿zR°™„‘fHHÉ(-©|JFSÚîBE[FíBE[&¼úKäÇjaéÞ»ä)ù+‘-ò×À.ùC‡h òÇÈ_+ß"萿ëWM~AãÛÁð0¦ëU)Ñ¡EôOpu$¸€)Žé… }Q–pé=¦@ô<w™èC»ËdÉuìœ6§ÕUËFódlÍg‹ßg‹)ÎîiøõñÈ2ÙÑ0etͅ´^YI8†Q0ŸP™h}¿F‡e—ÃÁqÕ[(~yý6žì«Y$§iÕ8ÿDMþ¼š®‹::9íZ('*¥ú×b䉢!J·SяŒÑxHJûRÁÔ"݂i€/LŠü¡‚i”¿T0[~UC§Z·;¢ÅªÝ-˜Z"-˜.Š
+Jukö]g~¹îވ#‚å6;Y.þ½aÇ£UÑV»¨Ñ4p÷H¹ä¹2Û} md’þõ2¨[ÙŸíÆ©m7Ž ׎‡\½Ä¤J¢“ðê&%¸Ý;F¤ô9υkéS-×ö_”V§‘-Èÿa¾Zv"†aàð9ƒX‘g›àˆ¸rYD—­TmQ[­ø|ÆMÚØÝå°7N•Òñxâ8¶ƒOët”SnóX,-˜WŒ×~l§¶?åÒqùD{ŸŸ£çö³éU;ªS?a›nu{šz5u,„Ý>/øÙ ç}wuOzQKž÷ÆIuÍaB™x´F}·?M7®vËÛs1y鹿žëÆá[痹Z§çåêbh¿ŽäãÁjáƒg¡¡°m’Î%a‚Üžƒ™Z¤`¦Þ¸ßd AűåÊצ4ߜ!2PXQ2»%™ÝMåU;ì!^’¢ à‚„Íå0@N™¶–hˆŠZnE"5æ‚HL mkÕaÅâ˜â¼‚Ib^Á.ƒºyÕÊÃ0uMÑf4u5Ç£+®
+96 0 obj<</Length 4107/Filter/FlateDecode>>stream
+H‰´Wër\Å~‚}‡ù¹J¼ã¹_R• YÁTl% U6•ÒJ^"­lí…·ÌŸ¼O¾ž3çl÷‚“"P Ö7}ùº§»ÇªëÙÓ¿œZu½™•«ÕµuË~¿™]ÍÞϬZ©™×Iåt†8™ ‹Zäœ!¼_ŠÃß©uûvÚx•¬¬:Ñ`͑µÏÏfO­²êì
+à…­Ú©ö¿…׾Ĩb¶:çUŠŠsUg·³§‡›¤.6Êh볋ôÓ٘ÛϪÚ\¬g £1P|Åg³ù‹Ïþ–CLg?Κ£º‰ÁhL:•TUª©2C*Ü âõütµ¾¾Y.ߞ¯×Ëõân}wñöþÀf]æw·Ku²^œ^´ï<_.×ߟ} ªr‚ªTÍæG«Í»›óŸÕÃjûV=_o—×÷çÛå¥zöì«W'/ȯ§Çn ¢èÿŒ¢ŸÖƒkEgÜ虭ͳ¿ÿ_þ9XXk¶s—[,Ïΐþëh‚'^›€*ð:†¢*¢xÊìÕìkÝjÉSv[½ 6rIH¤±¢.
+ˆ¶(¨ ¾oè;Ö lùömu2®á}Ä·<O…X2¢w(>¤Û“Æþ=iDBË/¿'(ބ4J}dElÀx×p;CM„À4քÒI*¡$›Ïô÷J!˜@
+-›¯çá_HT¨4æVÊ% Ú±ªY´·TÈG=ññWzÓWw›Õvu·îMjj t´òf~rz¤~Z].ïÔÅùZý°T?õÃ7?«ÍÛÕu’Õz{§¶owS?ܜ¯ÿ­UݬÖËÍÐíšæѧ¹i£sŸßãèf«>¼CKú£MêÝêŸË›Ý¡oGüË»™;Å'v0ƦåÊ/ïÖP¿ÀÆÂÕÿæŠ.C±~´¢;d¯¢Çƒ«hvò·Uô¨ü£-ý+RÚ<ÇÚ,¾Wî{%t=rj¬hvêî¡[<µXŒ> ‡:B8ôø©Ñ!v
+áZK  yŒ©mHk,iB ®m3ˆ*¥Ú$ækñ>(¸Hƒikó¤‡aBmt3=¡ö%²Å0Ò¬N`0l3Íu’DÝ;$L/”ÓRn¹K ƒí꤇c~F¡g|Wìlí0ҟÉÉF½)v'1ð‰#˜(Mâƒàa ÊÁNzû›ï¡u=¾ôM}²Å0ҟîd§+‚³•§Û¡<Š`Ÿ-O%Ãt—ºŽA¿‚IìÏ9WÎÃHdºúµ<ݐYKÎj[“ ÓÓÝõ0 -ýÙr=¶`ÿœ7†‘þÈt[ìêÑòtcçÎS-µ4ÑÃÄÞ¦§»ëáT`ÉBÇƒËòt3Œô§9ù;=+ÚÞxúèÞzø‡¿Ä˜þ2Lô<"Ô õú{£.÷$õ¾Ó_¬ÜPԞtÕ7¸‹Iùdt7}í$¶ýKÏœ÷mÇö¸šK!À ÞP?QKwÃñO‰Ê"*Û¢B—{Pa
+Ðâ8J{ˆq‰cº„a æB”¦KÆÒ4÷Ó%;Œ+•º÷ÒL :M–ké†AœÕK]Â,ù„IÆ1£„a°\â!Ã1]Â0h7øcº„aœëûþ„é’ÆVLϒf”0= ³JÒÓ% Cåj9?£„Ù¢·Iæ>’›æoŒE¼ec!—k¡©4  ë;ƒà! VŠÀd¬ú•cè`ÙÏÑ ~s•cÐAh9b¤-ç„´IÅ<嘄öÀ! ðA[»Q…¬øg˜öØàä`ZƒA'§Yà T#N Ý
+‡3­Wƒ¤Ei
+]Ç’†m›c
+h—¶Ðÿ´E—$}¨zΎCÿ•'¡¥ t[‡XӞb ƒ —*0}3Œ£•&¢v„oÛÈbÔm”¶ao‚ÀÔ=z\ -XØêÙaúç<v}äÚ§Ù¥€r¶ä`£ÀTð#hÎØ1«ÀZð¦tŽ àG`úHg˜öù¡aã…¬R!x†Ayíñã±]Y‘ ’H~<ö}#jÃ#ËAäÂã–|˜~$¦€γ÷x.TAN—˜a9`˜@%ÞW|ÀºW8?>âPE\ȲÍ^`
+–;Á²œ çЧŒ…FÄÕ†Áå.Fð“+¶y½¦ŠÀл´
+HÞ§bžšÑk$uáôóºËm9ŠÃO0ï K;Uk4Iݳذ”Ùu¼¡rḌµP‰ÉÛçkÍaÕ .ʀ{ZÝRþþ[FOÏÀ‚Á”:¬ ­òåóÖ¤ì֍UvH²§qS]†Ð7$¹V: ±Wa¦(¡ÒŠK–ª ËÀIrc'œÊç¡4JàúÁ¹RǶ™Ù—:Ú0Ög mçšR‡ÝUv†B”´N©Ôy Ú«ékšÒL#„F¹ò˜Z­CÆ t¤/}5`GËg5,M°JG¨t[갃µ± ì³)ÙRgfX{ "¨;3 »VÙaKôIéx†ˆöµ],uŠ:¨wɊ }A^⃤ŽÊ|ª¡ÔÙsËYվXaÚ¤â,ÛR‡œv*Ž&‹*Ž,w¡U:î >Ž…À«\¸äâãÈrèR©ÃЙî%D¾+ããÀ .•ñ‰«£Òiâã$ËN选¾Sï¢ÍF:I|">Êíkµ/Z¼î”Y¶Rad¤2ÌÎñP«Â##£VáٓæIbÝR©C’»NÙݺ¤ìì ú,‘V†ÙJ’Ux@¤ƒ§[@[?Ý
+°;¥Á;ß)p¤îJýZ6K4M«td¨)¤#9uWޙñN|J•†ŒYg"gÀ%»o$…Ž€kô¥ÎìÊS#Äiì*®N2 h¦ÌS(g ‚ZMÈI€qa¸»CÁçŠòõm,4¾ñ2
+ClÁØ®ÊG>¿™>Ïå@<HI7ä=+ñ³Þœˆó G§…&¬³qJ&²Ä,`5A—¶•/NÀ9’¹§|€˜«Õ/ç—ù‘dÑÂ胗vIycùœ·«H;Li2¶‡¤t°a?{-»çç?¯Èõ'ʓ‘üՍʌÀÃV3AŽƒn‡B¢Oíªß‹&¤hcSXºÞåá0Y*%ú”X²¼(èVuCËSyÈí
+ \ËeÎvp*[b¼ ¡.›^v‰TZš%³¥ƒSbÉ7€¹E”…ÐS.HtÒHñ³„ö¹ûæÔð:¤u…%̐s:Yš%³¥ÃSùNÜöid‡J¾gRK¡ÃöNR¦Àú‰„·èCƒ!JHÊL¦ïà| 'dB§œ(ß
+99 0 obj<</Length 2802/Filter/FlateDecode>>stream
+ˆ|}­(RƒÃ‰ iÌ4"$vBF‚€úLcʈœJ2éE4À¥@%Š…9ÙÐ0”LP2GečYwЛÅ7ÿÈAo–1J֛µ~"êEak~8£"šå>
+c–KËxh6†ú°*ž±Â‚@ø@Fëlôù ù:|ڏƈdqó#•Q:4ûÃBîú\:ÓJ"‡… ‚ ˜ØhÍ
+é3ˆø¥¤Ö’F€¹Ýpî\ó a3í„­Ÿ4ìüH·.K
+ñ§çBË̗jWVø(7Š¼W·YݨŠ|š¿º¼ü´°ü,l01’Öü¬?m~ˆ«f4Í?VY£H²ÙTª®É߈'~z†„’Íà,?QmÒÃt‹êùðϬnšBìÙoª,Ŝ0â<¤Üž9N+!¡½"‰UI¬rS’æ.«áÑf𠏊lË</0ÄHZ›¬ÉʂìöuCÖª‹%ÒFm}x_Ÿj^Œƒ–zq l//oøg±õ¹quÝÙº"¦¢lHV˜ï«R'9un=–[Äe‚ÍUR¹äÝ j—Sx¦Ÿ@ "4ºiô¥E¢f¡“Y„ÜbÌ1ƒ`aV¤(GÌV=µ´–ð0[‰œ04@(Å)-H°0iýÒy5÷Û©ïKîæ¾þ†8P‘±î ?Òàê'¿)ÔÍüìbµX
+ËOIn]ïÁ™ëGüsü¤°šƒr Q•û[ÁõÏË´ÜÝ#êu~˜ÜÍ<ÓJÛ$U”\4ÚRk%Ù7åji’çðú½Ôq,ØØüù|áƯ1®£MHz—T 8¿ú½žÆø SKìÛÅ0ç›y¡zE.@£
+l©¥6ú¢×J/`‹šd[’™m°V.ëÞc]'øKº˜´tàñ¾¥Ä¶tkxÔÒÎðÄù¸¥}·Aߛxõ
+ó~Ç4o\2ðF¥n1#õr‰I‡Íy£—
+žëë£çv5«ãFÍ_i|a8›<lì°qÈœ5bƒ³¯ê@ƒê$o|Œ% à;
+102 0 obj<</Length 2411/Filter/FlateDecode>>stream
+$ì =y„XG‘dq$BŠÁ²a5–ýõÿòw6㜋€OEf|¹^ ý„ –DA(QQ˔ TDQfדw¶©¥ˆ²k굑¤
+‰ dœ¡.Rš£tâ ÅyKç8“LAWdÎ<P¡0ôQŒ³ÏO…˜&ð^ øîˆ$Úó( MOÏ£D¯B‰Ž}y¤E"âVÂn‚šÒ‘˜)”Žb
+%il¦÷¹Jುi…ê ‡"ˆ"'
+ (r{˜àÈC„8vl´F`A±8 nŽQfÎÛ0Ê¥öԓAJ¹1ۍg~(7fø¡„#Ñç·%wfˆfOÐ3Ø3â”<L"£`0œG2xžz
+!þèè¨OdŽèeºÇT%E3C}æ-‡/¶"NÉ.`‹2Ùà|¬Ù§áÂ¹ðel­X)ú ›2ånsn™ìb’‘œZ)s¤ŒK–DúŠ¥MŒwaÕK„ x8Ò¹ÿñƒè¼ï{ƒê1t3%à N£0„ñŒKS@F¥‹ú<4XÌI;°˜N"A¹J…b@×XÊoÆüroõ®nð¨Wš½×eÛé†ÝM_ÝÞޝáYÔUWV{½º;#¶P7LDã@‡ ªGx#Y$%Ú/0ï£õ8TeÊÒÌ";òŒ8Æ'À“€¥,b3
+óK‰¸h_ "NAÂtÙ÷êyѕ×ã[‘è-ÇÛ^ÎÝt]n·,Ç¿•¹#‘¥nûÍàŸº©Û¾DŽyªBc՛ºÓßõDÖuÄ1GCÛÏ›²eeÇðÈ÷]½Ë»²€ŸXA&aÉ×ÔÝF³úIc+)늈‹z÷´Õ´£ÜMý—þ¸/ݒ3«Øñw(žgŠð¿àM#4۷вªáiUw¬ÒÜÕì¹);ÍrnÌxΛUÛÓ·]Þí[V¯iäA‘WìA³b£‹¿ûá4}ã7:_aaÜhlǧy1¡ñ|ö„7ëºÙé• u¨8®¶>ÎÊÄ9–¼­ØSý¬›ÙþéD™›“ÐÞì ·Ä
+=ëz»­Ÿ{‹5kʖ~êÕ£&çû,s»Òº*¹ìóÜ×Âûëùõ«…Ù@ubk¯¿øïôS³8ú¯æžr¨”èÖÓBìËìÃm¸ä÷l“£(±)³VwTÜBïWéˆŇ¹?‹1h"õ8] Zz,I‡À |ôyqÄw,{g†äWcÀ†ê q¥¡™µžtßk՗³6òfBèc¥%p±Òã9p @ép(?‡2M±˜à#÷ð‘$ÀãݘnaóOUуÜIS.§òm¹bu…Z{Þ éy|üŒä瀚3ì
+ð»„n#¬~‡.‘ˆÓ±QDᴉÏä°Ø>qY¾Ð'Q‚O.!û$ôú$çL–χKL–ÙMU4z§«Î,£_œ†¾éw´¼šcÞÚblŸh„¢Äž7e±1WGeç%Ø]÷¼œúoÔ7̂b“7Øj€Ûùj…‰ßbV4LçÐ×î‹Xx*«*跎ÝKN.1žWûÂ:Qíwà£9ì
+ XcEÔµ-ò.oL"¶uÑoi”ùCÁƒÚCÝwì޶ӝ¸r¿·úBüõ{èÜÜ¥3
+105 0 obj<</Length 15126/Filter/FlateDecode>>stream
+͈Ãùnþéø¯§ÿß>}õâíóׇÇ/¾>ü*..þ|s}9õê‡~™Â$(®óO(k´½f’¶ú\X…éîäTõý(ÍþŸÿ—±•‹lüãn°N*azÙÃöZàý ·ôãî/0çxˆô¼­ñ ˜ùph'Œ•NÍ'Â(8;V‰q”ZÍg*. VŒ½4ñ™n’#l
+@&7ą"Ç| d1c'ÍÔÇ´iaK Ÿ4³°¥UJZ£¶´U҅g’Ýdsàé•NÛk€ã õR>D˜AÇ~º>¦-rÄ´½‘Î8œÖO"L³¨qœ4œ&…«M9¶~ 3é¹|e—…N:¨ul!})ê˜KœÆƒ ÛlºšAÃ'r!-J[åÈi¸ (-\7cúJ  Cì¸ë"Ï6“¼°V³Ìd#žYÈž}§¤Ú¦ÒCÊ1^´x„V@o[ßÐX:¼zÞ¶ü;TÔ/»4­gª[`6Π…"ÅSJ
+À÷
+À÷ê:9ÓTq -ã{%ñž ”ñ9H¼'¤d\÷4 Yê YZi½ÿ+àˆ´§—“^¦—ã‘øtãf€j¹
+DK¯=¢ýžÁÙ²-%Å<¸¦$MEMUMË=àY¬vYœ
+ëÛ5‰÷eŽÍAâ=A`•cæ@Ã7‘ËÝo"—WÆlx D³ê$€dnrR™–»Ó®—ÚU:‡x+iâÝ]A›‰¶áàJފ%mj8¸‚8Cø~W=üK òÄ;8Lû]aÏÙ³XÕ®¨©¬ íj¸»bÂÏbÕ;Ì[±"_¼»+h7ÈØFç«öá
+ãUVTò¢+¼ñ*æ°"¸9d!*X+Ž@Ą5^)£Cl×Y†
+þŠ-Má-Xq‚*D Áª2E @êÀ—Aâ=A qàsxOH¸Vh8–†e°4,+-O´<`mà“€',) oppŽ
+ï ë_xÁBÁ'!O X)¸nh<’Š´H*ÒJÃE¬ñž Rð9H¼'$9ë"pŠ
+QVTòrá.Ï!#Ø9¬
+h_&KI-QÖTVÈ}o¹<‹ÂÎ"kDÁ[±rÑ.Ó2"ÁwžU¢¨ âC*Ñèœ< ™àÛ ñž N4
+!O H(IÀR
+¶¥bÙ
+,ËJÃE¬ñž °R°9H¼',)ë"pŠ
+È¥o¸ˆ5Ʉ¤q-a&©Q‰µ¼×¼‹@¤/‰TPÃE”•ü\ø†‹ÀsÈvY!
+֊#[λLJ‚ï:ëCÁ_±a}`»&ñž °<p=pOXØ2H¼',lï kÓ
+GҐ6ICZi¹ˆà iC# xA␓ð.稁Üõ–‹XH8yªé"Œ’ÚÔú€xË+ÝpˆöE‘Jj¹ˆ²¦²‚@î{ËEàYd?‹U#0oÅÈEo¸LKE¢Ñùª¸‚Š©D£sð‚d‚oƒÄ{‚@:Ñ(„< ¡h$!O H)Ønh<’Š´H*ÒJÃE¬ñž Rð9H¼'$9ë"pŠ
+„„CÜõB²!:
+Ë5Ž Ñp<ɶˆ͆¸ ¢áКÄ[„öpD×³-bÛm¹mé±=–ûùpêΖN¶‘ýQ@´‘²-bžiž ÀïÙ¡ï¢#ñ»è1é:•£'[„Ê2$’“÷”˜&pzšñɍ‰ð¨7šñ ˆEÜ€ѤˆNÃz‰Šö)$*ړd‹õB’"îú÷I\kÑ毭ÛuÙ?í.Ësë?§!ÑÒUýCE;ÐDÝeu{-·Õ«:‚dIV•íDxÖEªê4
+Â#^UDôGI¿‡DÓD³~Aª$«Š¾‡N„ïaĐª:‚(‰We
+ŧ!¤úNMB(>5êß'žúYmŽßœÓÔ
+„Ä\ÜõBR.:=Ë%äÚé%äړl€)Ȭl€ÆÜeyì¸z{Î]·åõò9wêºØJV(‘ýCónÇHþ2î)8Íä&(È´l%Ów1ð]ôœtJAt%+Ù$ۉø¼=ífÝY¥ »²µK…ž·çݤëT
+B+Y»Tvñy{ÎMºN¥ µ²eK…ž·'ݤëT
+Ne;‘œw¤šê:•‚ŒÊ68îH|ޑkªëT
+÷`½ø±}Hñc{’Üý'`@Đ½Ix÷O=!ŽL`@Ēñ ¨7K.åPS®ËkO/å羬/ïÊSי,¾”'ÙA²Ù¥<é:ñer^DŒz!ÎL`@Ěñ ¨7âÍdDÌ7! î<¾§ºóx’Ü–£Þ@¨9[ð¶ÔPo†c Þ@¨5£1Pn
+õ`½ø±}Hñc{’øqÔñcïúQ[8@üz!~ Ç@¹(pWâÇQ/~¼Þ—=÷ãeYáÇSÕÙ+ö£Šv ‰f~TU§!~ŒÏŠz!~ 'G¹?Æc Þ@ˆÃ1Pnďñ¨7âÇ°ëŏíCŠۓl{€Cö&ñöª=!ŽLðä²\6,û¶Ü>ÿw[®þ³t*ââxvÔ¿…8dýÒx¿,ח×u*FΖdHxÞnþIשx9Y’Uvñy»ý']§"öOÎ à-HxÞgõÙ
+ž…?Ÿ>·Çh¯O_–zӗ¥&êã >͒ôi1Hÿ“´â§ùR¨S @pÉOc¾8’d­øi4VNj ¡%?–⬐´â§qLõ>@pÉOãŒ(ñÌ I1H³àÓ,IÎôi®ÿ4+’4bfÁ§Y’¬éCÚI›yŸÖÚÔD²_ÿiV$kŒÑ-䌠IšþÍõŸfEr¦;Fsù§Y”éÑ\ÿiV$cºc4—šI˜þÍõŸfEò¥;Fsù§YtéÑ\ÿiV$[ºc4—šI–þÍõŸfEr¥Ëh¯×|›Ïi…?q-é¾æqù?ÍSyÏëùçûïûµ}ÿ=÷ùýçŸÿüï¯m+·YåzÇù½žÀÿû_×ÿÝ?´Û´Ü+¾ayÝÛ& %øKoÎ{:׆sÞ¿-s0iÆ)e:Æìå¶,a(iÇÙ_Ó¾0ç:îÍÈ¡¤g?ï#8aÎÛ¶ŒÁ¤çØïC5rÞûm\âPҌó^ïS2bÎõ¶.a(iÇyŸ÷¹8ežoó‚ÃI3ιßYÂì·}ƒI3N™×ûhŠœe«/¦s(áqÊrË7¹\Ç»¯ 'í8Ë1­Í]v¾¾¡Y¿‰3Ï ËµïÓÙÊå$Jb¢Œª~!Êl
+3¦#b)чD̬ %òˆ˜*]Â`¢‰À1ç‚C‰<$Ɣ %ú˜9nœs8‘‡ÄŒy¤`Ú}€„QÍ·àP"€1ÝC‰>@Â0Û¶s:пšè
+ˆœ*Zâ`2h@™i¢D7 pLµàP2hÀ r×ĉn@äT¡“AËȌ
+n*S)jê7î¹Q¼¢åiÄ.ï{›ŽM †Fˆ]^Ö´\‹†‰_^òD­ð±Ë[5Cùâ!~yëõ#»¼tï‘*4Büòß|”Š3„Øåå#Ò-G0±Ë[ÈNS£Ä//y"Sx„ØåeM«´h˜ø套œ‘¾§E²½ˆ_ÞóÀy¾u›!~yÙ™Âä³¼$ÊNS$Ä/oõŒ¥›gé,o=ä©](™øå¥ÛÏTÓ#¤³¼Ã÷Ÿ­æ!Büòò#ùâ &~yë¨5<J:ËK¢Ì5EBüò²'z…‡IgyéUG°¿ÿ¸SØå=/ü½kÁбË˚–kÑ0ñËKž¨!vy«f(_!Ä/o=ã¡Þbdb——î=R…Fˆ_ÞᛏRq†»¼|Ä@ºå&vyëÙij”øå%Od
+¿¼ô’#Òógۈ_Þóþ×E»…Gˆ_^ö´L‹‡IgyIB$Ä/oõ ¥‹3„t–·òÐnQ2ñËK·©Â#¤³¼Ã÷­â!~yùŒ|ËLüòÖ3²Öô(é,/‰"Wˆ„øåeOëµx˜t–—^u{^íÁ _Ä-ïz>Éí¸œ!nyE¹BÃÄ./{²ÖôqËKš±|ó!vy錧zad▗ï=SM»¼ã7Ÿ¥æBÜòÊ#éâ&nyét%vyٓ™¦Gˆ[^ÑD¥Ð0±ËË/¹EºëtP¶Aìò®ç›Ú7é¶x„ØåÏޞ<Lüò²¨uZDBìò’g$Ýr†¿¼tȽݪdb——o¿¥Z<BüòŽßkµ"Ä.¯œñÿ|ëLìòÒQ+<Jüò²¨åZDBìòŠçhŸ?<Lüòò«Ž`ÏG»Í”p#vyÏO☵`h„Ø孚î÷)—#˜øU¦K’ábW™4+4BüòVÏC½ÅÈÄ./]X¤
+¿¼Ãï"JÅBìòÒ¥FŒEÃÄ®kÕd‹©QâוïØÿ%ÉLq†»¼t©QiÑ0ñËKO.#§E²½ˆ_ÞßGµßºM¿¼Õ3.Î`ÒYåzHI%‹M¥¿Ïtû™lz„t6˜EQ*DLüò’'SMÎò’({L‘¿®ì‰ áaâtôA­q†’κò!#ç!BüòÖ3Ð+<L:ËKO6‚=¿ƒïB 7b—w?_ø¢C#Ä.oÕ \Ž`◷žñÐ/ŒBìÓ½G¬Ðñ̞Öjñ0±ËKšH!~yÉ¥Â#Ä®+kZ¨EÃÄ®ë藑æJüòòáâ !vyëYiÑ0ñËKO5"=?¤gۈ_Þß7~h·ðñË[=Cá–3˜t–—.6ê„Hˆß[òDžðéì-‹ZŸEÄÄï-y"Px„tö–DQ(DBüÞ²§%Z<LüÞVOv˜%Måïk M"Äo*]l”X<L:›JO/Sœ§yã8/âã<˸ÿs!>NöDnð0éH¢Ì-EB|€äÉÜÒ#¤ ‹"7ˆ˜øɓ¹¥GH'@en)âdOä`õ ·ð(éH¢L*EB|d쉤àa҉ì)Ží³´ò”Ø8¶ó›¼ÎnåýÝíû=—GÈýð6m¿ÿ~^xiþs…ûà÷Ui¶÷u«Ð¹ÿx[ë=ç¼Å{„Ü.gû\]°æsUP4L~Ú.Wäٗ+x„ÜÚ¾®*Hó=_ÜN!÷ËÙ?Óq{Êßýj x˜ÜÚ.Ó~{ÈÇz=yh„ÜÚ¾®$ªf}ÍW©Qr¿«c¿>
+ö|¯'_<Lî?Q×kNH3¯×w ‡Ÿ¨óõQÐӉŒÎzw«Öùè4B|XESþÕAA(¤“X½°
+!>1Ò´ Š†I'±ê‰ àâ«š
+b×p9æé³K¥Å#äá_‘iñÜ3-F!~UùÒZyE$Ä.§x>íùÁÃÄ/'‰º8Z—å!vUùb[˜Å#įª{!­Ñªdb÷•/­EZ<B쾒'ڄG‰_UyÿϵÂÄ®*_l«³x„øUå§y~¿ÓºP°ØUý®ÓwÑ^¡bW•4‘$4Bü–’'Š„GˆÝ˪)k¤Y„LürVãP«8Cˆ]Uº÷!~UÍÍG—ÅÈÄî+ß»ï"“ÅBìöÖ#²ØÔ(ñ‹Ëžeñ0±«Jšh!~Ué•f’óô–H/âWuߧã¸Uš!~UɓQ¦GHgKI”U¦HˆßÒêy
+F&U­Ê±Ró!~Uéö3Ìô鬪¹ÿ,J&~UùöGbÍ3„øÅ­g Íð(é,.‹"Nˆ˜øU%O֙!U¥yîçÿ¾Q°ØUÝçiÞ´Wh„ØU%MÄ ¿ªä‰6ábWµjb-B&~U«q¨Uœ!Ä®*Ý{„ ¿ªææ£ËbdbW•ï} T!Ä®j="«L¿ªìiQ»ª¤‰&¡âW•^i$ùÙ§#mįêg–Y+…Gˆ_UòD”ðé¬*‰¢Jˆ„øU­ž‡P‹‘IgU«r¨T"į*Ý~„ Îªšû2‹’‰_U¾ýXq†¿ªõŒl3=J:«Ê¢g1ñ«Jž¨!U¥›yž÷³s°±«ºíÓºßzM»ª¤É8S#į*y²Íô±«Z5O±BÈįj5Žµšg±«J÷ža¦Fˆ_UsóÙ%ŒLìªò½„šG±«Z@•¡QâW•=%<L쪒&›L¿ªôJ#Ém™¾i#~U·×ôY´Rx„øU%OD Îª’(ª„Hˆ_Õêyµ™tVµ*‡JÅ!BüªÒíG˜ð鬪¹ÿ(³(™øUåÛˆgñ«ZÏÈ6Ó£¤³ª,jq¿ªä‰:áÒYUz±‘çz>ûƒ‚mÄ®êz¾ŒC{…Fˆ]UÒDœÐñ«Jžh!vU«æ!Ö"dâWµ‡ZÅBìªÒ½G˜Ðñ«jn>º,F&vUùÞBÅBìªÖ#²ÊÔ(ñ«Êžeñ0±«Jšh!~Ué•f’ç‹”H/âWu9_ív«4=Büª’'£LÎª’(«L‘¿ªÕó*ŒL:«Z•c¥æ!BüªÒíg˜éÒYUsÿY&”LüªòíÄšgñ«ZÏ@›áQÒYUEœ1ñ«Jž¬3=B:«J/6ò\ÎG;S°ØU]΃fí!vU«¦|‘)„Bü¾Ò…E¥ð±ûʚ–fÑ0ñ«Z=C­â !vUéR#Lh„øU5ï"º,F&vUéÂ"=h„Ø嬚,/5Jürò«ð72Êr»ªt©Ñ$4BüªÒ“‹$ߟiãHñ«ú>¿Â]+…Gˆ_ÕêyÈF!}­ÊnQ,⷗n?’-&Å%Qt ‘¿ªä‰0áÒYUµ‹ˆ‰ßRòDðñ{ùüd›iTÒYNþ@r-‡0ñ«ZÏÈ:áÒYUzŽ™çùÖö"vUçÓ½ÜzM»ªUó”k
+!~%É­Á#Ä.!kZjEÃÄ/!y¢4x„Ø%$M„¿„ìi»„¤‰Ì b—°j²²Ô(ñûǞRñ0±Gšè!~㞊ø]ÄU›»MëkkGÿäëúwë;ÿ%+äv[ëëï¶Öwù‡ìº×È!wÍùïšýï{ª&÷§³­Ÿ:{>Ûß™âr»œÏü÷g‡5û<}fÒ¹_Îçû÷©‹çû÷AU“ÛåìÛôžUó=áAš¬—MsW…Áü‡^ÂÂíþ˜žžf‡CB…‚eU±B1²Š ü|îÌÜ÷ãœÖéê•Eâ'Òs¯zæÑY_ç<\ßëèY†ë*yˆ¬®s.×]=äe©O>4HVšåtýµš©¼ïû9k˜¬~ª©”°ð‹5õc}òî!ÂיÊRÍüZMýRߗ¡A²¾NùðyZ½X–Qïå$"Ã*»¬Â
+jjFIƒD‡Ë(<DdX ±ŒBCD‡…žšQò ‘aÆ2
+½–à±ÃCD®%jjIƒD¯%<ϯk
+½¤è±
+½z౞ÂCD.h,§ÐшžZSò ‘Ë‹)4Dô²ÇZ
+106 0 obj<</Subtype/Image/Length 3467/Filter/DCTDecode/BitsPerComponent 8/ColorSpace 232 0 R/Width 115/Height 173/Type/XObject>>stream
+ÿØÿîAdobed€ÿۄ   
+%% ## ((%%((22022;;;;;;;;;;ÿÀ­s"ÿÄ?
+ 
+Ÿ ƒCàS/T¿ê†à‘òX=Gê8lšL|?ܚqöHŸw‰Ikäý[Ï¥ÞÖî
+•Ý72Ÿ§S¾)†$t\'Õªœ}!ñH‚ À¤>ø žkþÿ@ôjIGèô?ðT“Ö[gënq³hq’t\Ó±3ê-õ ùÏ’ô¬64uîÝs}K2›út4Ý&%ˆâ‰:Ú n£Ô±XZHZÝ7¨uKA°4ˆåtX=Üf»h$„jzc±šæµ€4ù'hiwÝÉÃú׶ÿC$íŽBé1zÆÄCÚ¼û­}_Ê¿<º’ZIä¹Xé¿Wº½n÷h› WÀ¾Œ^Ë\Ã#É@VÞ%Té8ùãm¸™ï+AšBjZϤk!W¿ …’´A%´ê(!ãzÈ8ö1¬ÉðWñú5YÁÖÖ$tPëÕ³í´¶;…ÑâV>ÌÆð '•°ˆy Ÿª>É%‘òXÙ?Qi/ˆ{h½!ô5Ó"waÖÒrˆì“ÝåÿæÕþœÝ_Oþœø$»/³þÄ~?“8“O õ™ö[— !r¸Ø9nêÂËAZ̊2z˜.Ù[ÙÊýZËC¢tN¨ZÀíîˆZ0Ú’ªý Ž‹†«­[ÓòþÎãì˜ ¨¯¨›ñƒ™®“¢iÔè¾î7N&Nkkꂲ;®—7Óõ/;êyni®:A^Ó/m˜M=ÈMã$Wm¶×K8„í#…ÃC"Sˆ.0Šµ°*cè¨<à šHh”Pó]cßÔëu8mýAð\®I6u€<
+êèöÖ‘ÕPkÙtÑ€KT­ªl`;|R蔻ýINðI5.¾«bº°•΋Ÿ[O¢ã
+ýY±¬0H
+hÜ]k x*uÊlU»QŸ€Xç€cMP¥¢Î´|Šê€†h¸î•`·«¼µÝ×Zhaî‘PÙwµ“¨
+·¨ò@-FcÃ\ HìªÕ¶’ÚqÚRMKæÍ8ƒVÝâ¢rö¸
+W7õ¡XÌ0óíhÕӊ׋@pP‹«e™î«ê¸v˜¢pîԀeyã’º›'Â
+°Î©Ôh䝲:,Ñí.踶h›õQïŸIÄ|O­7ÖbÀamc}gÇ{}ú#č,o«yøk$“ÉZc©õ pöµ}g
+ÏÎi
+ƒg–ŒF2dßú¯–÷3cæH³ºwMn3+C¶ŠXÝ `qapšÌñ •Å©Ÿ¶]ºê¯1Y+—Â׬8ù§ƒ@±ÃÒý®j‰Ä¬Z>å`‰Ð²šrr:=óXû–fOՌWÌ°}˨LXÓÙ<eê´ÀÏs~¨ã¶<4Yv}P«xs^¡vV€ª?£VL´Âe‰…§îò°ŸéÄÿÚmŸôçÁ%ØþÎù»IGÅ˨¦ûv?w" ŠOyc>¸ãÞð7mZ˜ý{Ñs晧tñ¬ëet›…ɷ냫ȆÀÓÔ[=&XiYã굶ÝêGœ¡’ÀQ+à|t{Ž•š2ñ›gˆW—WU»£Ai¤®ƒ¦uº2˜ ˆiHƒN–Hý—5Ó=ÝUçÀ®Šû«uÚéÑsÝþS°ù£Ñ6AzÂtÅÁ¢O
+…Ýk
+—m{€#Å
+·»VƒwGŽVœyrJUVú†?Ö*=2Ñw>j8=PђlcÜ¼µ¶ØÓ-q5fž­›OÑ°üԀ†ç ©övuðêÿI¢ãþ´æn¶‚C¹ÑrµýhÏhƒ¨ø«5}b¡ÿÒ¯ÞŽ›,”d\Ëz¯Q'Ýc˜¡ûS¨¦rèjwMÎi,`
+!®Ú‡e‚`hE¸ãªõôÎR¯«gµí>©:­{>«‚É­ò³¬è¹ÚÒ@?ëÙ
+]oÖo³}ŸÙ¶|¡qVl“ “ˆ‰ D¼˜â#tJ}í
+tY$’Nn©$’IMê7ÁOe×nÜ×møQ›·{QÆíº¦›s2‚27®ªz¦uB¤+4u›Ý` ÕG¦}ƒ_µÈ=¢
+107 0 obj<</Length 192/Filter/FlateDecode>>stream
+108 0 obj<</Subtype/Image/Length 4062/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 205 0 R/Width 124/Height 181/Type/XObject>>stream
+¡=Ö-±‡þÀã*÷~E£ß”·úÒ>¦zµ¥ %bÛhåV>óҟەœ\}|ë׫oó¤ Þ!±•÷øw…ãb‡ÒûœØ‰OÛb÷ý$-oþ†?¼>¶òN¼ØdíoË{˜ß  #ïüëËóbÃÏ^7þF”'7Žs}ÄÛÄ8ç
+Ýbt¦gÚdgwý6oÊ ¾íûÛû‚Ð2'N§M×ŶöaÀyàïà
+4ÔpžBw»bp8ýÑ®«b‘€(YÊ;
+oßÇÞyn XœgíDŸïÅÝÛѼٱ˜ǼÛîÕÏù¯­k…Ë2MõÈî
+腨•FQzòó½!6«š¾„·O¨þ”T5p–è^õò{€­eIt‹Çq¢[]yÃ{;žwy–7ïÀ»ÂvC¨b¦ìænc«j/¶ ï±Øäú¼™ße“ß± ú#¯×FÊ jÎZm¬½Ûn«z¯¾K~_âo‰­^ý¡†•¿ô·'ßzÕl”ÝÞÛû-˜K•öèºÖÔÿŽwèµ7ӂg]Ë K;'Ò»;»ÝöŽ#Ãx—¾ ¿jy—ÒÛʳ¼¿`½Ä*Önß0ô9&X-~¸ ®‰÷(‹Ê÷vµþ.OxŒ/=êLIgƒ ˜r65—ä·?ŠóOü=¼`]R¾€Ï²,ÏU–CÃnFó†ªåT;à]&QÍ´8ƒíUÒ䟨Ó`
+–TúœÓé¼eªÅÄÑh³C~Ç
+ëÚ ½6*ò溋½FC^h+þþ.¹<ôwY-ïf)ò¯iSTqóù¥¼uÅ'!8U3
+ÔÌÌL§Vî/áM`3Ρ;ð2ª›Šy>ä]iÂÏh¼¯j=¥>ôÇئ3¢Aø6Jwhfª¥r¡vGÞ´¡'ªå=>Îå±ÊnóÃÑÞïºúQë5FùŒÛۗÆ9±ï{u?Öæ$YtÌċo&fõAé_VÚñf¯{tíÉÁäw
+úÑýÐÊ"Ԓ‹…Žzíá!>ïÞÚÑý{Ê%U oܛ‹úo&¿¸+]چ£TnZ ÍSmÓåƒð†··ðîYöò›þv1
+YRp›N<ÑÖfwò/ÓçJf(òþér¾«©^÷ÉhÞön5€Zë5¡á5X¡ÂgU›
+•ûK½ÀÙEŐFÕy‡ê‚èfõñ“W‰ ™žÐ¡`_c×Õy
+†þ–¼M·)x—ܯ[ŸkÏ2¡]wšÀ†¡?ડÌ^~£¶ Y‡ãƒLToj|wöw+v ä¬çàíj¼‘þ±°E™Ëý$íRåË^½èË
+109 0 obj<</Length 177/Filter/FlateDecode>>stream
+110 0 obj<</Subtype/Image/Length 5110/Filter/FlateDecode/BitsPerComponent 8/ColorSpace 206 0 R/Width 123/Height 180/Type/XObject>>stream
+e4Òhœeÿ_ß¾Ì÷¯.²íÏél‘.¥w»H_[X“Þÿ·ïc9—¥ØÆwkæì÷.ýWßGì>ô2¬BËÌZßÃÊY« '¼nÒ;OÖú±Iïa¾¿¾ñ}?ŒÝ‡~æÁóøhÌ#ßñ2£÷§‹wÓÿßÌ~~ãûŒÝ‡žFzœüÂL~}ûuûû!ŒPó
+#Ô<ËV®n¿#ò8ôvƒ˜ß5Å…ηaÈⓏíèõÕëiŠúo¬ºðeîƒßä&ôÇ6_¿&¨­-±ª
+BoªM0I Ü
+\€o˜áMèÈïBméó8ûñ ̾ô>Ž©-¡[éì.Ԝ
+Ç[óãþ—&‹Ü}྆ìúœû²ÂH&ÖeÁ¾ tä}>ፌ³ƒ.¿"ô{?ûqMXŸ¯×zÔè}61öyžÔ¼fðè•j±¯ýý‚Z#žŽ3·ÍZyq{‰õ Ô;EmkE­ÎŽÄ 9*lžëÎ#,ƒ_·Ãìâ‡KEP7Éé¸\ú&›pMíâþR"pí@E¨:¾/úåò
+Ô:‘„kª£= êŽák\ÿE5¦{D‡Ç"ŠVw¨Ye«[¨G\§Žt`Ü×S®yïÒdLÕµµ¯t7Vb;݆bPcºöý*רoõf˜ËþèÔs½“YÎyM͛þR}˜ÕnÞѕÀK84k©²‡ÕҜÜ-®rÝ£síú³qhq£ $Ùr{(ºYù#ç6P×t
+Ý­tnÍŠzuÔD°ÂPfRóÍ5Ԃ­Ó|+ª”eI¹;Ô:ÃF¡ÿ¢¤@3eE£˜‰8œÓGXåút–Y4_á:ß{®­ºÇŽkbžåZçjëDÍJüŽ{;ÎÏÀM4få¸>¹óóçóZÕOöNÕl¾¯Û!tZ$6FA.U辕{AM®ß³ùÐ>n̵Fé¹Nµ>E­™IÞIªœjæ9nj·ŠìãÌ~‚Ú©sVNkO1š ž×ðé­tÓA-‡Ã*M!Ür`Ïg:•+jædiš1×mǵàÞ}ÔpfQ;#©Ÿڍ9îMEáW˜×¼ŸÈíuÔ²UÔñª†·3\O½½FYªÀû“?Iù»k¡e—D®î[ºíTfປcÔ®çºÓXÌi¸éž)_¨:óõ=WÚWõ(>ÚäͦûËK®Ý³{ÿg´ÿӏ€ºÌuO@¡¥Ô¹31Í£îž~ªK¿²¿ä;wy¦Iüÿ5‡¬]é—=ãP®‹
+-µ5a´ÂÙØ×*ü ‚(e¶ð]_£«[¡ßq§ØqíԘ맳°èÎï.õ®Ãž„[!ôÀ?õLóe™ê€¦>áøÈõt§ÉúEtÒy>Ÿmzø}á«Í¶ÏPڃfW:b~ –gÞ»~4pݨStcÔ+z’f…圿Ý{î=‡È&Ÿ¡f]‹Sýºy}‰õj]¯^ñŸ?¼J£ºx„]³â1?Aí%4_÷hŸV~µot7Ô£ö§•¼€_â÷¯áX“/ü×ïWî"™Ԝxo8³nÏnüõÉ-ÇԊŠ©øý[›ñã#Æòý~-t#3ŸéJ9dâÎv¿w{­pÁ:ƯÉòéԞ/óªžéG­ðåg®hXáÑFeÝîAÁÞ;™ÔG­®T#²˜·0Æ–æx|9_ÕpþáîT!F×==é›^3ðÔl%~$ø
+„f†ÜˆÃs”¦ ù–**L?øåQüŠVÄu®qÒvž¤ëkºb§îÇDuChJô–‡Ù†§Ö@nÖë<löÃяæt<jÌ6•&®{áZœßá0„ηDØOë¨sÿÄ«Ô±e8.GEMÏ0º›×Y7óS'i˜T׍*ý(4p$æÔ6ä~mʸóퟅL¥PѧyÔ2˟Ý3²ûüœýó‘~}@ño£
+/s`·9ã’o ŽˆM¾0m/œ-Œ}…ë4ûœÑÉ×å™؈nđ]öuiK¬¼Ê¾^ÒÅøë߸ÆÊ[rωy±Š{6tš}g£“ß þߺ<ƒþÆGUþ‡ý²mO[GÂ0c$ìÃÆÁ–b01q0¤É’¤éi½ûÿÿÚ>3’MMBB{š+]ŽU ݚwáOg÷©¥‡«‡/ ‡hXw¢‚‚×,\*Gsm¶Ž‡¸nó¶öó•Âg)\?/,&®ôc{ÿ@sP?¤VÓDGÛdÀQfÿ/‡u-Ô°Á&÷­ÈÓ«¾†6¢]¿„ ´ÊÞÚ\8Î1†À
+×]>†{í+ºöÞ¿¯Ã¾>îðCòhû/B4)
+õ¨_v»ê±xõþ4yÎ1_Œ’Åè![å}Ñ]+$õº~úö‚ Ü®§$†×5çûÜç"±8Yåm>”:—ÿª,?Z¥u8yþöíéé‘1Šíú#ÔnÈrñvÊ$«>u£k֏U¨ü¡é痧¿_èñû㏒—>†£ö{P³×¨ó{_0µÊ¯P; ßMv//ӏÇï?ÖëåòÃÔ¼.Wºžyûåç‰fP¶
+8)u‹©ÖX\¯#õ¡.p¾å­
+T{cŸ~¿®š®y0uàúE©
+£éû.°÷‘ê°ò›÷wñcO­šÁ«‘B¯!ºÖ“É4<Cô ¿'ز›¼éžz:9‡Ú½Ô«ºšAÁMओ…èUéo¦¾˜`…+‘m™ö=Ñç\ø)~Íw Obj( dµoéßL­K­X6!†`¨À2uèÍ9¢ý¦¿r¿ ]ÿ‡bP؝ÖÝ(ÎÝñ›îêNí©]ÿ§CÍü,]Kü”y†è®ßôVê?ͦT;r
+éÄ$:Å¿(6±ÄG÷Èw_×ÍîÔ½Ö6„ƒãc¿8¼tqÊð0RIƒÆ|VBhÉ_Ö±l×]Ña«ß>ùÔ[¥?×•óÏùw u:•à€1Ã4‰!³*u“qª2.O‹fÃÑ!sŸßį́¸{ÒÀvU†á;À—8é;õüº§ëm•|áïéqó%•’·LB‰–‰Óèß|ú´ìÒPY".ˆå­t’$^ý8UÚ)Ävýãå°]ǽ3¼N}árÜbሠqvžÐÖúÔ¯jº;jhÇ8} €~Kj³
+>EôËu_“ZMÉ+ôüe¨Õók¨¦ÕõX×µ[“·É9~ç‹7Þ|JDÿ:îÄïûس,ûº†\DDªc?‡u}êxíâ¸6ëf.œ%„ÇÁïJ7ñIìíªn-ûT钟ê¶ÚtܾbI«µÄñ;‰;%skÕûNÖ5½B]—ú¦ã×e˜è µwÄWd¨c¢“¤»Ú–ÄVxTнÏaÕÕµÜ?L²aç
+111 0 obj<</Length 26531/Filter/FlateDecode/Length1 216460>>stream
+ž|
+-ÚÂ>èîêÉ@c¦¦ò»ojï®ùÝ5»¡U߸_í¾©«ûµ³~mV“t¨Y9Ü+÷ºÚÄaü_+銢ŒìÓÆXÀ>A>Mþ8ßÈ8cù—í?jåLîW,ó³ëP‰Rôb;÷â]|Ũ Ñ@»Gð®Æ2Àð¬¸
+ð×Kûár†«ÔuXæj—è˜ì§69`4u“:7#kdçµe&#Å×+É@{6>•í,Œ­â碘ß
+Å'žSÛãñ+YgŠª£;u²qVè,Tèt*°ÀY&QŽ¨²%6?fm O´Bá8GÂû3س9ÅxœYÁsH){Wù
+f³³ê{0dç.t„
+ºÓ;&G”º‡r*åtÊ*úvÕ÷â®âº,uzg㧮¸šìUk˜ï%Æã
+3©à¾“)Mr)kVkÇp‡ø)ú”Ô9Ë ½ÏP}}ݓ¯0ýžªðÏ|§Èï’OŸ‡íBs§µXZ8£ñäûå[¨×·ªst_‚FŞcȱ¿ýä
+MccÈ%´Is9
+”¬µ‚ÌŠŒ2»¯ ¦“ÐP,,óhE$¬uA, HˆLööž÷yϾ}|ïû®ú¾ßÿüŸsÞçܟó<ç,Ä·kã÷Óìh“óf¤Ú™Á7rÇ˨óÍãÁØÏC›ÛÄšœ×PÖ파tނÜÀ¶˜„m±ÚµB¿èxb”œ“ø~ íLf¡­'€í<Œa¯;ï½ièZ;AMøv'P;™
+¼ ²êq^êA{ó¸ýĽT€v‹$~5ÈòcËÀ0ç͔Œ¦©±£ßQcE¬‰
+àÃÊE~Žf2K¼k ™¨S;…ú§h2Êóc{¡³š
+@½—Sü[oýRÿ/ñ1:Å{~¢‡ßä±%÷al-KªS|nz;^½âÔþRâEf¿ÜÍUz‡š¥ñ׋Sl#‰ Ü·Ü8Ƚk|Fù^˜².)±ÌŸÅÔŠß(¿²ž=¸gls:ҙm‹÷;ýb^
+ÎΨ7H97÷vÓ¯ýlIv"”úËÂhc"ÅE'){Ò[Mn¹»ç°¹ž¥Ü³tWÔïï®À@;ÛA¾šyV:'¤÷ÁV¢™¯|.Pûð×,´Ò°6‹”‡S)SI€æ;¬TÒæ+•‡hŽT®*é¼Íó%­²ùQ¾š£%KcVÓxç«Y#雟è«9Iё. É㜢\\HS4§I:Ýægøj^d¥™íñÿÊÓ¥4‹. мLÒˁÙ"]á«y¥•®
+éý]Vº:Dóåws¨>@³ÁJsCÚlTžG èZš ¹ÐJ‹BÚ|•‡h^§|=ð^j
+мAÒ%6ÿ>_ÍfIßO7"m¡VºÉWs©¤°ùúj.S^ÜL·Œs…ò‡€[éÚ‘ô£6›¯æíVZÐÿïP¾“>NwÑÇ4?!é*à“"­öÕ¼ÛJŸ
+éý+}:Dó3ʟÖÐç4ïµÒçCÚ\«üú}‘î мßJ_ió+Vújˆæה¿|ƒ¾ Ù&é·lþÛ¾šß‘ôú.Òuô }ÏWó!I¿oó?ðÕ\¯¼hÇ-Ðœ•l¢G47Kú#›ßâ«ù¨òcÀZ4´UÒÇmþ _Ím’þxJ¤íZþ$ý$MógÊ?žìýÊÏÏj>'éó6ÿK_ÍÊ/;Ûü••vêÚ­ü"ý†^¢_hþÖJ{BÚü•ö†hþ^ùe`íÐì°ÒBÚìTþ#ý…þDÐ<`¥WBÚ<h¥WC4ÿªü7འùwIÛü_Í£’£ }þIÇ}5OHú/›ÃWóßÊooÑÛã<©|
+8M]šü*3†¼¼ñÕ4+e´Çßõídb&iâ& )¯ƒ×‡‘w…ñ}}û¾2ýBz·o3 Dóle¼QÌ “éMæiÚŠ y¡}¡˜!¦Àä›s4í›Ä†´iß%¦(Ds¸r1PbJ4å…bìëČðՔw‰©4x˜
+s¾ñ}yyqûÚ0£}5Ç(Wcÿ«Ã˜ñÊx˜ ÆÿÕaŒ¼;L­Í_૙ò&1Sü[Ä×:IíËÄLKû~¡•¦û´0Ã\”V¢ïƒ÷‡¹8°÷YÊx›˜K5/K‘/ÔüûUeUq„»ßí~ýˆˆÃ*;ŒaX–€ « È°0 ;Ã"‹,²<„°ˆDdd ".‡èI<ž$BP!"B‚( H%‹‰æ` “ïÖ­WÎåd¿sïM}õUõò¦úöí®¢ÚEK¢oªSt_a\¡èȀ´sd=’®>ÑzH)ž¶FÑT¡èábßT£èaŠʘa¤¾©bÑ\¡hÔ'zLÚ_Ëz$]}¢õ„R|bڞT»èÉbO¹©½XØTÖ¨aôCiçœÎՌ.»Žñ{Ìöpº~hŸÍzŽ~DÏÕóÒô¤:G£¢ÑTÅè…eö”ZFߢ–ÑK„-½EÏ$ëeÇôò4=W+»Þ ÚW²^¥׫õš4=×
+ñwW5‰Ö yjÖ&¬x¤gž¿rÌóUáýCXWüƒ둣.͖IXŸ°aÃÀ/£
+þ/5Dø¿C84å×),$ÇPšmáp„E_FÆáâI„p„øˇ°HüŒ#ÅSE":’~k4áÂÉ?Šø¸ UFUg#žÚŒcœ©ÆKcÇN¸ôÉbœ žÆŒÅÓLM":‘ÆN&œBXLþIħ­2*›qŠxÚ0NO;œšþg*}ˆpzÀ¥OGÆéâÉeœ!žî8qýÏ û0álÂ9„³¨u&ñy„‹‚ž2Cžš-<ß?­™÷á\ñRóˆÎ¥y!œO¸ ðHÏBœô)^¤…âϸˆ i¶G .!\øeT1ãbñL áñÏ áRñÏIaç’Í!› ]•ÜXÝ
+öçÐ/AöC~û ´U„ÜÉ<TR2º!d¤*ìÑЍ!‹!5aO€^YIÂ>}âÏs«ÒúK~·äÏ°s|Žé$Ýöç þáç¶íxì—*ÈýÛÂ#ýwÖߋ{Tð&QA†û´ÿ^㧿Ú?¦ò³ÿ‘¢ÓW½¹ôßo¥þ ü½Žs¶ŸW]U´¯Õo`#òw´Æ)©q¡ŠRÈà•~ò<ì?Aã¾Ñû!û`ÿ-à1äˆúlîW`#ïӇa_á±þ˜£Áø2±²´ò‹ör ¿ÃïĐÃÄp†Æ1ÅVAÄp"ƐíĚ@ÚÁÆ:Ğ„¬ƒì‚ýô³B6Â>
+êƒuð°7¼ÿÀF-aœ±o®Á~0ȃ Þó.'¤yo¹Áó78×Ì.è_C~ùURYÜ!{Á↷¨¤,ÎG‹ÛØ"÷°ÈKì æÈp,îU‹“Ð"·°/Bp÷ÙY<ÖƒËâL²/C~Á~°ç ±&qäûö-ØX+‹5‰cßÙw`_‚ÆšX¬ƒ}6öb™t9xû!Ž;>Ž\/¾‚|7ŽÛ8Žÿ7ŽçG®Ç:ş‚솬‡}{Á¡j‹ÿ#©²l‡*,ŽõŠ÷‰Ã-小n7‡õt¸[Þ ‡ÛÈ!ouØ 7šÃ­âpK¸>‡àFpøm‡õuxN'»Cç°¾ÏÉáÜuX‡SÏá”u8'ò?‡½ã²!Ë`ãÝrxþ4ïJØȸÜZŸCÖÀF†äÖC°æî{°‘ŸÍ*˜ûÛáÜpÈhÝvHÛÈCž«C&ä°ô?!tȆr‡=ëðüÜk°ß„ƳK –t?ƒsÄa'2 Âþ%4žŸû äMØ'ІµHàù%P‡$ð,M‚£)ª+õH`Íx¨’øíލÄÈ*ØÏAco'ó$>Mªrxåü£í:äﰃ
+öëf+Åÿ?1B­8kÇyZdbôjKyaTtâËPщ¥²JÅRýÕY×`]SE'ÚZlÕe]u¦ŠNŒ¸19–,aTtâí™XšªT,Íٟͺ%ëV*:Ѷf+‡u[Ö~ý•‘q,…ݧ¢_®ŠN,ÝT*–žÂò„õ–/¬ïϺ€õUÈÖÖCYªèÄ8L¥b)6JE'¾Ñ*:±ŒS©X&²¿˜õdÖSTt¢ÊÖtÖ3XÏTщq–JÅ2GØ<øæ«èIJH¥bYÂþ¤x– [ÎmßÏJa«¹íqñ¬¶ŽÛžÏza¸mëͬŸVÑYÝ-lmc½õwªT,»…íQщo¯ŠN,/ªT,ûÌasÄe|Û¼cŽ1†>Vºå(ä´9c>büÀ|hÎ2ž†>Vºå#È%sÙ\eüÄ\1×/A_+ÝrÕ\³Ím ÛÒ¶²9¶­mo;˜×ÍAsˆñ€ù…yƒñuèƒ`¥[AŽ›æ$ã{æ}sŠñ8ô °Ò-'Í)ÛÉv¶¹¶«íf{Ú<ÛËö±ùö[`ØAv°-´Ãí;Ҏ2çÌysñcó;s‘ñôy°Ò-ÌE¥>œ™¬·¿Òm!µ•r¨;
+§5aÕÔe·™á´æ¬Zžìvµ¤Ú
+ZCh m2G;ƒi‘è®«\¡ ï&>[7ªÝ¡‡áÉnWψ»½ §õvéõñíl}‘ý|›zõ§: EÒ::ƒƒ}IÂjh
+¤½BõÕdýcf;¯×¨¾ÇI½‘Ìñ¦Á´žoH{۳󤁴w¨¾ §à=xN˜þúà6¼j§A~,×Gr—ë,|ŸÂ9øÌáý\;í ª_Âø
+JÏ]†>õF¹îw+\›¨Þ+6kæm÷)=÷:ÛVä
+…ë/ª‹›:irÂ?â_¥ç–]-°´²äˊRzRée„ÌJ­t¤¡šÖJ§•”ÞÊ(™AáÊD5³•ÅÜ)æe54'2»Â•ƒjN+W
+œ-·ÁYy”Žhªy­|ZIù­‚V!«€ÂUØàي(E©³Škf•°J*=¥¨–¶b4ÓÊX±JOY½ŒY唎òT+Xµ’*YU$++\U©ÆYÕ´Òª#k(\5ZVmÉ:·™VYOáªOµÕPëlñÈF
+Y× ËBìiè¼Û8„E¸ß Š²n)~AÝŠ³nO,ÁNò§Ô aYŠ=Ý¡4ÊRxÆ›¼Û Ê°î ±(Ë §,²²¼Ýaç(Çz0”g=LþõH¨ˆ²¾·²2²
+m?ÏY–µÙ³ ê°^–uÙ³&ðûHz=Ôg½°Þø­$½…ϝ­Ðe<~ÚÆ6yw;4a½+„V&í7E{œÓ ÙÙÙÒîóÌÝÄæÜÙ -Xï“A½Z±>­Q¶Âimmm͞ƒÐ–õ!hÇúpà¯J¾Ú¡¿ƒMÞ=Y•mWGôtFvA& »"»!»#{ {"{!{Ûïå™Ç  ëãa™Àž.ìÊ»'C؍û§äß}PŸ†¬Ï@OÖg‰½¸sz³>–}ØsA>3¯>xÆ~6y÷"ôg}I>3¯þ舄lwØy±¾"Ÿ.A}†°¾CQÁ÷CGŽ@ŽDŽBŽFŽ±<á: g}ƒ8‚;7‰#¹s˅£‚»Â‚ѬSËçVP§ ˱ìÉèÂq¸9?óxä[󻲸pïf'NäN.â$lLÄi“m²'š8…;ù]87§à{§!§ÛšßUȅÓy·(qwJ„p&¶gàÌY6ÙY:„‰Ü%ÎÆF"¾kŽMö”'þÇ~•IY\á·Ýï_tÙ]؅…Ù]qöv™Ù™Ù0$ƒ¡Â%ŽÈN5Ĕ,Ã}ã‚Ü 䐣’hL(¢RX˜
+×àÜhÒ½Sðbo¶O
+^âÍöMÁK½Ù~)x™7;–{zðyy…÷Ì0—WÊÀ
+ñèÞ${Ï w¹ÑA«D6ʓ«…ï^#¼Vx]rÖûÔ-8›ôè¼Æ›—‚×z³ãq–6éIçåõÞ3ßJÁdr½X¸Qx“ðfá-Éq捻àMÞìôf¼Ù¿³oñÆg6ãû½ñï¹ü€ Ü/6|?ÉÞ3³\Þê$Rð¶ä¤|v»ðƒÂ;„w&ǽo˜—‚ôf6ãÞø’f¼Ó_ތwyã÷Òn‘»ä×Þ#¼WxŸðþä¬÷©Õ´ÇÓkSð^ovC
++`ß|§}l(GÕ]þx‚º¢Ž¨„ýÜ¤ ²ªü4j‡@;´"hÜj+Ý:fÆÐ
+¡±>ÌÁþ®¸-–c]Ð8í˱.4nmT/U°­û¹
+àöÀÍ©Y±
+çbÎÉà›DÝðýÝ;Aäƒ žF,qs"î‚øÎ ÞQp¤«„†wÄIľ
+> ý>Qû0IPg]û;„<BBì‡pF…pç!6CØó5ð½7™H5X“Äu†ÆçjF¢M‚ÆoÕàÖœ€~‡(Œ¸
+cÃÈaTõaÄFq>ŒqÁ>`#¸ûEðÞ#Ø#Ä`ä4â%_"¡ÇQø-IPw½(ª´h­«Q]E±žQÄAëE%…QØE%EŒF±¶ÑmÐøÝè»Dµ—%¨qÅEÏB#îjakíhì±Ú£DuÅÐØ«u~4Tèuð¯{¬î·Ðxwuˆá:øsˆbȍ1ä„Øíèq2ÅpƒŒ!bˆ¯òU û7ö¢z¬m ëWŸ†ñzTåõ¸SÕ?
+=Rÿ+´“ЯÅaSüªÅ¿ìê•ÐÈqäü8rrù Ž}Ç©Çû@Ô{»;öiü,´‚.E÷Ýw©îæÌBS”.Ð—Ú ‹{
+ùÓæ% ‹V“—²EµÎÎsgMžÊÕ^¸€šr×¹9©õ¹ÔXXX´LÞ*¤dF*–‘Rá+„»_)ì..®®$[‹YXX´˜:*àê,áôÉK™Sq©)#}&GEDÕ Ç„ë[Ú, ‹O “½â¢z½óYXX´˜;ßU¢z _-üEák„¯¾N¸·ðõŸ•q…©§¾”bìjº7ž[m™z¦¯¨þÂÈVd­¦"(j(Ù¼daaÑ`òÒ0Q7“ÍK­&/õuáÑÂc„ǺϘl5NÔmÂã©)ƒ›¸Eíüÿà\j,,,ZÙh(™‘&ËÈTáiÂӅgß!|§ð]Âßž)ü]²u™……Ek€©¦îvu–púä% ‹L„©8¨)#}&G͵@x¡ð¢·ËÂÂÂâÓÁd¯Å¢–’½óYXX´˜;ß2QÂ«„W ß'¼Fx­ð:áõŸ•q…©§6¤ÛDM÷Æs«-SÏlµUxيÌ¢5ÀTdÛ©)o¥3’ùÔäªÝ”Yþ죤??tûnÿÊ,?¡Ìòç%ý9L™â×c”)ž¡¤'O¸ýQÊώQ¦x’Œ¢ã”Yþü†’þ<##Ï
+?Gé⣞§ô²÷EJ{/„÷Ð+”YþüYÔ)J¯’»*5LE}š’ž¼íöÿ™ ÿ›ÒÅË áãw÷e–?ÿõ!¥‹Wۋg(­<É2o"ìͦt±÷BÀªgåP¦x’G™âI{O²:¸}¥‹gÉèèLéeo)¥‹½‚Ù9~ÊO*(S<éjDV7á eˆW$uSVˆ2˟¨Yõ”.^]¤̊ëAz€¬‡r¶S¦‡ëõÍz$_¦ªùjƒªGªƒê §ÇèÛô=ºAOà\õ¸zRWÇõ§RýQR§¸wÔSô·õ4=ƒ Շj—:Ë%š´Rj¯Ú¡1~ûÌs\b”ÎÅ_Gíӝ´+¸Lwã*§J‡Ô\Õ îQ îÆ3ÎUF9ú«z ¢‡q§\MߤGèQ|¹Z¤¨˜¦G©Cêþ†«ÇëYz¶žÈyê uT=­žÖ€ÓU½¬N«Óܙ‹ôT=YO×wpuFíVq©ÎÒZ­RûÔNµ
+œà¹¼ŒWðr^Éx#o❼›÷𫼋â½üÔkü¿åÔ8a'âÔ9q§»ÓÃéÉ_áþ<q?ÀƒøQþ»y
+N_§Ÿ“Å_p˜ïâ™|7ÿÝªÓªèÂ羏Ž¥–îîîîîA$EDDº»»Pº”PAP$$•ìîüÏî3Î~ÜÏ]bïÙÇ^ÞwÞ9wîwæٝÙ¾¾A¾Ñ¾±¾1¾qþzþúþ†þ&þæþþVþ¶þx¾JþßtßLßlß ß,ß
+*ßbßRßrßEßß2ß
+u .ԃúІ{ÿßÐ(Ò#ã1³)4û×1Í¡Å~ý1¢±ø'4ąx@BH¹!
+@H þ oµtÚ¶ÌvÌöÖ³̎â:9•Îð„ãº0ŸdvµÆwƒ§×ÝiŸ6Ïz×
+ZK›
+7£F8íH§Å}ßs=Æcü70Æi“‰æ¹7ÇÂ8ã“C
+×O§½Âܗ,ý¬ýlÚ u€ÙË91—ãscÇåÕN¨ÌçZ͏´“é W c,ŠÅØÇNµ$³”vJ…})mù2XÖqåDË3+XÏ+j§õp_*W«`U¬†Õ±ÖÄZXë`]¬‡õ±6ÄFÚI=ޗƮÕ&Æ5µªÍ´ÓzlnùØÒq­D[»Œo£Ø`[×j;Ñö̎Vµ3³³“vjöå ãºà“Ø»áSØŸÆ\鉽±·ýðYìïŒêÅìË|F;yïËs®ÕÚ¹´Ï[~ ¾À:ãé¿è2~¨vböå¥p½aN;G°ŽdŽ¶žŽeŽ
+xΚ
+¢h_Æ7'àDœ„“q
+æGÌë‘úò‡Úk{¨}¹iÜ-üoãü?åÞgø9~‰_á×ì¿Çñ'ëo™ßùÞøC¸þ7Ú+|À}ù9 ÿK@ÿWí„:ÀߌûÿÀ?ÿþMæH=¡ˆ\«1Èç8¿vBPLãbQlŠCq)ûø”€J53D;¥Â¾$¶|Jê¸d¢É™)¬ç)µÓz¸/©ŒK­%:Ò—–Òi§qM˜^eÖ –Ï(ª½Ñ”Éò™µÓDPËgͦ):€²[>‡všèÊiù\Úi¢(·qy(¯´ù(¿vª i PA*äÉL…+BEµ×aÚbTÜ£™JW’Ji¯;´¥© •õd¦rƕ§
+£áҎ ‘¬£´÷ÀäkùÑ4Æ£YÇ7ž&hïkÂɖŸH“hŠ'³N5nM×Þׄ3TféR›Åœ­½º 9–Ÿ«&ú€æ7߸̅ÚÉtA‹\j‹™K´“é‚–©/ÓN¦ ZnÜ
+px Ãƒìð‡‡:<Ìá;îð‡G:<Êáяq¸Ìᱏsx¼ÃVäàY›´Øª9 O ÄqPêCårH|ғpšxfV;§Ë³²(Cìp…8Süs+ĵÄ?¿Z8Kî_›²Å.(—ÃâS7 çˆgaçJ}ýJsžômXœ/O)2|™Ô4©ז^Í*ė‹‹
+qø·º¨\Gž[b¸®Ô´IÂõijÔp¡Ô´«4Mú¶OÂõųC5ryÊÕqÜPê;–ˍħS.Ï몝˳:ÛëÚØ]+ÄMÅ¿[%¸™ôê~¹¹Ü¹‡áRÓ³\n)>½’p+ñìÇÅRߧÒ\"}ûV#·–§Üj¸Ôô«·•^ý+Ä¥âG%8"½\Tn'Ïdø
+©R!n/þÃâøJ©~žÜAî02 _%ž£íødì²8¾FêÇî(5èëbßm¸“ÔL¤kŞdGcO®_/þSpgiZ.wŸéâ®â¾AZgØñÉØVþ†xÎ,—»‹Ïƒ•àoJ¯‡pi}8 K<gW‚{J¯GðÒ:Çp/©™[ ¾Izý, ÷ÏÇãøf©Òp©yŠnûé8î+õ¿2üm©™gÇEc'úÝ&­ ìXhìßÐwÄ~>÷—Ö…t»Ø‹ì8gìÅô]±_´ã±—Ð@±—$5Ëi°Ø+âxˆÔÿÉðP©YeG#c¯IÀwJë:;ê{={C)­i”Ø›{¢öf#ö;{{»‡Œ½ƒÆ‹½Ñ(jïŠç.§¾šõÊ©S{ OX¤ì/çKè3D|;ôèP‹4N¡¼Þ¢ îh½ Z ½
+ú6ôq‹ÒÉBÇ ˆP¡“P¬‘´ÁÐãеe`¤×.ƒNµ(«ÅA‹ û,
+Ï"ʾút¾E9ˆ°aeQÞ<òÆ@A_µ(k7ïr(Vi^C‹jc_6
+zºÉ¢:X3­ K Cñv
+æZTg‚ƒþ€¨ÞmÐÐP|»õFC߇¾aQÜ·~[(ÖXýŽÐ•Ð§,jˆþõ@ÑÜ
+æz#4ºÉè›ø¿˜—Èè}ÐmPdäÈv(ÖCdôèß [Ýi
+»'væÞó{âә3|nW>|¤rÎ=ÏÞy”Ï7^°±T?˜‘}]x9¿Eâ!t:3{ŠGÑéÌfç=;³yé5=>|T 2¸Œh¼‹øL'aøS)b2(žf,æûA3äꇠPfRìYÎËH¾cñ(UÞf›gS
+6‰G€çPüJ
+ãRv çã
+‹‹ðQ\ ð1^Ÿà‘ø$®çQ¸7ãV܎O EÑP4ÂCø%66ŠrR̝ÑØó©U§Ê¡ÌR€¸Zñé3 •ØOg»!„Þàó·ðSAD+Nµ!ƒx—~5ÌQ¼Æ¥¡LÐ{±Ô"\ÊünáŠ!Ú3¸…’RSàØ8( Ý W¿#UmÆ%iç]¡Ô¨…ÓùYèx3Oó÷J0×(ÅÑ×8-}a¾…ØB¼ Ó´R(k¿­‚Å'*.Wà|Êûõ“ò‰¯ ¸’Õ«˜ïøÉ~ý”|â+ûõ«ä_Uqu«W-ß|jøõkæ_+ˆ^ê8êuÕzŠë;Üidü†ÐÈQo$¾ 4U¶™ŸÞÜ1º…â–wZ¿5´Q¶­ŸÞ.H<ƒöŽjGµ£âNV/ÕëNç £§AG½kønÐÝQOšGµ§£Ú[q«×ËëÎíAFï ý”íï§ TvŸþ³ ùvT‡8ªÃ·zC½îŒ2zŒtÔG‰¿F;êwÍŒ£:ÖQ¯x‚Õçuçî £O„{”ä§O/ܧì/ͺ:ªÓ(ËàÅáŠK)ŽV«¸¬ârŠ+*®œuõ<ƒ­æ©¦¥ “í»Hg]žbzRńfå~æÝpu
+à“:´ó6GigΫ¿B‚ÖŽ×B˜í…‰ =1JyÑTÑ6–vFUF‚ê%ڑå,[žÖr˯t]y ɅŒO¡ÓÕ^ÅU ôd5¨qÝYքZP›*.u}ôzTy|”а¿Û;êM¨RóךAsªÙZbtIÕpw:U"©¨N՞¡Å\÷;*>̀™Ê:}{ߋÑפîšhEµ~1m -}´·ûè‹@W¾¡S‘ŒÓÒ|ú]èÅÍytƒô|cz@Ï ÷zAoWóÍñ–í}¡_¡žì¯=÷âÂj•7+;†Â0Ÿ˜áôèÝπ‘¶?
+î´ýÑp—OÜëÓã}úànŸþD¸Çö'ÁdÛ¿îó‰›bٟÃý>ú0Õ§?ͲÓýæü`‘¿Å@dÂ,˛ípwŽOo.Ì ˆÈ‚ùׁO‰Ôµ!dC©…QA6RE”¢38JUe1T“_xñT™uY"ÕbåTV‘j°dUûT¡j§Ö5욤®ªBŒÚ¨ŒÊ ¯0vgc÷µÿû®±ÿÚ½Œ héNœ®ö
+cOèCg¬ñÿëOkïZ{ƒè|l­:c¥«ËXUÆj2V±jŒ•b\Æ
+1V¨51…VÀ­·`¼cEÜoýŠmÿ˜qu˜vÝcÜü0w<7ö¹32mo†ö\ôaf€2«ÐcÜüp:…ýÏᒏ¹ŽêCÚórNՖîœÜÇ|Å ¼”EÔZþÃÚós‹/ñS—zùËàíY7–(+´çä>V:ªjÏË]¬rTWkÏË]¬Qü˜—²–Úã–ÿ$µ'`ö,‹O9ªOkÏË]¬W¼ÁOÝèåo‚ÍÚ³,nl P¶jÏÉ}l PvP۞ÏS;µç]´ø…â_z)¿¦ö+ËF{~îàÙå7ÔvåóÔníy-~«xŸúœ—ÿ<üN{–ō½Š良Hí¯þà%íY7^vT_ў—»xUñýÔ?yù†líY7þR$£¼¦}7†×‹d”7´ÏãÆðWÅojÏC/þ¦øïÚóЋ·¿í§¾ãå¿ ÿОeqã=ÅÿôSß÷òÿû´gYÜø·£º_{^îâ?Š?ðS?Ԟ—»øHñýԏµçå.>Qü©ö<ôâ€âÏ´ç¡Ÿ+þŸŸú…ö¼ÜÅAÅÿ÷SiÏË]|Y$£Ö>ÃWE2Êíó¸1|í¨~£=/wqÔQýV{^îâ˜âã…|ê;íy-¾W|¢OÔžwÑâT€rZ{NîãL€rV{Nîã\€r^{NîãB€rQ{Nîã’í]֞‹>äØÞí¹èCn€âў“ë` hÏIÃ[à
+êÎIÃ[ŠÔ“†· „êÎIÃ[ PÂuçôûå%ÅqÄñڙ=âÁÝp„ãr çœ3G>Ž#çãÈ9)` K ‚ B"
+#ºZcf´æÞ¦v3OK»Ð"¢«µŠ|†ÿc„­#°FÕYa۬юÙÞæí :÷8;::{'fg›·‹ê¬CâìêèìÝTçWl„Ý#°F³‡ÍÛSuî±ôfört>̾6o?Õ¹Äҟ™ëèyÌ6o¾êÜbÄè胙ClÞ¡ªsˆe8s˜£kŒ`Ž´yG©Î=²žÑÌ16ïXÕqEx
+˜ãlÞBÕqExÆ3'ؼUÇá]˜ÄœlóNQW@,ӘS]c:s†Í;Suî±ÌfÎrt9̹6ï<Õ¹Äòs¾£k<É|Êæ}Zuî±üˆ¹ÀÑ5ža.´y©Î=$Î;:ûbæ›w©ê¬Câ\æèì>ær›w…ê¬Câ\éè쫘ÏÚ¼«UgçsŽÎ¾†ù›w­ê¬#ûçYÇ|Þæ]¯:®ïÂæF›w“ê¸"¼ ?e¾`ónVW„wa óg6ã
+™˜™M˜M™Í˜Í™-˜-™­˜­™m˜m™í˜í™˜™˜™]˜]™Ý˜Ý™9Ì̞Ì^ÌÞÌ>̾Ì~Ì\ffs3Ÿ99ˆ9˜9„9”9Œ9œ9‚9’9Š9š9†9–YÀÇ,dŽgN`NdNbNfNaNeNcNgÎ`ÎdÎbÎfÎaÎeÎcjIJۄ.¶F^±½#v)üùí2TZìrxòÛ±TVìŠèñÛñaX^z+…a¬ôV¦
+bWŬ~;‘âÄN
+¢À‡žx™B†ØiaXIz3(Aì¬ V0¬"½µ‚XUüu°šôÖ+’‰2¦U»Q&IoJ»²÷Û-(UìVfö–Ý& Ó¥·]fHoÊ»“Å,ñt±˜-žnæžYvÕ»§ÅZâém±¶xúš;gÙ¹TWì<s·,;Ÿê‹=Èbñ ±ØP<ÃÌý³ìÔXìQØE¿=†šŠ]€õۅÔ\ì Ø]¿=‰ZŠ=;í·§Qk±g˜;mÙ³¨­ØsÌ=¶ìyÔ^ì',vÏS;Šgù Xö3ÔYìE_Jl/¦®b/-’ÝdŒ¯Hv—1+ŠaŽŒ\U {ÈÈÕæ7²×P/±×±·øŸbñoÀ·Æoo
+½z!â\€ëÎ9%¼‹‚w¦ª¨WQ‹'âM›„üª]‚neéð#Ÿd4ÖIÆË*q=4êæÄ{З}T§R
+o¸L̓†ù3oú(ߟ,ü¿t|îY¡¯C‚¾
+}ú
+J[}r³`Ñù~à±y]qÅW"/:á|£x4œŸ„w¯u6éc¼
+´Íâ¡A!ž!à0´áh#ÐF¢B6m,ZÚ8´B´ñhÐ&Ê “ÄšNC›Ž6m&=ng¨®:W\qÅñÒ,rÏ#W\q¥$ˆ—æÓÏ£Çã—îU€+®¸âˆÄÐrÏ#W\q¥$H -W ­¤‡çÒã-­¢èÈã9p-EG.¦è´Ž¢)›MÙl¦hÊf+™Ù¼ÌÜÉ|…ù*ES–{(š²9@єÍaŠ¦lŽQtds‚¢#“yœ¦èÈ㠙yœežcžg~HёßÇy\¢èÈãSŠŽ<LÑé
+ª•¨©O«³Õ*Lá#”·•w•w”÷x©‚ª¨LUÕ,u š¯Úùhu,£(íÊ&¥YyMù¹rY9¦W>S>WÓT]ÍV‡¨åê\µB­V©‹Õ•jÂ,Š9˜ƒq C+Á<ÌÅ1|,ÚqŽ@ŽævÌǑø¼Ã>‘[ÐË3y6ÎÀœ…§1€3ñI<ƒOaÎƋXŽAœƒ—°
+«q.ÎÃù¸kq!Öáb\Š?ÅE¸—áÏðÛ¸ëñ—ø>+ñW¸
+LèAI¾ÁRfÃPÒã–Ð9 ýà^o’2å}?yÇÇÆ{þž{A6¿wöz⯈K¦¹‡o‘Vq[—0q;3qŸ5ÉLíá'†¸=°8öåx*žîØÝlÒI%=™Šl+é)Tž ;•ô£¤ÓH»©Ì$;ƒ´—JÙZ¢àM§$[ïyª,éيyÇ矝˜W|ßÉwð]|7ýWîá]ô¹
+c
+²Þ K½Š(ÂZK]«­ÁF²7’ݨpҍtyVgyVa>Õʨ‡ù2c)ÕD¯¥²æ¤Z1՜²æ ÞTsȚ¡h¦yΰOÙ,Vþf†q©>Ý8ÇJØ,Xi.5γC`m”r'ݦlÓ?²émúZ›~žm€2
+,—’yÒËôÊôÇËôâ2ý‘2ý,›
+ùP=Yùú[ùz4_?œ¯¯É×Wçëãò©u>,å- ß è? èÛúú€þr@_ÐsúÂ}dŽ>,G²WNetd´g@
+™'ÛõŽvòÝ>1Þax£ì֛.£ p²e­‘`!©W#Áã†w k;2šQ#ء׀OꗘSê™SÆ_ˆ8ìÔ¬!âÞCª>â¾J·ãY(’Áe×Uò> ÖÞæJäœ>Mèq÷f
+ŽúΉìp„9ÙNÅ8èØlp´ûÝ2Üå’ù¶¥Új'ç)£•Ò4Eٜˆ±Ò%z°ÏRÆe…%Æ3äÞéÉ0Š
+2*g§+ÒxO3|R=á8#§sË£{­†×a5¦¹/S}4“ˆ1E4ãO(’ÓïžiÐôð”168ÞA]2Ï8cöbó|ólóCæIf§y´y”y¸ÙjÎÒúk™Zº–¦¥jšfÒP£÷VˊÆ~ç)u–)S(
+nŠ,tPñPôqð’ýMðQ´j(:Ÿ`Z¨¥è‚šhSXG°Àzx•ÆÙÍd·h„ ÚÉî X`3ÃØB³Ø
+ƒ¿Ðµ²°°B6œì"ööË¥§© Šãgfz[J}´ÄD$&NŒ&X¤<[¸<j±Ø`»@všh#Wlh{k&&jü ,4q'¾À âÂ/ àJ]¹QÜ¢ ñßËEÝ0qcr矙û›3gzoϙdf|à:v\Ïüà¶'b­,>Œ=˜X‹€‡Øp
+Noð¸x#oÜãâM¼ Ư̈Á-¼àpÁ­¼ÜÆÛÀ*WÁí¼ÜÁ;À]¼¿áȾ¸Å{p8»-s1&ÆÀwÄ8øž¸ žàâ>ø‰x~-&ÁsbüÑ?‰÷äRnˆíF”RVQ̕î…íšÒ‹X:(üˆ³¨bǖ׵›lŽ(Ö¿b‹
+Á«œvG”Ñ®2çgo¤¯²¦&¾¨ÆVÔ¸û«s¯¨Ô©®¨îE4þº×³Õ«œŸú¶¤ô.=žo—÷ok¶dɒ%K–,Y²dÉÒ_jí~Z*;pj±*T;mXÄÆ.ÿw±‘4Z›iÜqЮ~0㵙”ÓåŸÞTfΫ@™o© +&ÛÁÃ&;¨–n–2bsÂRI³&sÚF & ªÆ-umT»êÛÁ]ãÒ Öù‚AÊfSš ëél± åd4sºV–F~y4™Ñ ²š õH¹>Ã/ûK¦czªXHê™ü¯æèYMFôLA*æ´DÑŽwÇ¡hM2­å}}z:‘ÙŒÅ@™Ì˄ÌiƒÉ<>O…\b@K'rCR?óûRœº)Fa
+115 0 obj<</Length 2957/Filter/FlateDecode>>stream
+H‰ìWËrÛÈýþC/©*ê7®š…Dʶ&¢4–è§dWŠ&a‰
+°I*Šÿ2›üOÎm4À,Җ˩Ê"^Xxߏsïì¦wøòJ°›u³4I–9v=/{{Ÿ{‚-XO%–¥N')>[®Çišâã*o1ÿÁ
+T¢œ1̤"ISk˜5
+‚ÓŒMîz‡Ãµe³5ã‰P©4ôW
+œ•RcëlÆl—œ&5$BV"®ûW‹âf™†·Ó¢È—l\åìvu ÒÄõË»œ]ƒ«™Oûy^¼ŸüŠP¥¢1êõG‹õ§åô {XlnÙi±ÉoVÓM>g''¿]^ŒÉ®Ã²
+…K4ìãŒþ
+…X+¥™qI*µ¬-ã«·ìoÿ•!„LD_ ïËÉé¿é!L°D%\£
+Tb´cáeöcï5‚íkIQv}½ 6Rg‘ÈD› uáhÒ1‰Ãû’ÞM¦™….åßEb¹ôôÊà½ÍO…èRx/Q|H·"‰á½‘ˆ„º¯ß‰(^‹m$¶å‘1Gă„»jBëHbfQ:–Y”¤·™~ÏÈ®I@›Ý tIÆíV à2Q*Š4ŠÅÎS¼
+Ž›ÈÆ  ñÅL–¤Â¿ªÄeѯ<‘6¦n©'ƒ¬cv×¼ÃCx°qÌð`e$±Í$j Ì͊ bï"1Ž<L•WШß2xîZ
+•ÇÏ𚳏årY>,Š6+‹ùb³( vw¿Þ°yc BىEu*Üå›çms#‡ñ”ÑDgˆ|O>W:ç!wU>`SQnØ¢ð?~Z•äfWy¥±ü»¼±ËÅ5Ov™h^l.4†Øì]ZߙŸëJ´S7ODä!‰܌ŠA
+òùè‚
+
+º´j
+ ”MB—Ò.P§Z\¯÷ž¼)PÇ`>h4%W¶¹xU5+q ´€×¼8zs†w¬©†Îo·“Ó‹ózL6^Áw!ZH+µky(Z^í檽Š¸ö]PORRåtÆú/ —hKûø
+118 0 obj<</Length 1859/Filter/FlateDecode>>stream
+H‰´WínÛ8}¿Ãý)1CR¤(˜‰Ól3[·ÛƳ3@Z,[I4#K©¤4è[î#í!©/Çi¦ÌæGlÑ÷ãœËsy)A·³ã\
+q&B#µý”B÷©UBͦœ-8ãœ#ìa׏³`uò›Q:š¯Ÿ¹ø¼ÏàžtÄDDQ6±²9¬¿ôþWÁe^ÞÙby—–eVЪ*«Í]=†ÅAµËè}¹¸Ü¸gdY9ÿ¼þy0&
+A†Ög³à,oî‹ô=æí]”mv[§m¶¥×¯ÿõñýʂ:>—¾
+í¶õÏ@$ý.Ѧ¸_@m=YØ QtAÑW®^Ë
+ϋòkV·ÞõâÝ¿¤É2Àøy²—ÿ@¼6”r;Æ㱟‚5Ê ŽGPGŽh‹Àf³{I87i›5ÔvÔó“qçÄÚ
+֕eØãQ恈ž—ù pþ %q¢„´xL¿5?ªh/ÏÅ)÷ 
+NÚjqQnêlg¡L°ó¾;Ÿb¿òàdýèîSþDóEÂTp~þ†Ü°m²ú+Ýà„yh2G¬$”?½Ÿ†iïҖðe——xÿkÅÔÏ^ÀîWj‘çò3ZÛ QÖõÚ½@W¸ª¶ÞŸ¼é×4/\À÷€°½Bعë.;RZ%=‹
+ÏÎdox¾àÖOωÛ±é!…°•\L³£)¢ÞbŠè¯ÐÔëÃßõànéËËïÞÒ/—ïàü3î
+121 0 obj<</Length 2223/Filter/FlateDecode>>stream
+·ý¦/…kŒ”£ÓÉ
+éJIϤΎÇúÉEc¶'p¯oµ×øë\܄žÂËë3’½ÊëôˆÂ鏭Ðg
+‡ý¶FªÛWèZqdÐcˆT&¦Ðí÷•®6¸XLgš6Œ88{{~òË{œ‘j,9&8ÿåÃéââòÐAÑM;ÄãÑs¦éØw±§ñ]ó¸Z}&ç˜þ®cZaWék Ãv…áJ„ܳÿÎ=0x
+ù,[ƒž/Œ6o‚~ž’¼å&CWOSWϞ2„¨U XzG Ëv6ö²u
+~°wå.û6s¹‹VÏ܍ðöހ©V<µsí \Á9á°ã?(”Á…úùÞݗÂ$oáÏ.oÖ]ð…xÒq¾Ë1‡‘ ©\ÞØ7â3!ÂrÐK{ž÷(4W´ï{òþ_ò¦
+4[w·}Å"açÔbÏ8 ±¸ÚЌ„?· Ý†ûÅÔ®“È[LC¡ ÉßK;’Ñ^:b󙺵Ôãy•'9
+124 0 obj<</Length 2538/Filter/FlateDecode>>stream
+ŠWªpгáa¨¹¢ 2†QíD0:³øK>pЙåœZÍ;³F›{eÎ&+¸GpªÊܬH@IŒ¢²qZÉÁlÏF0+4-u™›-¡žgš+Ü &ž{mtñÀí¤wŸÛæ€Ñžd[˜ï©ôüð®©R扼éPtóD* c3³6’Y…^ÈÌ¢ÝlQ)`V¨1cáž.'é õ*ºÉIw±¿å‹ƒ<÷ŒSÞeEÀ¤  ¬%ÇõvÛ¯
+”øÇHG3Â[Ìõƚð֊óâðxÿåù°æªñ¼D†ü0÷Ÿ!bƒ®3Ñß̗âýjVWdïþ‘°òå1¹ÈÎ\ù’zëÌ» Ã^y‰g÷ît
+ëˆSôÔp6½*nÕIEìtPÃmp”~]َZFÎ¥ç2T Ø`\V(þíŒ+QžH¸ÌáZ.*²¼ £¼÷ãçŒé¼X.æŸÁÉݺºÀpª¯'5"¾…õ
+127 0 obj<</Length 2351/Filter/FlateDecode>>stream
+H‰ÌWÛnÉýþC¿&b«ïÝã eÅ^XòZä¤E@S#‰/òp´òþ¥÷aÿ'§{.ìá͖¡у†=S÷:U]ÅÉmçðNn—FlÊiš:2‹~O;7ÏN&¤#©!Ö)jñÚ0EéYkñ2ÏZÌÈ<œe’.@–
+5ΤĤpÉ)¯Æ‹¥ˆËd0™ßN³^ÿn4ŸgSr¶˜/Æwy—[ê’Å,#ïæ½Á8œm’eóî¯ÃŸ*k ª'äd²¼ŸŽ~'“⎼™Ùm>*²kòêÕÏïμ]‡§¢ …£
+[h•:úT³úp½DÍoãâÞVǶpE‘¼$p^ù4™¯ûT½éòíU=µ²ü|ºVX­
+«$X««Š+.«ŠkMðS«ªÜ*ªZr[ùZM9?±­ºœ…ñJ­ä)Z5µ›«®©ˆkwM)ƒåÅm´Ä°â€ðÂ~´¼Ú÷üKÖø+[(´¯ß,´Éüþ¡ ¿M®³E¨Ñ-õֆäöz“ÏToueÄõ¶£¨ Uï(EpÙ­\¡Þðo ۖ‚ÿã‚ó3 Ùw“•kWqí»ÇV|O)¸JðÞ[¬eQ]p c¤Û[pE«àvsÕq}_\K{”TTøûx5æhib{jŠØž=\•=1×ûçÚ&¸ßì÷ýs0ÿ„6ó ïpË?ÏäŒ\þÊÈõú²#8ƒ0s  §ÞU°(1#¾kWáJc¤ÀF+_@™ýe%¹X<’srœOnï
+Jj’²„åN¬±µçbÔ%3-®÷û77ŒÃZžRŽ
+imnO^Ú*¯†r%b¯¢µ­ôª"iyÕbkom•W×Þ­­ò ]«ìjB±ëW¼ýª0Hä+õ×=F©%tmÙÝ+9ú7 AG!
+130 0 obj<</Length 3731/Filter/FlateDecode>>stream
+H‰´WÛrÛ6~½.©™ÁdgöÂq’m:IÜÄÊvgœÌ#Ó¶º©t]¿e÷bßg?<€²ä$®/,üÏÿ÷ÀÉõìéßÏ9¹nfŒØŒÓ,KÉ6zÞÌ®f_fœ¬ÉLRClª¨Å±aŠ¦da­Åa]L˜!¥”Ib¸Y&‘ûmÂi{¶œ=}É 'Ë+óŒ‚Ìÿ—T¦ZŨR­¡0’,·³§§!«†0Ê¥Úý
+®­ÿÕ*#ͪœ-eŒAì
+b—w³äÍÉ?­Òf¾üuæå³^ƒӆrCLoRåt8~ø/’óuy½)§7yYò¦*«ÕM=疦Iµ-ÈY¹8_ùw›E9ÿ´üic¬‘p†,ŸÏ’çëf·ÉïÉݺ½!¯Ê¶¸®ó¶¸$/^üüþì3êéK¢Rãq¿0ËXa‰N©Jô†1Ô&Í|Á…0T'ÿú¿üyW^,‘ø뙲åD *^ D(ª¤OéÕìâìA$]Z=P´‡Ìˆ¶4ãš;–c¨äSþ@YbÕdš¥Ô )`I3å&2 5W”Æ0ªSáÅv£X<É£XΩÕ|»'4èI)Km/z§*‹Å
+dtV­ª²Í×eC¹ÊWmUß/vu±ÂÓ^¤ ^RÎ'¼)ZòyÝ6äBþÀ>‘ö&oÉö¶iIYáCAVp×Å%…Ê¢.®ªºxâä
+´bòºéì¨9p¬Q=ÅJ¸M)ªð&W?™š0½”züË~%ZtK{²ƒA(»”ÃG@o\ |ø.’g¯–ó…âЗ&Ï_¼<ùðïõ€ ›¼üðötùêìí0ß{Ñ ÓLŽÖJ*T:q±£ˆ]<ÎÔ»1yÇÔWó‚M:.<6€u`»Hìz¾Ð-;Mp:_ÈN$Ï«ò¿-9Íëbð-X©S§Ãº €G¨Î\¦¡X´OO³õ=ï ¢5Zaó­3¾g@ÈsqbkLù# ê)¢ˆ?ÂÔE<fBÄ:£*uVX{˜ò6Ôrtß¡1*î—eáŠ?ÃDЩcõkGè›ç«m~]LZè)zT]m†º“Å­Á¾•¹ÎP”ùçMÑøjÎ7ëër[”-©®üºöB?{¡/Ô¯ÎîóºÜݶò±‘HîJ
+ÿqöaIÉÉæ.¿o:¥¡9#®ªÍ¦ºsÍjWÝõ¢*A×#Û
+´Ím]x}«ª®‹U›U¯¯oÚݙ>ô‘¹4å·mµÍÛõÊóƶ®ö"4ÌÁË·³GwÕhN®Ã@íÞÑ|?À{á€wÂ÷ ظE{“cwÀEŽ+5xGü8SðˆéÀûNïLªö;ÉEÂþè
+ö{yC.>1r¹¿É êy€§
+Z\Ó¬]W À¢a­ô/€ê6/ф7÷¤@lWë2­_ÆîÖôYßM=b1çEæ77÷ë` Ý0$@u¦uÒ©<Ú{«šÜäõ坫°PXтçC-±Øq1\$"mô·]ŒEsPš(ö ™üÖ¸'çmÞÞ6ñÝà|y²üÚÕ@a³“¿ÙG·€“ß÷o‡v¿8Wåæþèšëª*Ó=ðÅùޖ+3ÀÆ Øiü ü
+nà-‰.Sì Ó?!X =1ŒÈtÆ||Óù&ÕÔåƒéÜ a¦@نÁ“ÆZ¯,6Š¯º/™—Ƽç ìÊmÔ¼‚»™Þ´å$²‡™7Â]n,“ÆÁù{q@ÒÒ.
+`ªh®‰¬fUD¹š/Éj³)róþêÔÌlý㠛7ŸfšŒyyÆñ9Iú¼K#I7 ÎgƒÌ›†Ò2ÕH‘`(‰V8tbIzÁ_=ÿq=¥QÔP­qÈ%±jUi²U«ªÈV­Jb­
+»+n›}Yã·¦¶Íû¶yÒÎJŠëýG¿Ý¢Ïá‘}i²}ي>‰MÐGɓZїú†×
+|Ó\¸nºî¢¹¿ÈŸ¯»ë_3Ðv3ˆZa1àë°«®ƒ{^Y~3Ô]ÑÔ]Y¼«ys®ŽeÃNU]vÎr84"êkឪ®C:-‡¥$qI0m„"Ò`+ET\³a!‘ Aà©ï&6†H ƒ"†×
+133 0 obj<</Length 2465/Filter/FlateDecode>>stream
+;úãNÜ4¼¸õ}ž(^=¬¦eÁFã1È^Ãk0-³¯žV¥\ §‘ä0;µÊ[<X²Š³\²òvºg0µ¼-Øõr6[>`±ñr1™–Óå‚Íï×%»*’YÅBmb1/Ê×mCãp¡vœ©bÖïÕgx&¼ÎIˆá¼Š!LZ,K6]øw«%9¸­¼Ò¸¼†]ÞØY1Zï{#õ¶á㫍å6­b˜Âˆ¡ÖæɗM(A­M/"
+ë„'…å9_j_YpÑ{=I¡öP%
+gmY…HCˆôœœ§‹ß‹UY±žž}Ú6¦
+hK„몭‘(ã3%âM04¼<`0éÀûÖUŠ›„”Q:!›ë1‹°‡>º5¨<FëÎϽg½:òl'Ò=íւ`½í7ñ› x
+-7h!¶æm¬ªf´_}݃Ä?Õï‘(9½ÁηEi­z¥öOQÚÆ×¥æE(mc} ¥z ¥›`|/”b@=k^‡$ã€b=솒ÖI?–ਠD!»¢¸õ«ÙR,[lmÁs¿Þ>Ë՘¶ßZ²Î„_’[¢ÛڃIaÓKmM3Y•ûsd}§ñnž0Œc¦g‡•¬Ñ&Ãeâ9oulNM›³‡)Øs}øVwƒ_ì/v.öÇg`þ›Ç¯x‡}ìGë³ágÁ&ÛÇ®à\Ð2C?42˜ô€ïXzµÔ4¾üÊÀnƒ;Ã><º»›MÇÔªYå~#¦_êM¿€òd¹øwÉÆ(®xö¶+X¡]},9Á3=ëXÊrÚ«˜Ê2º•Ôs½FËWUÏØ9‘¼<yt%U뛃KTp xØ:1’Ëäø‡”rˆx8¤â0nÝTÇÿÅM¥…ÔÖ-Ë­¿n¤6ûÏ«ƒ]÷ÕÚXz]a‚Öšr.̎++%çiH`ãìöœF%ƒÃÁÐÆ+f“™pt]&gŸú—Ýp|Uùà'£›ëê~]Å£·!°UÏWŸúb¨#…ç'$Ë4!xÒôòG—št8RR* ë½QnëPSZ!y]„šªA94‹†<‰|Ç}–c¦Õu‡r©ÜÇE=,·-®û3Ü-ÎÁ\%Ñ$ ¼u™í>ʔáò‰£,¸¥%•ÜŽ£Ì»(ZníæªÝŠ¸ö^e A§DŠìKùø.;`Ž3“%g]җv{:G#ÄÖS\—óåºdwÓ?ŠgBø‹ÒuÜ7ìçÛ)-`À2®4ëÑb}‡v†M²½èÉ°$Qpj7%~!!ÏT4P©Æ}f҆&šx{ñDs;ӑlÜÒµDoë¯wHÞ
+136 0 obj<</Length 3068/Filter/FlateDecode>>stream
+wpœÃS6wÎÁaíw^þ•ô]q¡Y"<–)|o
+…JA’#1 9øMBwˆҟ(È£„`
+ϯØu]mX»òìç_O—lË[V•ž²³ø ™‚¹ˆ©€¸-6ž³Åªhü½‚ÇÁ\]ÝÞ¬ÈìÅ4 Ðk³Ê¯ª;öá%‰)¤ÀÀô ÀÅ´ñžá¯ŠkåPd!zŠ‚™¾+nnk
+ûå=BDcs‹Ú–>È ŠÌ ÍÑäÙ/ïÙ¶ª)+f(g]ö=Å|¢íŠRW±¼¼:P–³††.—ÕfOòÐ^zÜ^HÆÂRI–%)³0b)´_Eh¦g­ß6 zŸýÀÀ<ë;™½Âî¢Å @Âó˜‰ÔQ*¦E H;lÃ+¡ùwö¢‡-o‰ÁÐò¢Ë)¡‚,tXrVú»¡_ìÌ5w_å²ÑlËÙ§sz1›Í¯dÒ³_OĹþÈþ
+²,¶ µ55í`ÔÆ1‘©ìÆS¸^Ï`½1<nøŸŽƒ7ó@2Øâã¿‰ìƒH+ÊÝ$<Ԙbƒ #|(Ö]÷×n ÖP˜.åºóÍûa†C„Ÿóõm U¤‚ƒ¡(!;ÀÛçÿz/¾QDòÑ2¹4Çx?ø­2ihF5™0ì¶l‹5Ë×k6€Îóükx,T –מ­«ü
+À÷£<Õ1ZtT/ðº…p“,¹.ô’Á‹U—ä“.Ç@â üÁDßяu<¡‘¤´A󺆛XOŠ#ZíÍz¹-„­oÜ(Qɀ/o›{b¿|»­«/@­µ•jºu;²ºœ’¤¥•­êž³³ÅËŹý…77ÄøÙ×Å5êIÞvvÇGÚ¼‹,žQ}°úví[´Á•2á
+é€áTd Kv²Ïp!øò1‚ëyzoÖ2>©® ¢ã’ù/EC r´òÿÀÆÌKôt:KIGÇNF:&Ü)l/‡…·꫁^pŽC—I:ªÀÎ*ñ`Ü1Ø}˜ã‚>“éMü~¿×ñÓc)ÓHÂèüiŠcþÅÁtªÎ™Nܓç`ݎ©Íãå4ºß~͘ÁSÅ-08” çt/Ê@«¸0ÇXŸVÏ)QøñhQ›Qgrý¬¨À‰¾)j5žÆ$ICØî Bù5Â]/°v]m ¤P—ùò_‡;ºÏÆ÷׶ß&œ‹A¦GÔÙô7‡y*½Gi´š7_çUþòîaúv]V®kBPË4›õ”›X·Ú§èrïìh5dïIOSÌv׏ÃäÀ¶x“sá&aSž¦‡–ÇÄÑ,M(u{¿-–ÒA¥w$y¾ï%Êí[(^ڞ,Üý¢2(|†ÇQ&]$Rñ‹%uö@Ÿ,åÇ®FYžbl¦yªqŽ]‘±v®…àVíÝévÖ±Ã÷?óðþ§¥£  “<‰( û¼ñ„µ ,Æ3ð?²P}ÓM¸n©ÖÒt4×íÔNÚ©¬ß¦öñÍ`4ÉÇèG%]êuÖ >l§Y¤Ûo§Ä3®ÀâIbÿåØ»ÂfúÀìEï/…_•ô€¾“YªÄ7]ÓÝ¿Ž
+š°=´
+²wéš =‘/K>5ØWaöÿQ¸
+139 0 obj<</Length 2787/Filter/FlateDecode>>stream
+H‰ìWínÛÈ}½Ãü”ŠˆæpÈ2Àþ°x×m¼Ù®…f8(h‰¶Ù¥HW¤âäAû>=óÉ!E9n±ùQ  `›ÒðÎý8÷žs)¹ŸüxMÉ}; ‰Èhe)ÙzW³»Ù?g””dÆNDó0R²BàÃ]1xù©Õs„ŒpáXÉCò ÜÉÛÎV³“‹ˆP²º›e°â¿üð &<Nƒ(¤)Ymg'ç-'떄e"Jäïˆ&BýN⌴kÜ„a‚Óë™<ÅÈêi6ÿ°+»²¾'ÝCAÎò]¾îŠ9ÝlvEے³¯]AºF}û¦l«üëbõ¸½¤Ò.Y½™-¥UD ­*‹WŶÙ}}-ϝ\ÄÚuõ‚:ŽÓTpãC„¨ñÊÇ9]Pdó›ÅbÉyp宼:ýé#ýD~@ÔðâI}˜ú¹ø´úó pžxF{ÏnM ýZög­S)Ó! ¡œk§¢EŠZ*§’,†{žS¡tê‹tª-ªbÝ© ]]Ÿ‘¼ÞL{#±M>•G°õî£x­­}ùid¯jžc³ÛàçmÙµ¤¹“Þ¯þ4-³P×R¾“›Ê==»BYY»lmò.'e+o¹-T6—ÆŒDŸv.̸6WÔY=àktSÀ̶¬‹Öø·Î»²©á—|žðMÙéÀQùÞF#‰ÜÌÛ¢ åý®Òðfq¬84rˆá1lA#‡˜Ä!fƲð¸íüTåúf¡3p´N‘°© T§Bæ
+Ri*ªáӒ}[Üí+o8Ŗ»©©îm±ÎqŠ´ûõ£©ü\ø>®›í¶©Qn{§¥3SCwFž <t²N)¼O%ä'k‘ê8GÝ 'ñ$oim÷m×ûgP獫"—=Qn'U«61ƜÙ­¡§×*¿­
+’˜á4 hÆ$ÜR4B¢ÇnÜSôÕGG]ãÁðC{ãR&l’F„—$†¢•;"ô©¶–|jøY{ôdU‘³|ýûý®Ù?ÃÒÕlzÞÔÝ®©¬wgç7‹Wä¬*ëßñxöî/òQŽöËús±ëðÙåσ"t ò{ß3Ô¢˜¼{È;òT¢³Pèüñ±*1#å(:Ök^/$Ö"ÆÉ1²Â ­
+ºH—XzeµRß¹¶—dNWöšÀË|¨ï­%¶§4ˆÖxOºTÞlqæ˜1×\õ½šB\¡©*îº%2¼+ï:…¢®y\NK‰L§§o›Yuºï«’¦>PCàéI)Špi;Iÿ'‘ÆM¯æV&¦jex¯éé—X{=›NŠFç†<̬jrE“C%ÆÚû4AÇ¡¼N3N˜C†Ž©Bè{sÉòªM>pÑ_Híú7ÕüG9Ðýà ì5Žºn¥‘ÍG›å5Z,1e¹JHR·½ö¼ùÛ4oG†Ç²B#'‘U,05¶åS¦íšiêävc¡ˆm—ïTñýnˇó NØ}&,°_H€wå®íú†@ûîØUÖ"Úsà¸<¦òP2
+žiêÁóJƒú
+I†ÓäÅ;’g,²z1âZ/ŽØã¹mÉ2Æ X¯W^D$ÑA$“lÄ=­¤aǘää‚öÍVþX2l#I‚m„Bð„ð„Y&5֒«ÓßDœpµÉÊÓ!1ǵ„<…(àY¤ilWˆÈF~­ˆb ÅT×E´×Íúa·ÀޑΛmAÞ×Ëëµzs°Œr“‚ÃԒ*±iW µ¶]bZßïdב·oùõýÕ õµÚÈß@u Ãv“"Š½å†iÏþþ]þAÆa+ èœe*–·«%÷3¤ ž0 @N Ⱦ½Œ•wWÌîfEEîg'?^3rß⅒Ì2’r%ˆ“Œlg)MSÔ&Hñ\Éç$‹ Ç]L=Ӏ‡‘:[Þ¯pI*äzB¸ì&-šggMŸÅ48XÙYړ7dûTl-lgÀD{3èpÂ/å³ü>“!H¶®F¯+ƒi…¼7HÃ(`ÌËÄ,€
+142 0 obj<</Length 3901/Filter/FlateDecode>>stream
+H‰´WÛrÛFýþÃ<’[âsÅÀUy°,+ÑƲ²¡Öñ–äڂÈ!‰50(Y¿Ý3ƒ )ÒqöbWähÐ×Ó§»Y^ý8cdU"'Œ&‰!›Á÷|´ý>b$##A5‰¤1ëHRC¦qÃae÷^þî7§‘ šq¸–p¼„mµßŽ^]2ÂÈí.³„Â5÷)¨0JQ΅$JBù݌^½­5™×$¢LÄ\á“3»§’ ©çÅhÑ(Š@ìÄÞ>Æ×o>ÅRéÉí¿@¡ô
+¹ ÿ÷%—P¸c ¡€°»1C`i“P5 ~ažôs;÷¼o¦ÀÀƒXº;€E{8é*‘q¡=†¹S*:%o~ºc¨%B-f u XÎWR°Òz‹=
+«DÒdHd®}=Rùiq
+`M܎>‚É0EµåÒ¾þt ï°À ZŽy‘ñãʋJjöš°ŸwkÔ*ˆöӏâ"ôm䂔…õMÐÖÁ €éP¶^ôt]Ýä¼ùûq=?OU)ºdÚ>"¢¸%_Ù=3Áù H™:¬Òïo%ÒtCW¤ú¦‚‹É‰âçã–ú°±7 ÜKjف|›üœ»ÌªŽæ0¬CHìâræt‡qý…“Þ0SᦅøëÃM“^Â;ˆÔv^‚£N(|kÒ¬x!ú°q‚,ÙÊâ’÷ÛYǾóJpRô
+®c¸¡iøî þ”Xû¾b
+ö®ih ®ê+ûûÎÖ~癉{Á&n{M˜BÊù|WÕ°õnvy“¶ÜÕ°+>e͵Í~¹:PtdÚøÜv-èÌ°³uhn¶*pÿ9kfPV¦m†Ø‘\¶Ü\R :þìï*¿ÂÂñ2³9ÈÊ6öŒlÒãfÆqâ÷¦íÖ¦rå¦Ä'­2ðù¬üBvÛ?*Š$¡Fá>ÑׄGÂ치¯«²€z8j´ƒ Œofäï[ 1[B^Äx_²—Àb+€so1\’q¿d¤Á*€ŠH5aÍZDTPLXnDFu˒#$Ö-±ƒ|¤ƒfºA&D³‹ñ0·ªËm˜9ۘ“ìÏÛ üŸ¡Ù¡¤£ £öÁLa¬óŽ€½"0¨Ù&]AçH‹c˜ƒî Û}[ÙGc±×8và-Ãٝu,Jú‘æÑVM6‡ =äiñe¸°=¦9öP¨.0št¾Î@!j¸)zæÚÕø²CâÁÀ©‰a3hY(≣«³|x{@Wqqê.vÁSÞдîòYí`Ë n®K €mUΡQ—-:¦°u%^̪m#îÙ%+ dic¿;JÞäEMöhóç³}~áÜÛ·—8ŒVݗ
+ D¦9ÆÎB{ñ§½¥’Ž“`Û©T"Åí ¯ìôT3±…W›.Á…§´ZÔaZüx݉×üs{*H
+¨*À_JS¦‰†ÝÙn<Ük¹ÏÀÒÜNa´(
+›²‹L›°˜š1 œÜÓÙÜýŽÇÖú]rk̏㰶ÿ»ªº‚ ¯ LÀæwï~ùõæz¯¬ê¸Ÿ`–FjQ†Æ|¸Š o˜Œ`Áã7Ðþ_þ9WÞݎYdœPF§
++„K
+²±½úq&Ȫ†ûábDBTLfÈf¤`ÜÑ1#ZS¹?€ýIsªwª!)ðŠI¤;ؓ‘ƒ&\h"°*è|›þ  ßđƒ^,ƒF X/ö@¨×c«q+ôpXö’¡X. ђ
+o>ÜP0;¡?wb÷d8±Ð¨…Ø^Fn¨ÈIa°HÀñ{hmÑû–(XH4ÂÎD4KÇÿ¦½jzÛ¸è/ÈàQ>¬¼ä.Éå!YR•”X
+TÈR—kª àÆi¶PlñgÜ÷Ê3j¹±"&.€í™Ðµ?&m’g?€ÐʖǶ!GåB<Õ;¢ÁŒÎ6ƒØ¿ãí2Â"×èžPd¸“¢²Öbÿ×Â:9uŽRûA<øßðÌKÌøNFô‡
+¡H!4Z.h/Ú6J"e×ÜAYÛpäÍ®—D©¼"â#¢ÜT[zD¯®çG#öGáÇ]<„Ô=HtšôIüqÿpúbìèÁz*¢,Wq,›í鍅¾cÚño5?›ÔÒø0j!¢9
+¸
+Mƒª] ÒÎ1˜Âcf mÖÔh®Ô(ŒL¤À Lº±£0‡—ÒÈÖâ*6­Âxl­…WÀޅ{ޞ¿çxx¦Ú8úyµšµs&´s›‡ûêñÊãýã?_U¶Ux´'ê
+†±rCf2êR¹3'æŽó’qŒ—‹8FKÂqZî|¹3ܙrïWbÖqòي+ÿoÅUÆ…âƌ'͍&ÍM@®¹ÃëÀ/RÝìSÝ\†åùÝÅ(Ù:=VˆÑ¢(DŽºTˆ — q— ‘ãR!ŽáR!2\s;_ˆ wNw1)Q[(1á`Ò
+ºÛ²‹Ý%å¬îʁîB¡Ÿ©»&ê®y±î"ÈN5}N1¥´]‘ÓhQ䔣Ç—sÊp9§#¸œSŽK9Ã¥œ2\Îi‰+âË9e¸—´Ã˜NUgGˆ‹œ7Ž¹@C%ÖFP‰4ŽŠœ¡"e •+Qg c¨w` n ³®¦nA_eé"¤Þ8üsðÜÑo)—£Â÷DêõühÄ|+|³î𩤶þS·Nlçk€ÅMûk¸bÿ
+145 0 obj<</Length 11277/Filter/FlateDecode>>stream
+ÉÃCJЛ"~°ÄOsŸápÆÌwÓÕ«3ß=Nzɨ”â|è¾ï§wÓßϓS~‘Tì5©8oB?ÝÌÿ˜òÙ*ífo,Ȓ"ùÚ¬h{¶®^šÙÌÛw ޘ¤ìœÿmœr‘yæ`TžgÏ‚Cš·‡éêúÑÏ»ÇY+ã‚eù´†CþdJóãîaÚh¥µ†ào¿Lo~ø)ûËí‡)kÐsUQ”²W>ú4û—"‰a‹ˆŸ/nÞ?Üío7×÷on÷ó›w÷Ÿ.MPñâãávþñas³Ëçpq{ûpùËö5B<Dm âùtñüýã¿öoÿ=yÿù~þóÃçÛ»Oo?ßþ6¿xñ׿ÿøFìºziK(¢"اgù4±vŽfŽ*X²‹ea͖ýó›ü]nŒ1V™ 2ٗ[¤ÿnB˜`‰SšPN1ÅÙ¢"¢“̾›þ†`çZr’Ý\/¨=©ˆê""Ð¥Ã*⼗3'š=t¹|6Êk›éã<òK!Æï-Šév"±ž›D$4žž›D¯G‰6‰£<р"ֈx•p˜PDÄäQ:~ö(Él³üžÄM"`dÏ£JÚ¯¶Ê¹.
+ 9Š]Fˆ¹³±
+cZÅPIÂA¶Fû*–l z.SƒFcjÎ+S“$^¹J©“Ò€Õ„%ؘjb ªÍ–XRF7š#÷ÿc:ºéÞûÑÊ4n””!>-㓩-}âx^£É}@ßFóþ2Óüfþù=ÿ6ÁÝÜ;×D2ÆAáa¢TB›^T¦†ÃR>(g Ô7Dh Ù#ž”C …6vÈ~ºI¯E¥Ü˜™- iC‚äØfÒÜ
+»\s "8SeBhˆœc„iýZŒîÎɅy7­>uáÈ¢U,²õ¼ƒá©¸[Âݖ|.Öó¢£GĊ&¡Y9ú±›~]}«RÓ³Îßñ]Ê®‘aÍÊÊK¢²&¬çÎßAѱPT QÒa;Ëy—Îq¥Ä¹¸JXÏ«¿©V4 ÍÊяÝtöc:åî'r¸®ÒÄ$7šðî‚ì3âj¬V^JöëB2B‘ðn{b.×c4Ù¶©“2BÁ*õRŽ¡Aæ-õR¨ªèb/åFÛò½×ÂLï5š„ÏY[hnòmGñRÉUÀ£kL&]tpŒK"ŽPÊTç M„—K” NÎF®$Œ ÖÌ‘ªT‹4¢Ð´Þ¥«7ï¼\è1èTç2©'rDrqO}„7¸9`0Þd¡–ä6ZŒB$-ul³šcÙò­où™‘ByNs ò؞¾…0©$DO©Ç遡"ç:ëÈP‘N…80™êчŠœSaKx'È9äLÚÅáYm
+¶ç \zù<œ 
+®ç¨È±g1âVIº$±=FŽ’±ü,Ê)t rŽë*r\Qíw”(î9*rN¡1Œ 9«%jF/*²ª@_í9P£.¤ž£"g9P¤ŽbÏQ‘Î*ÓsH‘2›ŽcAÎ8.E†Ø.È9©ëÝ®@gÑ@Ž
+•Žz8Aκ€
+Nq…úœ90 ™î7¤yp$¦ìۉ¯ÖG<Ú½ßÃÙþ‰s/q.Â&A:ù˜åEo;!MÕuŠœzý½™U¢‰Â`ֈ J"ª÷¤¾¾ŠC6Z}Ädmð¶¢óI^QBwðóuô$óõś~
+Lz5¹èPLRŠxÆrD„ðÉ)—\%´¨ùï\ÎÙBée+r̲݊Ù›;´Èo
+)4Œ`PBoÅ`Òë*ÈuI’Æ-À¨S¾vÎÁµ)ä %†eØp8 ”.ˆÇUÊO:Áv¡Cê¥e4v¯qÿp©}Þ¾(EÄ?6d?IP}ñ…­Ë$å².ˆŠ"­}Ê4ˆv‡4sY£Ë`&҆زãî
+Žr„
+€-ÌƎ*‘ì4弃Õ)»Z‰Eê¬çEÊš€ÅÀхž‚+BhÕ+VB ®¢:ÒIiÔ¼µŠLìΫ³ ‚zbÑ]%àaҒ­EG=‹ñA^)$úD“°žWw¤XÑ$4+G?vÓ=
+êEužåÔøÚ*}‹ÆXø9ò…&›M­=3ª_Â=¡¨ÃŒ€É†Œ2 
+LögŒK@Ѓ„uB_EßÌPNUE’0¡R*d%!ºaˆýQE°¯-~‹(S«Ù—¦Œ4¢»8Î[µ h—"¹R|-{Di1ì²I«éˆÒƒ4­Áj=Ñz—Éîô4déaԛ íȺ99‡¢nN¤´W¦4†¨
+£6[ÀÍâA=Í(‰å˜ÜG¢±6¸À’µ ¨A¬ã5+šÉ3ˆèqO4¶.6ƒã8 (Ï]
+y\ˆ}‚¡æ²G
+W! ‰ðƒ´ÏÆbQ©“ñ’ÄNÈâ¾RÌВ]¬Z&£JHâYéŒ {¡¹ÄNsC,[Â-"V™®ÜäÙ&€^ˆÿÉÌæ­ñrÒ„jäuµÞ6ÂF¶~Qcîw2%N¤‰°>ò–AH%eœ”³†´dÛòÙ Q£LM­Œ³{-™Pá-Ÿ»'
+ùßDôHÅÙiD^¦kRôyF‡‰´]ΐX< 24—/Z„±d|?ÜçúB5Î]+vnšÓH‡1IÎ"ri2Á¶æ¤´Z<RA!È,S¶âÍ0MFŽ
+^žþ
+< ׶éa})â:%3%3v‘¹W†9­7H“(=S†÷©d'Kf žÕu¤£n!ýÎ §Ê‘ îf„94ùHîÓlƤW9Í¡MºR%‹‘5ÞN„2ˆ5Òf^LG¼…|×,à
+Az¨¥í74e™o¹Çr˜DÁýÒÏÒåà®ZúóbçD'’À_‹P‹,6•Nhù%—…Ðk//7­æüñ¿ô´:#æÒ˗æۇ¯ßôíׇ_n ?n—‡›Ÿ÷¯ÞqÓx¸;þñòdÝZ6¸Ð3/¯DÚ5á_Çc:|AÔmƒ¼<áP‰!v¢\hr.ÿt´õðîxJ‡ˆø‰yœ¶rÆDë‡ÞeÅÇ#zíáÓov¸È–‡á6¾ƒuáÛ¦€Pƒg=!SDB”Æê=–Ãç—÷ÛÇã©àr¸Øf–plEa{dÙϽ‡ûÞ/%œ,zï)œ‘Wqݸßà·oqYºñ•(~ñ>Ü.¦ŠoÙNè’:ǾÄm‡ß½¾}éê=yô‰3MuWêïîÿpwK9`°…½Æe-ދBŸ‡Ð‹7¹ŽÉËà5m]g[õ¶¶£Aš½m”…Q¹Ù폼™?|x×_ÞŠWö.ûùðû7ǓM‡—ͽø€¤½Ìœ©ÙiÍîðáã§Ë¯ä„­_;ÅòÛûÝ-ñ!—æ•Ÿ¾ #¼=Í0ßtiS%X BKPP”ÙVN7Þu„¨¨ùt<¹¤"Ú½ÁÒ2âZìüñãýrpj—±×Ïpw¾=‹JpÎcñâ·« ‰yZ8…"mɵðeî±ÝKvç&òMÝØ,ƒýwYòžYrw4;<Ãà1ðùÓ²?®,ÁUí¸kq–‡T3ÓÜÅ SÆ _‹;®Œ~×E¼Co…•HL›Q†Ÿ÷Y¢e¨h¥Fži~A¹³¸«ÄDsùr4BÎÃv¤¾ÍíüõMÒIžÊ¸«o‘"H sQe߈³ö$Ø£¦³ê4Ù_HŒ±·¿ªZM>VÎ,Éø­úw" .xD0«D"4žö/´°©Å€¥[,úOúçU¡Õõ/oøO`JÚX}³ÜöpÛܐÍ҄ð/æ 0‡xo<Cf:0ŸåyvíjŒ‘ƒ¡Å»Q4ǽ… n¥ Åo¯/¸Í[Œ{xm»%Çl"Oö…ÃcHï‘óBקgTn½hP‘gÿõék&ýF 9šF
+¡è׈Ò9zîì鈺{Ì SYߝˆpщà7gуê†ÞB¦Ò¯Þø+§$DÓ$Xoa™œR ¾B c« ŸðV®2øî­¶¹ø
+8¿T%AÞY—‚±\' ¤›0ö ÷w{Evg„mÀ’%Ÿ£EHԉp]Ð!”3iôZ£Æž:ntM@GÎ#ú; 
+¦(N²TcU$ÄY̬!LÂuRÒÏèëEB¦DçSÃ\Ï3&Ò­¦•û{hbk<'ÅAÚzð ‹þÈDçô!%Å@,b?E·­ý˜ãü¢c=Ȇ±ö÷å: ¾»™§×ìÃb´ =)wÈà6[„ˆSk0ôéÅ>,FÈü¶4€ ™g´õbKBØÅRЗë„ Æöaâþr±è Ëm1²íËý9ýÄ£ÉFx*F'$u­=Ìç©@7®
+Е1,­#ښ;¬X¼$ÚXµ4Œõ<bÆ¡`ظ¿…ܬ ž­Ä[“/ОÆÚc0A4r֛KœXÄÆ„1_%;–%5ô òrYBÊGD8ÆewI´„,ª‘X“B݋WXðeüçØ1¾uªMæ‹sm‡íðˆ%ƒäa˜xÂíLz¤K­Té^1ã¼nÈPaHè
+Þï4˜CÕâ‚*é•æDHƒj(U5jÕäœh
+Žƒ ê¢.iÁÊP¸ålj!P˜4žùËBÑwâY؉+xÉáÑ%(5êˆPB#f
+ÁËF½çgaÜßÿ¶¾£7ç˜wŽŽ,9P÷hìç;ÄHÑdê;§an‘g79:ò䆀Nòä†PYÕËÎБg ¹êHôùY*!1wMšÇ·ÈvÅɁFPªß9:ò”sOô‡Ù´
+_ï9ü%}žªß[CkÆ …—bˁ`î½ 9Œ÷·§{žyw?h­&½¡‹r¬?TwSõîñtôÓµ>ÎÍà'¬N‚Ý/AG0¼=ÓÖÍÀá(ב·„†
+¿¼ôíZ´VÞ1ýUã„
+Ø RƒEˆš00øÃw)1å>mÙL”
+c0Gi*N ÝcMµŸ §GQu‹¾pB|
+߁T*驐ýä ¹çBc´€øf"f°Dôî¦!Š¯N&D¢‰jâ¢Ò V"éBä S2¢Aš”Ƭ¤Ëƒs×À+eGJÓÒw=¢$”®…¼÷mÅhùÑZU1'²Ë±J|½C69PÂëÐr‹lr2s1ìr:²Ëq—àÊ!ǐÍtÔx-ö`Ue"­¸îϏ¢x}þä5NÂçÏuù|Œ!A‚nt¨ ¥^já@® AÁkZ%#úA`Ø-¤¢$qÞ@G,ÚÒ"ò×±¥yŽP+½ý҂"”£5î\FèªÎ¾êڝÉÅ>ՑëD<r*ë¢BɨäPY$ðŽ
+êû¢¤d̤)-o4ž,y<Ǐ{ÄäÜ &À)ž³‰„á h<q'AÒYUOàU â­`CúËøP=u‡£ÿv¹N$ø‚À$W@×LwÓóòŒr|&¿7„q=Ö Ñ˜"“ôù*UeB× ø5ëD"ŠZž\1p®i:yƒ+b`ètä:–HïÈåÑu+磂Cç#ÌzØ1Ø@1HhàNŽ/:vxèXÓîÊQÓÉݐˆJÂjásѻЬ%LĬp ö‡–˜s‹€„0Hæà‚‰Ôgd¡FÜ@RHh[
+ó%jᄉÜëï7¡\W yèHbÏƒàš¶ƒeØC ÐbÂèñÀGȯCÀ«AO(ñoÖ«l7®ãˆyŸèÇ!„¡z_)µD)kFŒƒ 
+ˆ£û< ZµÖ±£k…ïÓÝíáì Y³£òL„¤|'v؞WONvÄÛË= ~ø]οãÔý¯áiô^æ(¼¾8\»ø@aßy‚ñþñÛ§‡?_žs°¨Ù"^†–BG¥C×zèáãҕí M\ Ò V¤î¯÷û.4 × ½džrrèÉå¾[h‘ql¡µaœB¦sÎ_PÂöù³KŽ¾Uè¡ãÍÇùðß>~¤âèÍà
+ÐèÛÅÁ|̟D KÀ0ÂؕVˆ:8}Ž€~2
+#Џ ë€Z1"Â¯Ð?»/6ڂ$'%¡üMÏË~½—©ÑڋYßx‰ÜÒfc’žrÒð/}³™œÊps
+@Þx¢UƒÐt݅`ñ80ÂB‚ÒS‡rÔ
+•Ð\9q³ùÛ&¢&Ê,Ìû`i; @>ٕÁ ؤ @"XЉf,¤L*“ ݐ€D«¡é0$^}ž@ÜsZHPzêPŽZ¡ÔʵìИÍ^x¼[à,ëà
+ÁRj@ÈøISgbK‘™Š á¡Chº’*eq[gK JOÊQ+T‚Z¹öC|óŠ´ZP3f×°ø¢ ²³ØÂKMÍnA‡Ó3kUNâår
+@îò„;3úç<&RÒB‚ÒS‡rÔ
+•Ð\9¡ùØj`Vå݄²Ëˆ*‡èË,aAÂ|—z:
+¿f^O¼òNBK2֖'ð®ŒûJMùÊéèuµoíÁ²Ê|k¼1Ì*SΨ!‹<·‹*³CUe«TYT™,H‹*ëô¢ÊƉ^CC‚ÒS‡rÔ
+‘0­\û!¾M ›ú„®äõŐ“rBB~d¢ÑÇÜ$³å´'µÊ¡ý֌ûÙ¨0CC§o8žÖÅÅ \Äz0(95tŽšÐï ×>_ŸoiÚRkЄRÆ6÷•[Úo¨™†ò'ˆ¥Øê÷i0ó´ñŠëøÄ?ÁÁ ¡øuѕê48$4*RK˜œˆ„¨fJÀ ²D«¡é¶#4‡y͂ô ôÔ¡µB%¨•k?èñ˜‡ ÷å4¹ª®aF*‡èˆÆ’Ö–4¦4ÞZ\cN šhfH¨‰dTƒPÝ/Jý Ç.nwz!_9jA0,\¹@^9$`¬•ç8Šn¹Œ(¡Á*Çe4 ü¸ðÈ÷I7À!Œb± Ё.ÝÊc®¦p‹À< ž*”¡6tÃƵìê N¤IØ1T(&æà8ªÐ&tCž4ÍÜI!¦•¾êíÈ©3Ä IPA¨íq 6½CÀ Yü T¹ÞVãVÖ³C“=,¶Èx!=+à¬r€à°hâVKx÷™aQb­Ê©§çq¿žÒ.05 ¡a¢ûy"TLt7 rh1aÜW ×>payLr<f*˜‘&™Çr‚V¨ í¡ áS¥,XÒ´MPÞ¦P£r¿©fUÐiºàN *`žúhœ””¡&tÃĵâ0b€é‡,wì¦*C9ÞcH!]05RzAÃF1T9¨hš’CÒÇ93u}ÃÑ´dÉ8>ŽÒ™”ž:”£V¨µríǗ'™§½À"4 KY¡X|å$£eÓ"—Ž7›í¾¯‹˜…-úR/\–?¯÷Ózÿ~ZÿßýTW2T]¡P,R–šFLô°mp"A¤* ?i$#ïÉÀèHt  @jEôþ¡¢ÓtÞæž||­¡`* ƒVÊ6tÃƵÒ<"e²‹˜@ÒæQ‰Ùõ&aîP¸»c'œ,ˆûN„ š¿À™·ðüµä¥&‚¹È¡ ™I(vqG9S.IÉõKœÅ-dœKM4¸uM‰æ`YÞQΔËûlþgqK2¡‰ÚsmS¾ø—w”3咔¾Ä·=C›Ü"•#&4”I^"4 GcrHˆ¼GLBkæy‚S¬L ƒ:G­P jåڏÞ5>!¹i,ºƅEãÌÀ:>b&}-~ÀEov!¡½)ø½¤5Ç ¢gë–Y¿xyIO౶åÛ.2Bò
+Ý>-m9pÿ˜
+ CFt±qp(aR•5!ÑÜ´˜(3š9k1C0š¶::-C:á Æ Ìàœü” ôÔ18Ý
+ XÀúe‹Ìà߇è†ñMt#Ssô.“°â³™°JQ0†
+146 0 obj<</Subtype/Type1C/Length 503>>stream
+NDOGLA+Symbol!øøø ûHû¹úÖú†÷9÷@÷E˜ø}\bOmegaCopyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.Symbol‡˜ WmŸ,÷Ž÷Žù”‹ðø¿«Á÷ ø<÷ ÷Í÷,k™\•dåj׀÷Aää´´À–¾¾À€b´ä2€ûAj?d1\k}{û,÷»÷6|Zaû2§Ø¢¼¥´ÇÑò÷ aÖcÔ\¡p›¦]IœDDIzp]p{\ucBa@û Ñ$´O¼qØtoû2a—¼|û6÷»øÔz¼ZÏøUwÈá÷cá¸Èøˆü€P{ySI€©k¦¦©«Í€ÃzˆÆ¢™¬eº¯®—œ¢º­™¡”˜’kŠr®q™€´{»¥¿§“µ“­w„zŽmp{w€zŽ{›|šƒ¨¥ø5xü}kgrt€pr‹m˜c´º÷ázœù5—ûZ˜ç
+148 0 obj<</Length 230/Filter/FlateDecode>>stream
+H‰TMkÃ0 †ïþ:¶ôà$£ƒA0lƒڍ¥Ûݱ•ÌÐØFqù÷³Ýбƒ…õñH¯Ä›öµµ&ÿ §: 0« g·Bèq4Ê
+152 0 obj<</Length 3684/Filter/FlateDecode>>stream
+H‰´WírÛÆ}¾Ãþ¤s]ìâc¦Ó›–S§v¬D¬Û™(ӁÁ‰h´¬¼W߯çî.È¥$8ÓñS¼Äý>÷Ü Á6³çß_ ¶égKsÁó<c»àïzv;û<¬b³˜',ÍO!N"Å3¶HÓÂΜ)ÿ‹5ö»äQÌ!ñX.é!úÞ$y{¹š=-˜`«[<,rŽÇìÿ13­™Š¸”±bZÃa&c¶Ú͞/û„•=‹¸ˆS©éS
+[ö¦̦+³f——W?¿GA=-]2®\Äèa%©L™Îx*•‹PP˜’ !eÂõü?Ê?›Êå
+ßÌTšsÁ´äíMá“IÅUl[z;û u¶ Š©­(šÀçL§<„-€T°$á± LYJY"¹¶ ÓQÆ4*Y®¬àÌÁP Å#<“D\gҚõ‚“Yü?!8™‚§ZœÌ>0êüd<ÊÒÑ
+üHÁUš•1
+³Dñ؅'´Šm>‘´fÏlX³Ró\ç¡ÙêaUð„Ž¬‘$$ˆ&FëmœòA$:‹)|‘:AÄsDdœÂü™ÊYšÊ㰐»“M¤¤2 1,¤$i`öÑ¬Â,f1n©}Fz%/W(›qY?§šŒ‚c$PÑ®&'Çäå‘ ¬}$¸8UEÂdbÍBXÇîÓ©_óà©mãwD$]—²#¦"'@mrÎLÔÞ(æÊVÂaY¡ ^Ç Pm+¡#ëf4rü~ŒZ¦çn•ëѹÀ{µhTFŸyûç?ôEdÉXe1}YŽ¾B'´RÿéˀôõPík0ôõ«Þ’/QíB¡¢@Û)ƒ¤‰ ƒu1_¶»]Û°eݖŸØ‹ý¾®Êb¨ÚƱ´raçHXš>ÁÒ
+å×`.뉢)Z¤E±¬¶†ù%Äö]û¥Z›žlµzËJëª= ûÃÀnæË·ÿxÿÏÕÍ9Œl”È÷<Hü¥Èì–žøˆÛ[¶îª/XU¬m ƒ‘7?²}ÕÐEÓ[Ӎþ9Y^ý…¬4ÛÅIH°qÞµ¬íØ®í‚x‹nèYY4죱^LÃ=¹*š“-§Þ–a뗹ù:˜®)jŸ¢Uí8[m+äÞuE³1;Ó ÈúP¢ˆÒ®g0‹}£ ۙ‚ëïûÁìXÙöûx϶…Ï·¾·I—~‡7´_O‘ÅjŒ,R"<à°X .;÷>Ò¾ÚPØCËvCÞÚÔaákt3]m(Ô7ÜAæH§«&Æ
+ÕJÒ
+™G¹o¹mÛÞÀ”Lßýýw
+›"Úw41œŒEjdD•9vØV›íâ–únšòþPÓV½q“¹ÃÍ\¶¢ð¶Ñ€Îñ”§>a
+rœ¡µùR•æ§¯:xÃÀ±'Ú'¦âmqJ²e۔˜ôþÛ£ƒË¤×¤¼s™×ä£n1jWÀÖ3ôõ“á,)‚Òl<6t–À ÄQî(¬°më†?ö-ÆûŽ³«O3{±\XPN„ ƒòvà(Õ6ÕÊ#æX[1Á‚ŽEþ+öwù·0_lá4JÜsgÐ;ZîªÆž
+D®UoYí¬Ñ®á!¢"Üa§O»
+/ã®ÊSw28ºçy«}[Wëq.ȂÕ'ÆŽRŸºhˆ
+–ŸÍ-hgh§s˜Ûåö©ìTàˆ1_‹ÝޝLW˗¬¶0çÇskì–²cs„‚@¶H …hö¶ÉÏlõ.¯J)Û¦Á궭yx½âeÀ÷"w84vU]t4ÊÕリ½DÚÝg í°EKô÷TGbíz‹lüqEfžŒk |l¶tÝ«ÓB9ƒkbr^¶{ 0Ý\=h½£µQ[ nÛÚñ=|à†žŒOHgΖ°¸+îÇex$(¢>Šæ¡Cäs:Þ#8ý]ý:Sy¢ÂĶhÆæÐœ½XEJºx*Bttµ£­¼vËÇ[xÐW?aÏØGPcEvÃç&Ãâޟ3œ½rƒpè]@îÌ´7«ßÎüùIciä ¿\ÍÛЫ” W©X¤ 0 ö\&xqÃKh–ã3û®ûúöl~µ@_¿ai%ìŽ)öŽýòkÄÖ`¶ŒUlç1׸µÕLñ.÷P‚M¡1²þ–`äiªxÉ´
+j£G¡[úÆْね?¼ÿ0$ gÉ*†mImgӗ¢2ôï¿O„m°†mJÒxç@¦*Ð~h‚Ú4¸€Í&Å¡É/g'ù¬z¥tòÆÐÜS›Ú–ÝM'YÙ¯Cü&g‡'îèL%w}§ãÑ¥§¡“(Ëʁfxéãɍ£h!Ê¢7¨’àoZgàkÌ«7ïN?W¼Xà+ØíJsЩ qi@dižO’EVvœN'®Õè™Ò/ˆä?0gl’OÈ¡30bha¤(ùóR<@`0áÑ
+xi…Žš‚-œÐ%00*ôQ2¢CI+‰ŸÒdZS,Í%¿.ŸRž€o¬¬|j‚Ø= Qy¤'9–çëe{½LÔz¶³NÕ9‘$Ô9(’1šeÊðK¡gßßzÿ”ĸX£‚K¾±(Á-u.{PáVÑüoöR|xG÷ªí™NÛú|*ôà¸÷Л( 8ŸÕ
+ºTçN+ßِŽ´R®Y2¹˜A&Aãɔ‘×ìáAÓÊÚÅI×bÖ¥…¯.DƒX㴌.X§ü¢5KÁo E€©NÙPå¸ě­*Âóõ²=씫÷T;Ì¾Ú ƒþ¥\}gGÉr‹2¥ë¥Ð“ïÕÙø
+³$pGÁÃJAϹ¹ÄTJTX9ÎÑ´fÈùN‰9 2,%èt|Ë*_[fe=†~ûô¡?ÝsÎ{‹‘k·gýãþnwÿ×ןÿÜ=î+
+155 0 obj<</Length 49528/Filter/FlateDecode>>stream
+H‰´WËn\Çý‚ù‡^R‹¹ê÷cKrŠd“@F ÐÔÃàP±$@ÈßçTßîêªáñ"ÑBä=¬:U]]¯væÝá韯y÷ù`Mink­š“øýþðöðûÁ™æ¶lJ[œmܪ9–R~ºSÊ3ýÛo6˜ì<Ě'!ú¬y²öÝÍáé÷Î8sóÂG×6oúÇ°…š’IÅm¥ädr
+ .ÍܜOŸ}Îæö³±› Å'úé]*ýgŠÍ|¾}8íf­ñ-ˆo¾®^þéï%¦üäæ·C·`Í0±MyË57“ŽT#™!
+2ÈÝD{*¼ÄnªàÈu÷h4,NWÓÒlÈ®„;oޝJ Zæ´xÆ{)’H±Nj¡%ù˜¤Ç¶rÖùh=HÂuLjB.Oàˆñ”Ps˜ð6öª½ áћ”ôêñÂLȚ«’{’©Þ¥@Eu9ERz®K™,’†nׄsÅo~ÝŽ=îWç±ÆHÄGÀr3†Úž¸gdT¡Á+d®U‹TõÒû
+ߚ A¥LUqC¯Dõ(%ÔdÊg2ͪ°Ld>ÓdYøÅIý{YÁ*asPv‡
+¡u㏙™‡­SZ7uJdqÖ"øS+’x䵔ÁzéuŽÒ£e¿›÷ٚq­17‘«iwpÎ́@ÆÑC¶pñ)ÓÜô‘žKŽ)ƒ’tJ¤XÞᨠ@aít@N_MÀGæñgL
+ÉîÁÈòšžÉAæô~1ýc€ý›JË6µ¤mS©=‘e
+O!ƒË©†Ò•ª-åL¯”¼ C¯€| Ycu‰V5‹‰KYÞ6˜µ½>UkÅ&¼J æ™!4ÂÔ Ȥ™JýɪJo"K {
+ÞU%3æñØGœÚj<–˜R¼>”g—TPþja„ñÍ×%‰°ÖlÞÒ".[ÎæɳŽ€¡E-ƒ]_e-Ëp(XFðàfRYë1þ«êÞá‰ÙŠBÒV‹HZFú±ŠpfÐ
+€ó„uæ:²,=BÄv`Ç
+'~3 öjla-Jô€®˜Í}ó÷ý<ØKD1Ï}äoà’
+:®ê,ÜAFÖé“àï
+¯ˆ\ƒMÂÁ »µ‘YX?ûRAäÁäDê€9ªm¨¤aR͐± ±Z ¥…Š€—IÛÒۊðÂKÅƓ¢ÉÝŒ°}û}‘Ær.äþ°zОy’Ñ}ãÉO†UŠÏrk}×Äß7+Â@R¬ýf}qÁ{a¶âª,àʳ¤£N,RÁ¹Ší€ÿjÍòàÇ0£ûh1?ÔÒ%旷 `1¶–ބ€L ÊsSéRÆÓ9A”¯æO¨åhñž$*™XÌ‚û Bˆ"AèDD& š2F"B“-VW{óQ7o]ÜC7?yE£dc¤`CD±¡:¿#쾜R[É!=â…x+4Ü%1moÿÙWèîõè‹ g*~‘}Ë÷0· úFé:Ûò¥ú°ìè¤P¸ðÏV0pN^ 7þ™ãïø¯çdé óC‰Ê½Žá‰0u²è{Óe¿Z «ùÕBæ™#°¶‚´"ÄÓÉ҅õ‰6Ç£Î0$xX‰˜­G¾+úzl%[Ãƹ~¿ôž†/$ &›gƒd©Ørp<ÜU
+T¸‰órÝh*îƒT$Z
+„M ¥! ¸õXajÐ@qÎà
+Q±*Mó¥F[³"Ob틬“SŒÐlÇòz wî­î-(X®¾Tí¹|©¶Dë! '‰Ê ³YÇÌþq›[GëAÉ 7œ”ö0Y¶šB\!2ÁQ‰'~ ºFü¥ß „+EG^þjdq()ˆA>½¡ýX„ KӘޏY§· `‰AÌéfˆºbnt'›2Ô[új9™y«ý^¼`ÝBð-_RHÂéÌ|G¹/qÐCÇ{Tœ±hóq<BT_yiÙLW#±¾,ýý“o}f‚ 0¨¬<ӑVèZ! = N?¨²Ð'ž­%Ôᅗ4{+¸`r»þØÔµ@‰+jáy÷ù3ö‰KþþÙ½‚ÏrœmÓ]‚»
+ᗀ¿(
+ErM!
+EÙ2ty€
+‹c¾å„…}’ƒa! gë.1²GÛw´xŽáH0±tâeT«CdÂTÓÖ©[™*×­±02Î7$â
+6D*&\¿lpHJ
+Q(äU{ñ6r¡a´ßX=˜1ô̬ÁfAì…ír®“s½²¨4b‘MÆ©yŠ™y¦ôƒô²|õ„´kü;IÄà¿Q´-;6n·–´”€ ó»ßKÑX6¤±ŒIcÈM#§K2†b ‘n søæÛr_o΄ˆ¾ah!Z&zéáPA4övjk»Ü‚E¿Dãô%…þÃ4÷<‡*…óEè™Å£òˆÇb‘Çò˜×Ž¡I¡ùR}¼åg
+Á˜o-D'¢X ]Wc>´a÷fš•þX4**RM½ù­€+=Ø`¦Ÿ% xb ¢bÈËAfCݼúQ—?(âiÇð^¸?rû±I¹… Éck'Ù@,ÍX"ŠÅ2Z
+‹5q¥„ÊÆVßò«x2“Ç¢/\D¡†WS {…Qæ»Eˆö]^–!™…\ŒAb±@èè˜3 H³‘—l IGiþ²ÊP6«š×?hø¹ö¿õ?ÿûï«O;ò+ \ …fû)ÄlðR $ßoýÞУs¾xho:´…½ýå‡òh¸ r 6†Üûa’—¿ú2ÄËêa×^¶Åk;C«ç#‡tˆ…€–Ôë1gX’K†ˆêG
+z0w4à ÃfÖlˆ<y,cò˜Í<æiÛ@mÅÑ
+µ5âö4ÑòãÑar!ä‘×À]ÔÂñh‚0' ¶ÖJ(D Γ>lÖ%eL~½œŒŸŠù6BˆE˜´átωI¦­aáÞcf£æ™èÀ.á'³xÒ¦”0…Xtˆ¦5~uWùÞ!’ òR>böÈêab‹Ç2ìGÒ‰¯…Wï
+14ê\îàlä ÷NÙ2*¯$yh+o^>ÖnF‹n^·Cë""¯„gS
+‘€¤‹ôÊaqÈa6ØÚîŸ8Ý_åRéÙãQ7ŠGùŠÇ#_zaÒ'|Ÿ[à <bçž.ßï¿ö|>«ûß`ƇRÜ#ý>ß ›±«†wéØãþÀüV Œûb`Œ=µ—ûæïŠ9²G’Å|P’‚A1CgëÎbÇ}&oÇ¢÷]n‹§6d¸â¦ý­ÕòL{ îwªY` SpßÆjˆXp¹élGÙ¹i½†(‹„ù–b$"Š]0‡ha¡¡ Z ¡Ÿ¼¤QlŒ·V³·ÂPû!y`¿#ç`®d¤'e#^CÄÎðkå‡š5äG„éà±WjótBóéPvr±\È*dOã³»ð¶«åÊb݆UÒ@|¬¿TPvo6éÈ#‚àØ»k\¤$Š„˜ž~k”€ ±æ¡éúû5A9wÍv^óÜÓc`À›õ1ùùðA[Muj\"/¼™´ƒ8B“zÝ!yhЯQƇOpwâxîoR#a"x¦-o+0ÁË.‡#­8º4Õ€7 ‘Åm*TïïèçÛÏ¿;&Ó¯¶ Ͽԝ”†F&|Xøm$tiùª9Ü<"vªm­•Ö®-ŸÜà|3×HñóáùSe®$<WI#{hÝ`¼âÒÔþŠÇ׺ÜÞ®––Zà$Z0²Àò«ªoáâåEÄ"`¤‘1Ãå b‘FE9ihZxhœ\•ýÁk4{]s$­8LòºÂN<³?\ø‰cl^§ÊÃú!¥LÆâ>(¨ ¡Óz”3s`1„ý”NÜò:2®‘Zˆmˆ…ZhËaÒЂ§¹pAñÁKîç~Í媧°
+¡Í‚¡Í"¿hÉÂÐ{Яl֕Âönä·iYå:beè^L؈˜Yô£ 1²Äú Ûm1Tc8ð&áŠÈâ6PwX5Fj¡ê
+„@^*'±¦KžYA.ú´qÏn\¡±°\0úsêšÜ1p҉.ÊðEJƅ<HşŸÛfkŠPª[©ŒÜ5 ¸QôaþFKÀ"»nÖÐ ýpw½ÁŸ[뉀§¶†ô½…1²ž*€;T7 wŽ,´P‰—¨Ö«KY¾§ä‡ ,wùD˜í¼ZŒ{3€Ut|Ù3^J ¨®±~ )I˜YÜ/ˆ.FZ¡×+b&п—,[„©³‘•ul:Âb¡×‹X€Õõœ x Š!¢{×ÛÕ¦îÝ£A´& ¼I|EÆâ6xA$½e}¢pCêãj@m×vÁ߅qµ°f£%pÓâgô-‘#Ä
+ÔнtFáÈ;%ŒÉþ’ü|ùàzL½»>E¥6ºõ¹é€‡6ºWÈÞc™ zJ·€ì”TK…ò-Yz櫅«ú¨¥`Ñ0þB[$Âí7'f{Xù]®\´" xܺî¡ ¿±À´{Dêðç_XM*‰À?˜ƒøLú½‡|þŒ:“Sê÷ÀQPFE³89¶ÝÂsA+{ù{»íû |‘‹M
+ »Ð:öۊ«…†Í}
+ñuAd¦ØèÅ„$ž±Ü>˜D‡XM:¸ˆˆÍ¼Ò¼ ïJÁÏp´«ä¿Èj¡Û rŠÇ¼|Œåúõ̚³!’áÖ#a"lMw7͙Ïz¬I’ 8Æ
+UGäÍ̊úð‚Ì=D?ˆÄ×Há"6ë‘}Ês·y´Gÿôbµ@Ž”;ìê›Ùx<h–Õ—MÌmRPb¡4Ú}žAA=oV³da¬áÐb4î…Ñ
+ àÊ[tÝô Á1ŠÊï„È2!¾|P¤!&‡ Œî¯GGDlöì4¿€[$<Fÿò±sˏlÐs{Ó‹ç’vF›ƒHllëÒëš3~%=&E~¯+½<Æ"1šÊ5"ž!DB r9ç†Ö©zÒ»Tyˆ<BÎí5CÞÌv]¿¼
+Ó ­²È鑅ç`4²‚Cãiè5PoKGñB¥ÌpéÅ­ù
+&BÓNPn¼.‡NLEÎÄ4/Y–Å2¤ÜîI;.´@ɤ;¤áfé5wÄÊkÿ׃rÙQïðøqäÍl…ûåµ0#Fˆ~ñ²jX…!bƒ×îÐëGDlÚ5{ÿô²ò) s#è/æÃ#ù`=L?}Ð5IÏ«
+‰X2q­„ŒO}:/Ü_¹{ÅJ9Ž!g:ò%žXÅüÌÞ=:l a¥v(smÙÆçAÆXI6(‰šÎȵ«Šmòæñsž°yP•#Ù±pK q´ç ©Gûƒ¦žªG¿£¢R®š\"¬åóüøé¹WD®¹öå\EæM¹õû ê>(ÚºµoyX Ao„µ:1€÷õÉNx¬î©‘1#'vxé}1gžº1-QëO«ˆW(öÒjS„ª–l yó„yÂF«–l ñXVÇáåHØ`7îÄãHØhmýðÂkr5®QE~3ç#¿d`Ɛ~cÅbƒq]^úUÑA´Éìb´=Oe T™Ó‘SL¥²‰<¬ÒÝâð’9¼Ë# É ©<½]òÇâH»Tv9\¤©=l7¡O¶`ÕM:ñã!‹y
+H@¹#áâÀÉôïpñLÔµožß<
+îyÈZO§ËðÜl`À‹Â—¢nÐqŸ*àA<‘²=è UNJ±6Ðo§\Ÿ&“aP`(œ«ÞLa÷Kêeß?(Á‚.é¼P<¨ÜÏÊ.¸~`²°Sý
+°Jc—….?201?D!8‡‚sxã àp˜ T$þZt®åº?½ñ¦‹Í¬O²1Ē Û”à ›zš/Ù<»Eòï[†'䇂ƴö¿ÿþôÁ@SÆOÄ3FO¨“w3°Á=ª‹Ž@ž‚Ú²WõËgH;íÇO!x|O'bO Æ^kº´.4ãÖ¸Œ¤ù•Æý#çq¯ˆe̎`8)sð‰:±ð¤Ü-åcˆ]Ï5ùô™˜×gí¦6†¼™Í÷—r(º# ]}•ÄìHØȀ—ª:°Üi¥õHÚUG|WÝëÍÌȍwՏÕ0B¤C6ÀYÆó‘xÍD;Vi¨}ÂÚ²~‡Çíx$:7ßÒe´ëÉFÞ|ÜÇssÞ@ʧSM| ‰HG q6Uk8 q'xû@>eþD<›{”;#aƒõÕ̃Æy=9¨8ÊæíÅw_÷!9Uìž!j²1ÄóÃë]gI6kß
+ÕWچ­ªJ²1äÍlÞ¯ýG¹}72Í~ëÛÈ\mAcUâ4ž±Ó0rh ³ûŏ áeˆÂ-¢ŠÞ¥ü‰%Lh½'E
+\rÛ`‹opˆ`˜Lz}®ñK]Ÿ:T!îL8+qœþ_Ü¢ªÉQà+êoOÞN‰†Ýå"†ÌøG1ÀvÃ\|¿Œ4 ë.2†OÊ}¸Îî^È>å²£Cqà…|{Ȕ¾~R¬^¼]„…ÎÚ
+@6µÏj]{®‡-Ò~„«ça@pà’ß €ìì´ñ}ªÉ¬xœÒ×rR5)Ed%3z£¬D?]£üÃÿp©ŸFKˆÇ)¤¨Ü@BdÉK²YGZRÊіáU$C¾†b³Ç_²QäÍ«0²©g'E(zו½!›u„¢Ÿ‚Èž&RÄÊâÁkC#*·óEÄJĽ"ºÇ
+e²øJˆ4ê\¬¢°î‡os JÞ¼„àºæÊ0„B­Tö"_t¸ w®CÞ<±*㠛zŸû@6ŠP,Ôn»©á–* ­ÔbÆM»ÒžB^œÖHˆÙxe@ðÕ'UÆfå‰èrL•MˆHM%
+ù(B6xùö¾[×É×ÇJ^¸Ç%íiC½7®§ñJ1
+s~ø rGC†þ‰ª]”òrÇ8p?K-„…gabÆ£ýsÉCéK7 ,TîD¸t%Y˜¼ñ<ÔÂó0%ây¸41\„Ù :ãp ¤êâgâQ¨ŸGÆ`Bïøj¥ÞKJLÈä†æâ¤GÏDÔ§RxԂJu‰#&ôK æe‘](yì‚Úu&fEˆÇ4N æ̪•þ‘Yyh]x‹ä}'E"VÁkR2¢:ȏš‘Kõ¢|,V xåfÚçñ May3=u_3Ù`Tl%!¯÷ƒà‰œ•‡Ö¥<„{¹æ²»SnL~%yÝÏÓL6ŠD†7&½Æ7]TΪq³÷)-(&È·)‘7٘îˆØ®DÂÆô‚glHì ¾G›\ÏúÙ*ƒ¼Lwx,•‘² ‘°@ì†I¼­¤DÂF‘ˆm‚ˆU0Í ‘^É|¼JMˆ’m¾Aãå€Ök XæKˆ)'?+PuB«4½â<®4‚Ù¼"cÕ4´ª³ñDô^°žžl¡ès`ª.S5±„膙Wäã±Ácxß¼
+ç‰ 1æ®÷Ü£"ç£Ìž¤ÌÞ>ª{ÞH¬ÊUN æåù™ZŠ5`–i×ÍglH¬A¥ûæt ‰à."1/OÇ$ ¥ófVŠ®b„l ñkãòÄ£›!CÞÌÇæûÓKKDÇăfÉ<&=â^;â%g^”¡I!Fƪ|8†P,•0ñ íqª'”u~ÆL±P†Æ*å£< 9<îez)öÇŸLñïCÆÛðÈD8äpÆÝÝ틴-ú¾P ëŒÏÇãúÜeèòR/,ˆ»DÔùÔã²ö™`Ü/ÌißòüV§ü2 ”²êÁ(Æå3û¥ýo+G}]=­üOJ§°…I ”Å°÷þZP3Øßô¿3ŒÏê@¿Íg_ V»1cœœƒÛGµ·›}ãøÏÌlá0w—XÐéƒúßÛ¡#tìû²Ëî ¶¢5>­50
+ >}çðe‡­Ó(ìÛÜay:Ò2@=ÊUtæ5
+3°ÓŽ Ü7çOÒ ±¥È _w ›®j2lä9o´Þ@,ÿðò|˜€3²håà0Ÿ ԓqÄX0Ȗš¿Gœ‰#VBîcû¬@X®’"¢]¢”r
+Z‹- ˆ%’ï/Ÿuê,»<Ò¶ˆñ∯ڽ<;#&à©tsÿÏw•I–ë@ Ƈ‘W¨à}ر&LėªýWÄÅW5+u¿,0 ‚ pÀ7Âpد„1DYP‹[+P ËC4Ü£Ó-º(éG•ëÖØÖé2®SC¸/w?°0TjèýZ40wÍ ™HÌq­RD@²=;1mE½úò¯%§Ž )¤›XyìVŒG·2”ÅÖ@ìßw €-‘o xë"o-à†hì 0÷¡w«7$·ù
+$hm×òg¾l JShB¹wdU¼¶ŽÙ1c”Ño‹8«’XŒÅm–H]¥ &ñ @ê‰j)`$Ð˹]åÏe1ÀâmB×âbˆù¢€ï´_{ÅΚY"\Á„HýJ)C´^Ø"ۛ¤ÇrÛü«‰†XÞÙ*;¸z¬€í¤§4ÀOPEPû)U†[GƒZ¸O$_Ö@ט›PÜm_®`¢—+
+/¤à(c^Á´5ŽÜ6?ÆΫԠ¡‚h(%ã[u΁RÿÇѱš_mÆÊ舳â%æ~! ¥;Ç 1ă««Ô#6 @Œ_ïÊ3zÙëÛ?žÞï_x•ÆN‘1z(Ÿ"c§}™àÁæëÁ¶
++—«Dô+Úó˜¸Sp(˜4uB–Ñë"%gÊ@üA¥ ‘ò¹&QÔÒ„gW©±X %T
+Wr¤’ÙTP» 'Jpœ3aO!¦ÁhÈiwm†¼áµ4*­˜ŒÆ&Í¢À¨\€`4‹Y8à·2"Ç|mR³àŠûš¢C]ñç
+Ðs á} u×Î'Íôöè“:î,ãòq Q$*Æ<–ø|ؐ¾¬”oÏ4Òpã7SØ82ÓHIâ?¿2:!Ï0°8) `æóø:^_îôt*/Ù%ƒnPŠ†–Ö±éx<Háix`…ŸÜ¦x8pÔ-L
+}çm뙡¼e5Õ'³ =˜5’Ó#W*> 4ðf±Â/ÇF¸é¯w¡ñïÏ)QÀ{>Ï⩋<ëôVà;{:
+
+·…ÿZN¬’ˆ¦é  ã5P‰¾ûïxúHêºÜâ=\}û>VÈÊÕh8%/™/{àï“ôϗ˜¨£…’E1m­XLã]-äR—%'~sÜw¾ý•˜Ú*†¼íŒu#=Z§¦ÝÇà¢Z±k>wÜ×¼V¡H§r­Âc‹Íäˆ[åÒñÒ(žx†‡#œ¹;нåm€´•C½vâëOzUÎVÑ$º–f'–\':´g7äÍÈæGÃ5Â(Ÿz:£®š$
+¯}C ÐCàǁ°O=m+ø"ˆ³ôW§²á€Z Žá/­i¸ÕfÈw^¡ {<ÌË=¦²ãNȬ^£…N‚¹³¦7R字“ ™“Ïy+éÉu™òI,6?_WU.{îÆÁ€zÒFŽ„}„#à”1"‹ÁD^Š#¨-ÕÈ«ˆûÏCfôâìý2ä“Øó¹
+™ÈGX\YÈ@ïWÚ:¨_ÝÍ6Ø´µ|U½»êà,±?j2Ä2k¦›[(ô,–i™î”õ zLÒëâÙë TBë<<¨û5òcˆ®úäyðü|ðœÁ m¼å*—EsÄF ¦Clt¢ÉUÛ9æ†Â.PGL!+þ|él3QZ¡ãƍ5èâeñ÷¨ó„G*5h}BV:ê?e’ r¤&Í`‘“Ýe~áxé£È(õ$>£€5»LNuFv/26z@æÖqr–Zx2$A2ãÅ Ü« Š…{¼ÅIo$|ùv?$¦ò‰íF’Ñ%wêÇÛüûáÇÎîUëï^IžW ƒg§å{â÷ØQiò®¡æ(BO
+‡¬t+썲¹pgaÍäž,&K¢Ë‚À*$~he 6hdc^6‚ØNo½ÄuÉ9á-ÔTã™?h…Åwn…å·Ő:f4AÑO%ò¢~gԅh3¸ù…œÂ4‹ÿ †_K¶’T Ù»è‘蝐2Täí¯ÓÞH-¾Ah/¨G”¼†×G¥çÑAšJ˜¤Î¹ØP!xðËW9g‚N;š‚Á m‹
+‚ˆbFƒµUlLŠíX@Sâ
+€¹€š, x>ü†£½
+qfå1Çmdô6ŠØ^%sÁ‹»«…½aôÃóÉl<¶{¡Gtõ7¯uÙ4.ƒYÆÉhƒ:žwð¯%ŸMcŠž/­r?¯èƒÚ¤ô`¨†à²
+ՙ þãՒtl +¨ì‘Þf1dŠIž+ÖJ<ÙًYȐ·#^¾¬Äm:B]lze%˜ùÏU‚›Åª9Ø ¢>˜ù¯UŠ¸Í#>'bµâœªÚ î32ë¸ö¢È—/]àû}UÖìq•ƒlóG=$ñúÙ;ÞϾ€F½1e0X-Aˆ’r$€Þ7~xY8e ôÜÌõ4,߰ݕò- >ìSñrõtµPÀ÷x.QÀ,´˜…÷3eõ&ø×E
+˜Åãu…ç&Ô52Âiµó>íí$Úw5\ÚuídB á•õæ¡ül¡zünü\ÝÀƒ–8áϷG_7—åwõXÖû•ŸïˆüXŽá÷~ÒR²­•c†˜ò§œú½à± ü!‡,vLˆþ°Ø4`Pj Iôª˜HJýz·Ïä·2€´ŽêT$ %òÄ}pQDV}ò„b˜qf-Î¬È_y¢Ä5fEœY˶3+òWž÷·M‹¼®Bd´%³J#S¬w¡}ÌuTª‰3ÖV kw­€TÁƒÊý¥«Ñ\
+™B#AŸÜŽxRM²r`¥O0;¤9þÏw•$9´£Àô¼îE…æá}„Šø+ûþÛN ¤ç_+ÇK3H€€|™‚Üñ
+xY xÎêäoÙÀ/×"óe
+«ÝJ©â]—dÀۀÝÖUg·õÞ¸ßÄ´Œ€tÔâ:N¤!™ëz¬¦ä‘UC[ éDa@ì:D\›*Ùõ:*ä¾sœŸ2@3ʃJ=·5•šÞeQB‰Ò"$¾ Ø֕?è=vAX g͓ ÿÕã›Ê¡:Š˜YV¿ïÇIAïÌó8› Û1…h~H¤á¹÷ã,‚8âå w.I/Cœ®2ƒ[‚s®À¾¤(9ç ™D Žpb†Eé_OCJèx!ûâUd×7¥9úQgȖ¹Jþóx8‹ÖµWœ# [¤…×OÊ9[2. jI{ Vd/Á¦ì^å?ÙëõeG8 ë,Ç|k)²}}ÑÄɌu Iñ6¬ÈJl !fÞî\½ËٝG7û®%ȖAçîý`Š¸ '¦»>ȑ70·ë£§÷Ü=’Z÷œáš„ qlÜãcUà”âόÅSsn4ç9t0ùF/ŽiĘع"´OÀòŒ¶]}©s:öÁsG,Ž Ü–Ýðrá9F2ÔÇqÑóê$ÓjòfØ)¾’E¥Ó9éî%&Z¦ý4J˜œ¡"¸^ö"<ˆ‘Ü.‘€ý6øýÖ£&údœL$3ÇiùSK-“âãšå¶¬ÈŸZ‚8™yË U³¦#<‚ü¥¥È–ɏԠtf=/ȟZý¶\’Ì¡\ØA¥'vVW%!jû=sÜyP•ˆ÷Ñ·Û¹SrgÏl³;;¿Z±pª‹JX*M"^VF*aq³“Xí$–5“±*Ú2ñ–±Þ7Ò<
+áÜ΅qnß*a®UÂ<›D¼$̯JX°Í‹žÃÎJ튳2Yki{Ý{¦Y;#ÎÑ%ÏԛhÝ Æõf$ڐ"XJ:ÌÀ®k‘«5ҟŀ‰™R÷¾Â„þð¾€^ˆÌ—!æKµœ/±¼}bCݍu,+ßSljVh¶øö”ŽV¸xh8_¢ó1­gŸŒTd5V ^ÚÝ1Ù'& }Gê¸H2‚økk‹ï¯õî‚!>d
+H£Ëϕ1Ð]ìT[eb‘i¸„{Sxfƒe°Q—~"’gÑòHFƻךEöp³ìõnZÉX¨ÊÄ.EÎÃÈèH_at¬s©Ä[üޓ*³Û`RŎ^ü–CH©Í%byaíçužœ×Ÿ@K— ׅԾ+-`K §¥ý4«È_Jó6‹ÕâE¸voW‘¿´Ù2-ɇåð°nË_´Ù2’'Sì oY‘?µÙ2¥ß2¥ Þª·¬ÈŸZýa™ný3S½ðÒ#vTlØJÅr¤½6ãì³
+C¸–ÉUD¨¢é4­ 9ÍòÝšgy*óÈÄé‰R »±¾O%’Á|(ÇÅñôFXã/ê[d açYb­ï1yjuµ_fZ§·ƒð¬K5ÿŒä¦Ö~œ2¯íý¢[—£*xìŸ}ÀægAÃ,+¿´7)yí q®ˆÒô‹î4…ԏëú&ÞGß ‘æïɇè¯¿Î‚Ž‰Tº%L)=‰Ì²‚°öå‡d-$9 ùN)q(s×<öœ,,N>Q«½$"Êìb%ÊbQò¼ì†–]ùúÀ!¸iMԉáÁw?Uü%g\?ÃžŽåiÝ'*Èh’Øó$œ²B2xˆ4•‘øõLâ?%¹… 0ÄqäÕ7d»›sõ+<ˆh&¬3™)ƒž0²Œ"D/0€h1ûåȦX‚ޝŸÜÀò‡œ2–Ž¸ê:
+RàÇ¥au&0›G_Qš¼–:u*jº\|52@Y@a%èÿoÝc¬]2®»é«nB.zÕ0øª#èågkBï¿ÞZÎðû?ÿü×½T«ìÇÕàCd5Õ+ïG6(©Ø
+Yá"bè…¦•±s*²ŽCӐ’ŒÜjù
+û5„ß¿;=«WE¾†°Ö“ç|ϑ<³"ŽïՕ3õSÛHš™}¦Ó@¯“âG®•ŒÙÿ’/Bò®{I«pTãš©9òŽÌ\‘c ç
+}L¿‚7Žý…þ¼eȕÓÎÁHå=+ÒrœË¯µ%½-WåÞ­k!?ªáµ‚ü àúTOíJ½öÞÞ®z=¸´3ô(ÓîÑÃM;LðûõµFuZ§—õŒ4ãrjê“`Ë¿´“]r‚¨Ì[èŒ8™˜ —žÀsåì.BE°t璽 ŸwgÆPU»>•?=¹Í_#‚Ø5"Zv
+ã豂½¢c+©(¡¯"µB{7RÅÌöϾˆY‘ ÙýÖVthÅP5AŒ§%øŒ¨pìÎî, o°".ä–:'N‘´H’Á–TºCï3Aà]Øû6Ò·W^¼HRÛÈnW¼3ŸÕVuëxdásç v¦”V6l*hÕ6Å¥2«¿ñÀ¥†é‚ïs­_ÿþó¦'”Ã' V †>sÛ/DÅ;°Úð"H¼S%Ï*€¨TšZųVT,@X+õ¹kí{µpSAô.ܧ…‘ß±Ú0͓·ª€J ï8è‘^€äƒ?·"úíTéA«å¬
+ðu€Úɚ“ÀB­â8zù”äø÷ƒAc•@—×â%P(ËkùOÙ¥ÊT$”êR åëQT‡þ·Œýä‘JfWòÊÊ$j¶¹ð¿ö[Ü3<æÍ­yi~¸ûÌá›}†œ€¤_ӗƒ²h9(‹
+PNZa„Yž…hϪç•ðäÑÌ 2yÐ8ï˜ÆDöÝÑ< N†Öñ™{¦Åˆ“Á8I3 ó“[
+Á£×Rå­mîA’ð@L6NÓى€YþnoÒ®¸#r¶­3œM‰=6áÁcþ Éä„çaFÌ"_%x(ˆ“iP‘‡4sۏ-“'\bi&ûØË62Ï- ö®œƒÖAŽÖ¢‹ÂɌO¦"t2†Ìz˜çYCœu¾TuAŒY´Œ™T“Á¸Þ˜É4¼Å[WäX÷Zj=¿¡!ڃ– Æ,Z?ùCQHíê׾ ­iûÖJÕ¥Ìd±J¨¼¿;fÙègòåb<ë“G
+™cšŠÂjJO/Î
+r5›þ·è¬LÝIhP&à“i
+S³x÷ ^_L„÷%Á‘
+òÒðukDÌ9^z\Âkò:SÐdbcîA‹žÌr³.¯OÃY¨öh1—yÏñÀ¨ÉÇ­ˆñŠ’z£–žˆF¥<Š`aZe¹Œ(){ãŠh*TÉhú™÷Aç¥PIŠ³hIäћ³YååKÖL‚…f<Á9ÑCí)¢E¡JšPlNy·‹Gh!³|
+%°ˆ:Œ“´ÂÈéÈyNJÀt“ôÃËL¥÷î3g@Š0{a ðØB@( e‘è4"c”Fd~ӈ cÚ,ŒgèxݟkÈt&dæsK€›™^¸u­v"W\æ7Üuú<%À:`Èʅ÷’5î£BJÀd“Äy©Nfž»vwÆߐ8âR8}ÄçÄU†$"#É1¯'÷kuÎümª§oƒ/'3íÕZ¿)ªµDT&9f¤Ånd^!$%`ºIúá¥G•w¬¾Nƙ€ÖR'Ò̾úb O°!ä f€7fÈ*§é±Iü¦*)?œÌ²6×@$ó„†dž°!Ht‚ "¯;ö€#.ûÓ9 ”Ê~><œxÈcHiCeù⨝‹»àðqë«ýXŽ j¤†ó.íD²Xíâo(¤ðø ¬!Y™Ç›˜K]ýqe‹mºnW™a^>=é´Ì+óX–þ ‰So¹ +þg_¹Ç< 9òæ ˆ”ÁšÕ¿ýÌÌ2žæPt®ùÌZ3µìï»ø‰ Ÿ‘˜þeÛÝ!‘8ñ¯½°z6Ì,1…  vÌýz„=PWÈ2wÙÃL óØ֘-óœ#3ó±s"°C[`©oDS"¼ø9íL!,N„H–t(™©C, R‹­?üx‘C!©ÃXÁÁäA?D¨L•™F4@côá` B·ö¾~}JT’ÄX@¸¦da#Xñ 0Ð1 § ëC/LB@Ä"á¯Íýpc©Dö@a@CK4ˆÜ€%Ç'w…k-¤¤{–=ñíÆó€ü!œHˆJ%7Ž\殺€H¬_~, ¤²ŠJ1 €ÔƒÂº7o«{E¥ó7̉ՎÜ×]^ç,, Ð뗗RN;m?Î‡öUÆlñUÔZ@ä,y>^ïm} ǽ)ƒ%ÏÕÏ ÷vÛAՓGýô„|³ÔW\ýËVÆÄÚ<Æ´×r·âˆº‹Õ#¢lçõ@ZóûS•ÉúåG)%Â릔‰ÌT0ÿm™¼3¥´m"ç¹dJ™Hí.¬þ¡n™@ÆåXqñ ˆ”ÁšÕ¿ý̔ҖêPtîy„d­™RÆÕc~"îµæH‰{éː)e²b¯-kMeGfõøàßgAØ•…¬ózR_=Õ®»÷EDÁRëëî_…!ÛLƒÆ"e°~ùé1`½¶»Ã@–ít"¬EýD˜Ù–õŒxc, Rë— 3æPt2ºØ˜ûµ¶õ1f"ò–<·×~–ýƒ0#)ƒ%ÏÕÏ߈@w1ˆ bC2i‹QñÌ)f0…aËHBrǃÄímµÄsc+†3©o"ª”$™‰%/gÈÚ_µ% ÒM’f¦x±ø#w™½$€uÈ¡Ä*C2z ˆ„ÁúåFaÌì€JÆ’ÑËƑ°ä8ƒUAêòîù<¹n,ü˜¿Œ^¦D¥À’›ŒUÑËX@¤ Ö/?Œ^ùµ|”ÎôýÜeTœeføR›M¥Ó NT«
+2¢9B +Ö¿½Ìpö.ׇ#PÉàecrb|Ⱥ/àÈoF*C2v ˆ„Á’ãêÆB–ù;_ëRdP%päæz|¼ŒjÆ"áëña>ÝX 2çLv–X8/Þ Y«»Ž¤g²Ô”™ÕÕ©TþO?«Î.ˆ°S²~ÍgÜ_5=p&Ò£Ñ*± â‚xÇöȈF'ÆL$‚ÞuÖõ:V„Òq+²Ïc, RkVÿö3CéKæPtúÅ´±VsŇ´?@¤ –”¯×ÕÏs¿ÚqåϞÒûÑﯭ ýš)3fÈvì…uÄÕÜY¶ýø˜éDT¿¢ÌÙ K]Àów_båõ™ÈgÄÔñëˆlËŸéQ`©wÔúF4‡Ð!‚À©õBÜUu"œy²¤“Q¶ #î ˆ”Ábï?€Í¡èdà´1w˘‰ÈXòœQVâ®XD¤ –<W?Šœ2ˆlCðárQñ Àf0…q×HBrg€ÄídµÌÐi†3îªo"ª”$™™YրŒ»Æ"Ý$ifŠ‹œr—yW"X‡zA”5DßXõ vÖ/7
+ÀfT2rڐ¯¯žˆÜ€%Çf R—€tOî`ø­n,pš¿Œ»¦D¥À’›Lq×X@¤ Ö/?
+ÀùµXÖ÷ƒ¸«âD(ÓÔV6Èz–cŠ-“EåöÕ:‚³±Ô”¿Úzø± L‡ŽLc³Ä…~–1@àG,xîH1¤g#%àµëœ>ÝXx6žMˆJ%7±Qþfz6RÒ痋ʼ¨§mLÆ΂Œphµ€à ‡¯j}#ê
+ó1Dcî×¹e6ZÜæµ÷D¬V²L¹Å±Ò|LdÜ%PkæàsݢuôìÈ6Þ æç,Í<jýaÐ!2_Zû·ÕuÛK GÄ=¹øÿß¶qSÜۜ…\ƒ»¿›¯Ê—d++wÇG9^|Ü%ëm, RkVÿö3wR[ªC Ò¹ÇmêŸñéoG÷“ë-åXƒþ.4e¬®”‰° ²¨Œµ4$×ÉX@¤ Ö/?\»X³¥5_½Dþø’Ý[üÝý•
+”ˆÖ·_[»/x¿°ïæ äcÈ—°ÍyZnSɅ«H_©h‘¶
+)®ÐmY¼Ò?tùÀQ¹¶V:½ÓIR™«V€¾°ÎID²É±¦«¬ãˆt§¯#ŽXâè9}ÀB3þÑÚåèrÄ:Ÿ~õ,g|ÙkA®þâ´4! /0ptíAא¬­è@„j
+™xF½vqMrÄç/¼áA ÄÊóB ¶ÔØËO…O1!–>Ì „lC(bĈ–+G¸‰X1«Œiž+:cNÈ}¯áz °Ð¥Â Wõ
+•ÑP±‘&y[ŽÂˆ¥ºØä21ï/×=>ÇQö91+5tIsª) À>—‚ Vl„4Ys“àu™?Y#È¥ÛÝÂËoa4Gp¡¶L\¹qˆÓýz k.’ $xC
+@’¬\Þ´ö¢Ã2@ÌÚ°%"ÍøPˆþqÙ¼Œb$ZAHEñî‘/¾c(  àÝ2q¶ì¡Wî¾@œEŸÿ}³¼»ùTHÆØTHˆ<
+ÎrÓüó¢ùù*d¶ qiûCª´}¬„È,¢Ë‘I1"©*g’Ò·±q\qío{܉ ~zÕåýÎђòléˆ<!õNRÄO^ŒkXDµð؈К5!òd„¶jJ €¬™‘C朋íí::¦Uëb{»¼³³êÂ: ¿«²ÌVÍöɪ)Úw9zÞ`p ÁRá¦W91åñi³[(ÖQ!{äÉZ5Y(ÏçyC¶”ŒŽ-•þ©§tƤËb–¡aIW•第K£ÌÄ Ä|fm[1?F-±/R¡ˆáŒÛ-ÛSÝ5̉î
+‡‘s”$Õ>剙‘­R@œùÿìù!íðˆ{jRw|ö̸dÏq{tR“²îÉfy1™<3°9óì=lõʹ¤^•- ä%í’u©
+±Xoº£«G—ßBð±ÑXðÜðôòˆMÿ\=4Á<ζ{:ÒςV¢w¶¼ÚY‘V5ÙDX¾¿|äÂ4Žlˆjx~2 \FŽ›—ÕϘ©PèÌE7[C‘ž:\A}·M¯9Ø(òæñ•Ž§fL;5/C´`õúôΕÌ[eÀ›W÷áíSÎ)±Ԇi2ڊjµ°JC,R•\ƒÍ«‘É%?l6òæ±JÛHsméì9‰2:°‹ò/éÀ¿˸Õ5ËRlCÜFº^aòm·!²xg<h,v²‹ÇQG”Å|rD㤣ю¾ïs†Œãх6Z÷ŽA-7yICçAúÈ©ë‰É^Š8óöÒèï|¶N­»Hn„ynŒŸÂŒ&p¯ŠB¹dgÙ
+™êqUj£+òìU­‘Dþ¦²˜oHY7d{5l$ÛL ”lS&t%ã
+zDjÀ^2ÆXŽ`:lŐ/ñØ*ð¬jkzµªbä}¤ƒ¢¶ü0Ùțƪ4nÒ»E¬^”9AúžÈF‘7³íį‰9"ñ"0¯Îv“ò}Õ`£ˆÅÂܛ{0©0)F^á ò¢±Z›´“ŸÛ`’ó…¿ž«?<0‰^©ýD,]™DGâȆ¸M=^˜yw…ôpЮVH¿Í‡Yì\+‹RF‹ù @–3 Í(õ^Ÿ"ó3šN¢ë¡'*’–Üg‰T‚"›gOŸÓ,„·C_zð‘ómy²xvÊâhÅ2¡’"©à䍐!n“ÖsÆLg ZS«›b,PÑ\×
+CK½f°QIJÒ¶vÁç©kF$š{âd¢È›xÛ|zÉc¯†à˜
+E¡6ÂÄۋv6#g²‘&wCó|7µYú.ˆÍ•øœ(Â<x2dÞqGt¥ÑÝù6Ã{ <xؔ|¾wâÓgÌfó2‚×íÁˑ«'-²E2Ý2µ¯´ØëÂË-KšV¢#8SɕjzTÍÿõ`jAÕ×ëëÚ-˜ˆØ4§CÄÓ±’hŒô÷Æ"ÁuI«MTy[ÉÞ|ų¯æT‹[í'O—“·¯æY{ û_~§zîNJûu\ýxV®Bb¡…ªpBßk(RÛë>¯ëq+:›hÛJ•÷ãJ×XÿO=¬±1jFï›È—8VêÝ
+ˆ¯ño³zInúmÑËÆÂx ¸lÒ;‡Ëícõû”`ceÖj¸Äœ \ºnå„°ھ£Ù÷QîIãrtüÛ¾ôÎb< T†•í÷Žà\ƒ›ŽÊ¸é¨ òkEåvº×ؓ ¬,V+Ùwè¾9@ô°Z©9æ+U޷¯/Z‹=\.L ÂNpH<+??K6Ð%LN×ì]·Ô^55ß¹œùšä9ïO/''HÁ|ÿ\˜Î}G0@“¬Έ³£y%êÔȃ©3m ®Á;Ó²1ÂÙre’övµñ̀S§óCì}”å@î7ÔL!d{ûÜòÑ7iÏ£©;¡2¬Ž»úž”«8©·öÏ vx\GJ söÆ |»‘Çkï¥ç½0I⚏ÈøÇ«?;Qv«þì(²¢Q¹†,ù‚5ÕºWèCFZìCöáw·|{Ø ߉m¬!ªd;fÖ Ì²$Ã&ðª•e/®•]EÏ{í)™5*'[y
+põ|#\d¥í.²å‹ Aoß$Ø>ZQ§ŸÉKI—¥„Ê°Bæßñì1ù.OˆäèØ\º‡1Å"=fêĕÝʕÓt5Ni0kM¹Ò˜Aù9 %343’óqh„Ja8Gɑ0@“XL1­v¥6ƁPVôÞ¯1Ÿ@Æÿ= æ #î„•lç´qáÿŠæ#Ιó„Õ_»#“V·çĬ2÷õvU¬x{o„QqmCç7ñhãÄUa³ýþF"3cs oǓŒ| €º0¢î™ød͙ÝDøÌwø5¢ðé²æŒ\"|5
+'^Ù³ž*/‹l—fŔǕzèÉÙB-Áù^JfÓgŒº$íšs+ïŠnå=®”t¥.VJo{󤜸+·òpŒô>]±KížÁ
+Ãdµ¿†Þ¿$~8ÝÊO´ûú%~ð\‡Ä&„:—z· ¸„Ù¬ÚƵ0§:a°¢r·.ÏéÏKòŒÞA¼Yԟ¡½®=vž‡´rBeXýÏ"('o1¶«Oú‘¾z¹r×Bp*§þÔ[E½)Ñ5Êø‰@»‰WºK‚„Üè±FhIN|IµË¢†Mh6ãk[u@G0¢n»b(Ýf“³kÛßî–L;.
+w~~ Âw•ªl3éå·Hizù‘ Æh…:´Ön“| dؗNÁ
+„Ê°B~dzȼr›!B×I·ý¯ÈÉ­)Ùÿt˜®É&žðÖXd¬‹Œ:Ao¡:•Ià㠉gáÊ$¶zhZö#”i0ÀcÄ,ŠüMFYPVD³ÀÔ-µÊkqKA~­˜•ã=¿>q»‹˜EÞ<Qìh-4òÂí;ýT?l@\68fß±ìr»Ë¢Œ}Ý7%o‹ô*ãëº‘ëZ!•Ñ›¾dæXkʕÆTágŸE3Ì6Jv zuIà]—„ñA™dìB?V+âv¥6ƒN·Õ† àÝn…j6֝zz;¤Yw[Ñl‹v'°g–>1yÞÙdƒ÷N²î½Œ@¨ «íú'ÃþZ92:'.3쩹®µãj­±I=¹Ž*ÊÊöD|óä³gğŒÞ’sZiw‚ØG½K°2—ûr€«À B²Î¿ƒÅ7­Ð×ì*kl¾½5b{bØV˜o»Â’Åðù_y§–éDÖ4»ï¦k‘ªWyÊ©›”òKƾ%AºmŝÄÈÀx´úx‹BlP&Ô=e²]ÿIJëæĝ£b×er<}XŒ5HË!''öN)X™Ï=¹²’×{›—u£@˜ÅQ‚ÜY¬˜ëõ¼…Â5(ë½%…Ü‘xŽ•dq|ýƒp7 Cr
+Nvuõð¢kP¦ô¦›
+à¾Ý†C—ÅÎ=ñ½8ÂÖ©,¡I ³Že}´L× ëk.–5 ¿Ê{ÍçŸV¶ºdù ¥Y-ßQÇ.¿€={†~O'¾0’ˆ®ã[ŒV\¾Ä‚Yµ ó~‘ÖÂ=¾í®jzøìªï­„%ý*)GÖ¬X&GX@µ–:$'Ü-ûâ%œó2µöÊÌW
+U½È¸5Ô#­P}[•¿ŽW~j'Œì¨
+Èï›ÑO³‘öÞÙ~šxÑÀŠñ™òxÒy}‰½Ÿî’Ëõè2›˜rÒªa›qŠøÇ.Ò9GÈa\}FáCqIá;˜N±H÷rÂã+*é#bsÐ=ƒÕ!¢|¬þŒgoϬór†ÕâçÝSœì5»µya8aØÄZÂ|çÄǧܯY„šW=¥¯5›ø¸éVônwÁCª}®”ê„Ê°bÌ1žý-f
+vÑí–$s9íO-<˜Öx¥?؋jôG‘·ýh‹êÇÚ8÷Qmë=ðYˆÜëڞ¸
+ȾTƒvª{‹ÈMÓ<2ÏmD-CH¬ZÛöÛÑJW–·ý3Äx&6]y=["ƒëbÔàòÔ¾€)¥âTIêÉ+ɺ½Q^"j5½¼!ŒA‰‰ô= œÇÒ98¨È[‹¹@u—d¤'z`~0J`Vä­EæÓ&ƒ7âëx¥v‘)kãx q2ØeD;™ƒÈˎÐvÁÉ"•2örcŽx§Y•“ž]Q`•ŽÓQ„¼Gi›~ù⊔Þ9ä°hK»$§lHôF % =‡˜ iW}jВ‚É¾˜e>Ž°\3}V-Fª>{dÇE­S¸'
+Wp..x/MâxNy¹žòr̊ÐgÕ²H¬¦²„d¹c SÀrj:ôOy‰¨mž„"<‰¿yó¡q A‹Òtþ”›ßÿȞZB?Qbû­új—±?dƒu2Š¼™·ÌçG-<†f
+¡‡˜n¹*ðÁü辒‰Xµh®öPÏDµ‹Ëȵ4B譝ßøüâø÷Å!¾àÒK1$Eèjý)&ž%o8-ދ*²/beÎX˜}U׌=Þ·]ÍXãÏÈ>sÁ+5 w
+ñ’1Ä2hZžgÌôÇý-EȬZח?âsºž1lOý¬Ój9ì(žÅ㐺‡$·[Clç4-[TÍÖ±ê6"2»Âîo­ËPÌ~ŸÌâG
+ûõÝü(h7ߎ»´ˆhùQKKT~—€àUšgÐR„̪¥%úí òlÁC"ʃ7Ëä»2 åvûqÑRºJXø[BÕ&ßVDt€PKˆ00N¿e>ŽGG
+óÙ´,Ró™±k\Ô·0–Ióù’Ù­«}ÆZZ@PkudìŠ0?ªÅ*³G¶uj)Bæ¿ùóqÖ…"ŒTµ˜Ã˜A°T¤'0OtZ Öôv</EhKµÈŒn¬ýG[ÔR„±£?ŸÐ;Æì»iuMBëA› Dt£–ïîÕ_9=è´!³jéDúöÇu¥óPòœêµ5Õ*œþh8ät
+¡‡ÊLäԘóùT¦óðԘCN…;Ÿ¡ÏªE•™ˆZ§ÏŠÐCeVk5Þ©í?õÆÚ;Äç‚“oŠP¦L<õÊt2Šü‚åVºà™kýù8¤]ÚNf¯œ¼ÌÄ:&4¿”Û³‰Z^B8²"‡¨—íbéñZ¿ÿùß Â^ŸÅS„TIyOe2‡jS®{3áïUß _ʃ”Ü# éºg>ÈVÂ?3…´©0?ñؖêQÂLlõˆ|Ó¨ÒFD 'üd'“¬ÎÈ:fÃÚ= ƒj˜½B™2æ5[w2ŠÀªª>’|<¯öĝ´"ÙéAƝ4h涉Ò*=uF9)²‰Ö´åâ*óo­}<\örqTŠjE’¦£¢Ì¢BÓåîNRcvwÒR8hìœMÅÈXí8:ԑЊ£»§4•!¹¢=Ú:Žtõ’¼Œ"”éÒîÈPÆ(rdyHIwC 31$žáe&^§9;™_‹i,n cŒÃCðº]m¾||ÚÖ;HÔZIƒkªÊ£’P†gúRÚL£.+ê·ù
+žı߃Âö"h«‚‚­¸¸J_ÉT¤àYVVã≱XL䔐ê¼qâ–¤vp£@NŽç$0UžI‰_›¥
+ˆÌ»å*ɼۼ2æ{@‚ÈDZ@tå‚nŸT¼ÒÀliÁ_"ji#‡0¹¼ž¥"B•IX=s•9<ƒŒ"oæ-óùQ 7øcù|Ãv4µ}%ËÛ:;&]Y,7ÆB‡ÛW¶Œ…Jc³X"0†
+o‘öˆØÉÉκîK;Ü­±0S ;”ž¼nöl@n gÕ9fT¾÷ÅÜê>ۊ‚hAæ ‡ÆU„#Ö¡–Õڝ°ë>ßé§ÞṗÇY×óßÌþü͖UeBžsº4¥€å‡ëYÜé:E^¼[äó£Ò9;z7¼/®$ ÁÔj:¤d禑-ÛßH{Ü—±M>c#QkO.ˆµ¶Ÿ kהúz°QUléeO†*ïŒé¹ pÏɊ Õԋl£²ø¯;#k
+Ã*Hi ~ڗ:¦†ÜìKú?\E}Oršù0 REB2N’ä<ÝËOؙ~Š±>‘|Èfȉd>svúLZ4&´œç,õu,ôû›U,>¿xXEz¶Vm!ŠUä±1Ä#y%›ñ•­Õ_´ä›Ç÷ÁyŽÍ
+«üø·Ç±
+¤€eD*E-¥F&7a&ŒÉ,5:åqã=؆v¿Õ(©nâ­Ða·ËÆáyñ|~õÂÜɝ™IJJ¿+ô;±Ðñx6GMOIõŠÔkڗWõ§‚1;âÑ¿óñU8³!?,TÀj¢½;
+@ƒ±éþݨF†J’§“ì¾Ê:.¥-ýe¶%dKÝWq$ã<PŠwwˆ¸Ê“˶£«íÍ$/Tv¾º2˽"¦[•Il<ÔÃëÅsãq¯BÝÌC}à>…ºÜ¼5é¯$÷·ÐýmŽüJk,¾¦ÒtǦùš,ÒüŠm6'8š'ÿfžèyS_8ґl“’T¸"oFˆoªW’+îÈ~9@Nk«øFVώ|‰¡dc:¶§ÆS-«\ˆyIy‘—ls(¸_˜…'F·-´ žlá‰5µtŽ Òñˈ#½ùâ!¤h>Ǧ<3|ð|~õjÏUäþ‹†F¹l‰±„'®¢­t\ûóq$Ú짗f`vÄWQî³8— ÚòÍìûóåUÁ80
+:ÐMCµzŽ9 &sOZVªÇD˜@–A,Ø7n`Ž H%jŽ@
+n¾¤Ž`h·1DôK©
+S—`h©¹9"L3-I‘O/îÅ’öœ3R)¨°”¾[¤r¦Â¾WÜß¾_«î+wtÿÜãúðN]c]ˆØfFjÎ#››
+.fÁäGˆVaŒ¯ìÆ«µe)C갛?><))ت=ð8à<´ŠynᡝʍçyÏ4q3N¥µÂb"Wös•Çùñ„¼š;6PòP?Ñæ KmæÅL6ƒU]´1D2Œ^'Cz Î2çíeÈa6¯“ó|®=zÖ3¤®väqÄc¹—çCS„ è Ç|{r˜Íë¿ò¡ê€¤BõwtäyÑ-8H°Á+†úx°Q6‹zî ©é%6ŠôŒXÑfCYÌË‹ØUJ|QC\BÔxË=EPžÞ$ÃjÌÑIŠÓ@
+Ws`R 0Ñ:r‹LnÃL…¯P'±.k3—ƒ?HÇۊ¯ÔR½§È; âm˜˜×62:µÉõJ“ן¨„e,×ÍËÅø¬C[Wäö’´îJsu¹¨ãnÿ¤†›ÑR(ÞBW䧖èK…žGh©«SÂk¤êõ ‚›º­8ÖË·º'çýh†@çǪ»à¤ê¢a¿òà°T~mÀeó®`ë$J×Ä$,,8V´P@9ŽË!ņî-–dz, ‰-\ßË`;§f¾¯¼ÜÃÓÂ7=¶¸\
+Ä wžwø®•¡>W‘BD]Ní‘gã±<8œí³–4æø³awá€ËÐ÷tDl&ÞvmLVOÁFšN40ÀƒPYlcŠ=hƒöÕj4éH§t¹nÔ/ó`&«…R@i–$¸Öfäò‘»¦b՝‹|E>ÊCÚ£ Z~V@ÁÏ;. åKõLˆÌÆhcˆð¼¿x>¿y5úo‰W¢H‡pmCnÕÍ11À-h2քÄúæäÏ•'‘!\i×hY±{4ù"vCß®¼ŽÀ_+Š:ß?Þы÷•Î
+íü09`D´ŒÝÏÃE[*z0gëT£¼2ÌØä¢gŒáŠmÆv·¶/Í~s…»F…‹ÃyzL3;ò ˆ…Â`{qeBßê¨`dáF
+¾wücb€[P2
+ERl8öSäöÒwÖEåˆSÑJڊT/}ŠdY."Í´K©xf¤ÂO¬º!?:OIڀÆ@ç;¶©EâD“ \·0€˜¶¼âJÔ)…&ߝ“nÐHsÏ},î|ryô(YHj›’–̲!•93iO·‹½`ª®Cc€ÓpúR· Ó@žÑ‹/¬U¯ÀƒÊ¿×««À VÑs"¬0Hý4>3—€ïg J)@(d
+‘“5'‹-¼†¬©ÖiObDé—ôd3caE4¡9;c,bãž:’ð2I¸cÎ$ãJUÖ;5ó"•E©,š®Ò"<æ…]¾¨S‚lÍшž¤^¨|p?w•
+§Üu}J#'’¡²Ý,™%ßÊ2gté ¢é©—f£Ì†¬^9¸Òcb¬|痐›1;AtQžæñÖ©ªÓ)_ )Ðȉ§Ú³R©\¾ŠèN¨“%,¼ŒÜ±Í«oÁf;¡€9Í­3éÒÂf¸Æn^Œ°ÍƒxdU5oMñA€n$JñZ!zv±™ /¼z
+oœÚÞIJ¯.ëªX%ÆԌO@`)¡€î¯ºØ„ÕÌIëÑÔ¤áõ8Ç[']@ Wò…ÿB¬4²ØÞ [@/uùei%pR—yñ€\j³½4×%¹|灊Ê{^êF)¢Y½t=ÊlHtWûA<²Ä±Ý\ÂoV·½@rJO69½¥Ñe
+‹ZÀypGSÀâà
+ø9ª6¶€õ,›n‘/ÄB#¡!!Sà~¦€÷c|0<Þ랸õ™§iWn§Qây…Â;¥€Þ>h²ì{ýeî†*ò«×úSºf›œÞRfÕõ3X§äDˆ"
+Ph¡T¨À 0̛Ÿ‘¹×"Wؼ¤–™‘ÁRÈh$ሺl•ÓÀ’A¡VŸ°Øo»Êì.ô ±ÐhhÔÜph (·îº‰Ùhè®ùN'ˆµ¨k`ă¢8DlŒ¸\9ÿb¡‘5AHÎÔÙB 4®á<i‰¾ÉzÃ=mõ²d„ÙL¿\Ü„GòƒTt[.ߚKθhn«ÄDIs‚u…÷Â*$¶`°ñURÀÂô«äÎ>¨ ô^®C%h¶äšZ"‘‡pÊc-‘Œ0Dw[,’ð¾ÆV¯‚iX`NØ!Ï+&º™P–³¸S|å=,²¤Š‚¯\cP`x x]©µ½ñ@i÷ùÐT!¥BáÒQÀLræVnˆ8A7ÍÆ,-]N ¤†Z©®šQo²œ
+H§Xx׸˜¨c4@Ýäµ­ÀïkßP’kˆôy
+¥yaklõ¡Œú y7g!0\ËÍp§€«œ“x€|4I0þÂ\óŠn÷·æm2ÖÔÖU `èaÓVñP@clñÂ;íÖþ3Ðëd—XK̔¨f1®\ºm76©uGqŠ_fæ݁ “‹³nk@k^
+õØ@ï͙´+ä'à®jËïf¡ô %s³8@nÔq‚¸˜1s2[pŽ
+KD÷ì~ÇGi¡hRù{Za±5A*ìmB±ÑqŸ²iW™<ô±3/KGc‚a•ÝÉ(eØ1’Ëð –O
+ÝÙq[³‹Ä[*’ù¦#Õ1?TÃÛÐö½KÚ'-#æ5 胏Œå°ªáøfc\ÖÎ؟_àõJ#uì ÌÇVz;2ö‰ <ž2»‹ ~(Ëö. m8}*²‡v# ¥Ás4Îm­Íé{4ëHÌÚmZDR˪[öbŒî #æ V0<Å23b¤`ÐéyÎêó}IõÚŒ¼33¹}¢ôdw†½ d¤Â¢R1g²$»ê F
+Hæá÷àôœMßC:f÷žN9àÞ#ˆ¼G¤ä=Â+ï9w냎~êhh{ºÑ62aŽÒ÷¼C¼´’ÑwÈZœ~o ßRèýÉTNü–àBáÜ«Ž¿lG-¹.‘bΠðWº1gzkv^aÄH¡zæêÎ̽år»KÀƒè™/Ôæx¡¸ú¤†}Š #­í¢KqªÛšžTJ¢B˜ñۚ»]
+îŤEKɺÈÌÎ=ÉSÖ?@rêÖC@`qwïAT5âᲉ®Lߑ;Ô Ú|Y„té;a¨J¶l„¨¸‚hÎ[wI†}&c
+¯@™s:§,R»B¹g_q}őÒWf}ՕìÒY{ÙåáA4Ç-`®ÙZÒ\ŽIѕrB¦}…"RÊEJ¢[˜¥”ËíR¸ECEâZž´’Ÿ«4œme®’‡ŒÔډT0ŸÓw<©†¡ïuÖø½%š+©D7k™Å¦ÜìtÁkW? ¹3ÑÝXõæ.Õ}®ÏÖܨ¤×e-Q«\ Óûˆ¯5~ôF!¤íÂfÌÔ÷²º©¹ïÖ(ŠÁñàLĺâ+L ©1›Ê@gR.¦2”˜0»îrå‰år6U˜L}bÖU¾ ‚h¬ëÒÊ)s&ïì`dW³Im˜¥¾ ¢g¸zžƒè]eç¦9CcVw<Toûuf#Ê;OP*„ٍ‚ŠbJŽÙ§CɌè*KŠ–£*È;óáÑÛÉ|0>ÚÄιA=H Uþ§|œ¡÷Çÿ[þ|!ÛtlÔæŠù_îf¶û’‡©Æ®±ËjzIX:[%j‚£(lùR¤cÞZISóX5…B²ä´ÎŒÝ¶B¼=+¹Ž,R_Šè]íèRDI‘i;(2ºÝjÔhZBbL¦Ð*r
+­JB«Ì§Ðêí§¬ª†ŠÐ¶b
+­\%¹W‘1»wnÀ<ª-3Y„(måmQo~Ð2‹¹¹‰±v­¨ñ^ojÄëê!3w3Òû0%ܞažd ßgڀ!ÀÀHAªÌ4y0ðçv¶Fe³a”\%êé$`cÛ2 t¼o˜èëhOø¬ƒwt)jÐüG! R’†—¾ã"ÓwªKP Í¼0U£‡Š`Àît>€è<÷
+!Öª­¦–60b[@IcsMNàʤ9ö®´2
+/À¸c®† b~‘+jS¦—cèU€/%<j*Ũ5&N«$V”5ž‹DfÖåé/:‘(À Tl¥À8|LK1Yâ\‚fŚœ –³Þ)'Nc=Ù)ú¥€œhl^¹¥‰½÷‰ˆÊMc BgR€R¶ ë™ÐzJ;ª^„PwF¤n”š‘¡4[Zš@©ïñÍ ØŽÙQl€Å"r¢XH9ŠåÖÅ¢×1€ªn‘Éq¼…ÔL+F:÷
+p4SZEëv¼£ˆ^¡¦ˆœ¡bl\”ÞÚw äú*Ԍa6joëߦšü^ç{´ÉOȬÙ<ê;õ?µ\+ª¡œ·>‚žÖ£“ÂÍÓ_Ît@f¶µI‘ãx•:±¡Ä•r¹D¥(øíAÓíÓYó ú¬æÎÌO—½1a&/ÙDhRf#ë
+€ìxæž)Ì<yî 0}¶íÜÒçšýÕ¹@Ž+ÙÀi°úÇNȳ›äZU–âΖI쀘fwÔD(Dßµì>GCÕ­:Tɔ}U|„ÇäÁžÉÁ¶„˜·%9„ŠTuRè“)Yï "¤ö]OJìŽGâ
+w%Z뀄ÔYŸ¹½ÀÐô†2wfð뛖1›'‰1åIjºó$EŽ**up¼Töxm*1jödq˜!–øö4•à—X‚¼w7}E$³
+µ×bƒƒHª½5Jزb¥€“:PÈZuw!¨u~¨ž›“î­Ÿæý¤x™íe± ~­XB­wÓTcéB¼»j,“ÏHv"<•º¢«S«Úpú"úT P.åșb¥ªy'f½» ͞ôbƒÁËüÐQï¿¿
+r/~Ôm‡G¼Ô·T¥¹]T7ù©"É >Éߨª`ˆ±r„µqÆðÙJµ–¡%:ä’úŽ
+ Œ\RßRэ墺ÈJ…šœçŸä?¤úAî¾S¡ÈäXRùYù¸…6CûB·«‹é>öBuIm*Ì?[P¨1‚@z(b¥¾¥
+x_~üUÅHK«RD ™³\ˆ•úŽ*À5¿þƒªt́˜â22=¼báöó[,x©­U îDÉ]VÃyÖÇge¿¥¶VrKš D×ZÕê®D/5ô’ÚT™f‡f©Þy †KŠƒõ±VKõ¨/…ï’Ú¶J¨M°ƒR=½ó —”7{¤‘«¿šýiä[Ê?àÀ’ñúÀÇsn)ov¥zšýaä[ʃR½Ãíú[ʛ]¨^Ìþ0ò-Åf‡@%U3–£÷hù–b[áµ,°ýÃT¢Â%ĖÂvÕº!úÞPJä…8êÊ-%ú>”È ±Áfzó´¿Ø[ˆ.¡+ÊËg^=ëiÊ7s{©+žð¦²F×ÛoVòBW¾Ómƒ73y¡+]„éöï[x¡+ÄÓÜo÷BßuäƒàýšV®ÈkG¾Žý­¹› /­ög¨0@ÕRLq+f:ƒ1—©.)6úÄMÚ"¿1ÏÉHêî/ÅTþؗ ¶§Ü‚Oò¿N/FB,ò:½øc›^l7¼Éׂ„XéÍRö™‘†ŠÏ<Oł?¡2¼¤8æÿ ¯’lInxß¡/ÐùR³t ï\ßáÐ@•ùÝ«ÿ3
+ò:Ê~‰ýß(kzƃ|U>œ?Ÿãô¼*ßF¦ØØ-"F6A¼Ö¡òb"*öT|’ƒ*†PB ÙT{•"¯¿B,¹MƒäûF óòNZ"íja8-ÜŽ fAòvÍ¡uEêµë.Zz
+ó–i=ÙxRË"Væcxx¬P®«³.ˆ„+´½Íw:„³àÉ+·ðÐAJ–#q¼‹io«z"äE¥!¡s1b*ñ$VYr'"*Ó®^_•ô 3+Üž¼‡…'À<5Z³"i†\e~càJ½ýBÕiüú÷ïWøÎ6GˆHdÐæSÖtžÍÌ#[¢U"ÀSçtÅ­¥ŒK.œ˜Ê[LNF5…zу“„2Wœƒ%^xEV«ÌX¸ëFú’Ùȓ‡$ÊÌ ¸(Q[˜Ð}ñ B™z¯Vexˆ¨LZ­ÿM‹Ù…A´øWÿÂ,<ô§ÂçhëÉk6‰!Xƒª쀷ÓV•”2¿‘)ƒòV­ ‘Ö®œm5F³i/~³e6+‚¢4¾€U°Ž­é”ÖúD:C‡ì¯Z§foNÍVã§d+p*¶ñF*¿òJåWÛRù‘ÊO-©Ø۔)ÏÀ«Ç6Væ«-¬WÿÔ8eö¨]”ï>†C¤«'‚`kÝjµÍ¬ÛŠ®È)dÌ|¢¦bd‹ÜÍ]Š ŒoĬÌ ä›á–R§vÒ)
+r|¡í  „ä/ó1åœþaš‹–fÉqX1¥eÆy†Ó&ô”HéÄÌZÏvDûlŸ§C¨óÖº1"•^ÅÚÏ㈒ñ^:"8à=Üy¢¦¤aPDºÆ›•¼ÈT ‚µ]1€õf«-Ò̆ïŠôÛûánI”?5wFêÐð…fýÒn:ÑhŸZWì®j ’ˆÍs®|†äJ‚ÆRüBFhöZ‰0“EKÏCSŠÌÐڔȗ]Vv›”Oˆ$ׁô`³r”+¹ûM7Ú4=°è™…Æ ‡Çh5¤„muP©` ñ5Ÿ:L„1/Íeò7¯°È‘Êí®u
+ h5X ¸Ÿ«94ºO%ãíwFMd¸‹M¡áçj.‰€²„tµäx1FH8Þ‘”¢£¦‘Ë¥q½í]«‘L—KðÆ.&FDžÉ³|ޔ°±Õlo)ÎÈXlp­5{ ‚è±EIÝ^ƒàØÑ]‚ Zð+^
+N‰±¹à‡]ñˍûFÍC==u¶äbTç2Gá£e‘ù
+³ÓJ²ª’Y±×_‹Üë…[fEâ²j|㷇‚<µ6²[Á7s=2ÛÃYKï]êsó¬-ÊÓÀ\ç¹ܽÝa|¨Egٞ¥AæˆæµQfÑ¢Ï_þì&²º©Æ§õ‡­þà-=×øŽa{ŒS™~:·zH„§ ­£Ä×¹ódޅ×D™Eë'&‚8{·ñý÷ŽŽGfµxËØT÷)ˆ <¯¹Ÿh†QŸEKÏ%̊ˆuÕ„Ìôçc¬óDô¤ÃÝé3>¦dÁ«±¥>ÏÒr{.•
+,•V†‘Ài—JضÀþN'¼Ô«((y.¨
+;k4ø-§†žœŞ„Œ5ÌS `b+·Í7HôfÏFà›CN¢"îpõTŒ b'ÜX•ª½‡€9/¯ÉJeQæ‚d÷ÖQ­Ž ²8Dd"SYZxۃÀ;±Ð¨qŒs­;Ah* ½j³ZDT&í¹¯4˜)côJå̼ŠÔõóCY$A”F- "B£ZhÄ1ؤ@iíÅH(_"îI( cCÊ ¬'‚¡²5͓ßh¯ÕKÎÀ‚ÍêE.¤w„ÞF4¸áÂIDeŸÆ¾ƒˆ ¥t§4ðíë i×m½²0š¤QKBC„4ÔB«h£ØSáóHí
+aFi-Z"*“0.»z2°úJE„ÎI¥G‡ˆ }ž£Ivoó…YxÔ:ªkð2‚0ÝÖÀbŒGÌqQäI,eòM+^ÅM5qÎ'Ã>‡ˆ1"œRу$iUIbEæpdE5…åÈ{seAJfŠ#"×1µÍ5¼Ð
+ -,Q¶`GŒ8Éù`T3¬(À0ˆ}Vð–o›ÄŠ¨¡Ý³;™ŽbMÝP„7I-òÄå¨ LDæ»Þ1g´dß zÂu×bM¡)jÑÖ˘í W„Z Ñ웊)]ãNF'3“øE ùX½uAÔV»ÜþC@%=[tú;Û4‘SBw
+È73€*OZ‹´a­"j¨^#6çŒ äÉF»Ë®ŒÅp$ç ¼Nj1 ÈLÃÁˆî5¡-"¼Œ¡»,ÃÁ±%H‚tq¶‘˜R‰Á ±"ÞøDòÕóp. ¢.c¥õϑ2|#»ÄíŠGéè ŽødÁ¨ÒÜ´1ߤâJ†‚ZK
+`p®¶‘†¡¨èãÃvmEԝrÅæBAeƳÊvˆ}cµŽ%$D'#ˆÚ—ÿ µ·X]N¾ðnZÆ°ÒÜlšP©6ÄD˜&ÔRž~¥s¿kiR€w‡1¨&;DÌRwvYõá»~‹ÃÝ8ºC-ºÓ‘£ÍU!" `G©÷½S6ë3µ.Zê³0H/7¯(¢¶ð_µÃgпã+"^æcxxö9µîd°‹vï¡ ª…þ=O¹R°š€†G”ôXB¬2.¹’bEœ0jܧ2­äIsÒ(vAJkXrÀœ•’%@¼£Ž¸¢´ŠˆeUêWvsdZ£…FÁøßT0Á¸y0…Œ¤µóÉDFÌæè •è/‰-2j1y¤ˆšªW,ݹ#ˆò ¡eoKd$Rhhƒ6Cߘ…‡Ö1@[&Ðo/2 ÇÒ온,Œiè1i,ÒÜp™0u·žYd™ÊkS ¿*0Y!¢JO¨Gf †ç°NYJö@ƒF‡È杮ªL,8iÆ&ôñ»;AH,J ˜:8’ÂH´¹”.Ó=ýÇzµíÄqÑ/ؘG,e‡é{÷c‚qG±±Ø(Š¢< ‚’]p ùüœžéºô²[Ê 0‡º_ºªòLR[×2²Ð:E„°˜šJ«À<{eê¦AÄãìò4•ÀÈ!Á,†T#oޗN
+vŒÉi)wbֱʧÎ%›ö#nÑ«“D¼G¦)w\¢
+OªÛG4ÍNÉá+¤Us±Ÿd2Í)fq¨SçÙ¼BØF8ߌ°\l°y©‘ÉÏÖ9<7¦è*gD”‡1 ™EŒ‹c²Z®K-s“öKÂå1ؤ3U·ù;BX01QÔí~Òª=ú5u5â±je«#ã×Õ½BšÁÌł͈ÜÒ$<„pÑ@Ê’v‰å
+ÌEŽ²É WÂSwW§Š±†n(FXpà÷¾5.Ÿ¥¨w
+aå8<ú76Öe¶ÿ®5 !óè[69S@¢ï^>ÜÙô\X~|ҙRHËsq$X²FíœFØ Ì@†½j0&”õ›„ˆyÄ$.à²+]ùáœñ¶wŠ‘L\‡­&¼Â^™Ç+Juèvf®ØTç»Ñ±z,˜Ä°ê:»»9’âb÷¼ãLJ^§·•íÂ@Km¬6ãe× Á®“l׌°ZF¸ Qb¦âtä€ðKœv
+*¡:®¶ÿ7®™rî¸påy?#$YÒq«v€8A‚i‡ECªÉ9wŽ
+Rz&Ñ]9»‡Ìw„òϗ&o/Õ§´Äf­¸/õò‘Tuåˆ)µÄô”[9{ÄkF8-tæ(„hغÄí’IŽhw§½œå²PbÚI°ø¹“+‡ÇSBWYŒ°"‡w®p
+}‹ˆúàš1nX®Œ©DÝOŒp
+„Ôõê>]biRHK‰˜Oûa[˜‹íeɂ´ð¼Dtµˆ+{9iôÎtÑPÿ;,¸6è-éd’#Ú3Á¤³‹­×ºî˜¦%w`Át¹ ‰‘ðn#‰!¦€-©
+ëßW¢å¯‡iøc˜FüãaX{n‡w+ôGv~0]µ³/—‚êÂòŒyîsXñ¡Ò¢G‘™ˆa‚Õã³¼®xpÔïWïþW»ÉÎo6«ãWv0Ãæý*¾LCý.kÝ`V4 Ë7»ÕFM¨àÍåêèìë“ï¿þötØü|vúbóÇêtÓ¹c\¨C‘ÜIH
+††vG õš:ˆ3¶n­øøä.—w5ÈÈe˜ƒm°7Ôßѽ»¼iÆÙj™ù fž¼}yÈLHAzâsaÂN‹µ4֗Úyôòíɏ?œ¾Ù oގL¢BÀëéŒÿ‹Ž_ùÇ©K˜ë»®Á°Ìê?Ó²iŽ˜Å¯óó·gëÓ³gòÚ¬û‚¼ÆùÚ _l•.ºm>]‡çòø™Q;P𠬙ð²Í”þb ¶vXh”-n¶Åšõd¦ÜŒYOÎAx~òF½
+¸Òê³Ð¤ÏÂm¨cÒ"MÅDFêÃ4ÇBžŠÇ,à2ey_B®-[NSìån+Qc’ý8‚À%§ia*YX&‰©"ÛýçM‘4d« ?¯IR#„k
+)ªþ\…CôXæË š ª„Lˆ«5=‡`8$¼žXŠM©÷@zÁ
+<áEÅÌš}¤Òà/dPÓôH¥ÁJn´®ó¥:ÍRn£Š°EYPÍ_•¥¬ÄHj"ºÏîmnŒËË}qùçŇ«¡V.–8›—ºÍ~9úîæýí§kƒ½çhwq}{óâ×ÍëïMK„Ãr¢¯ö½ºý4Üÿ~5l/î¯îMáíß÷Û뛫áºJ_Ä7¿ ?>^Üß_}º¹ûjøp;ÜßÎÖqŸîµ¡­¯N
+156 0 obj<</Length 780/FunctionType 0/Filter/FlateDecode/Encode[0 254]/BitsPerSample 8/Domain[0 1]/Size[255]/Range[0 1 0 1 0 1]/Decode[0 1 0 1 0 1]>>stream
+5s 4s 4r
+157 0 obj<</Subtype/Type1C/Length 929/Filter/FlateDecode>>stream
+GéH0ðH[¤«;¥=•ËfJ6ÈeEF¬Ãîü‹ù.ÃÛeŽfbÅ0²5“O•E½t²)Þ?œÐ¦„Ê MpîªsUk¹öN®|¡øóaáÉád*ܗöƂñD<H…CAðE£Â~m6)ì'ÉAµú/!’B*…û‰^!~Th‹Äâ©áþ°ÐïëĆÿ%®Šž”“‡HÙAœd'q7ñ“{TÅDGô„#d’ܦʩ¨ÏuGÒI,›¾Fý¶¤‡&c¹¶çQ†ÒpÌɅ7(È/è!o\€=ës6¹ç W”ˆáüÀȍJ!¾Ç°o¦E˜aT,Y‘@‘º%îO°ÁMöÒPúãnÁ­-ÇÑnE-o€“æd°Íõ8wy·[±‘†A¥‚ç^…×gÁ¾vèrå¸õ$Ã͈§¾ž¹eÒº„õÝ Ñì7iQÞ©I~FÒÃUãÚ¯cW­‹ßŸùkÍt#BõeËùÖÆ·<f|Cm—rvjéù #©¬uãàûÈl7ْX\uÈ;ðԈߌµ4ûô?ìÕ­zù’QTvÁ”̈
+žZ–ඪ¨Â߁ƒ |\@_WÛð´¦E.âa
+š(;‘õCN]p‡VIvQ¾ëb§Ä]ÏB/;@_¯‚ºo.Ãý0©T£)
+159 0 obj<</Subtype/Type1C/Length 167>>stream
+163 0 obj<</Length 1808/Filter/FlateDecode>>stream
+H‰´WÛrÛFýþÃ<R)s4÷Ë£,1ŽR%Ù™8U®T
+&!
+ Òd¯>i?gÿhÏ ` YÚM6ë‹lv÷œî>ÝÓÃÉfrúfÁɦž0b=§Þ;²K>o'·“ÏN
+2‘Ô뵦¨#3k-„U>2þ@Êø]P&‰áj^¥ðNá´×ËÉé÷œp²¼…2÷jñI¥Óš(F…Šhd¹›œž×†¬jÂ(—VèðWpmã_­<©WådÆ(c nWp»ü:™^ýb•6'Ëß'Ñ?ëNˆß´¡ÜãSáŒ`/ZûÓEQn¶ùìü.+Ë|K®öå~uWpKÝt¿ËÉÛr¶XÅïvšçåɯË'cD0dy1™^õa›=¯EsG.Ë&ßTY“¯É|þîæíUuú½j³`#8NµdŠ„/ZS¥ˆóˆV‰€-„à!4ȤlãËþQìÈ
+Ù«¼¬óšdUôfPÔÊh$áA÷I±ŠÝa‹éñ4đW_à8IUlîÒà\àÝäQ6 ÎÊ5©ùª¸-VYS ú˜óý}C!Y£oŠ]NÛċ6ñŽ*@g$ümsn@£{> ëâT©ÖŽ§vœ*Çy4¶ŒjoåSóáô·oükãLˆñ®MpýŠpÁÈ•y“}ª
+à>Nÿy2Ó»©`̑gÁ“7aùij¢.›¢nò
+*M•­ó]VýØõB4—åŠÆþ˜/1M6áuÚáFxŒÊ´Œåvòþ¿êwÌæIœPÁ©ÞÀ3Ðl¦³` :‹K¢HF"P&
+E¥™`ÞãFJÀ;ª­JÁ=’±‰¥3¡w+ÝâNxqÔcŠ?0j¥ˆ‚‘ÓpŽd5’é9 aš{\TX¼xã£@ƒ4"Õ°Ty
+yhhõ8ëCŽ:;T…‡öIdß´ƒ¶ý‘ò2c;ƒqšØñiïÛÚ«o×ÞiŒwP(Ü^àÿx-í6Ì@Iv23Š³©;eöd&ã2½,‹¦È¶8x›gu¦V¬@_ǖ?ÿú3™í²Æ Õ<ü¬âì3=x±!ùG•6Ô>E!ö êY>ö¾‹‹ØF…­
+(»È”ÁîȔÄ
+<yŽÖ Q’g‡m_±¼%.–Ÿwåï0}çütXÇ폽U¾¾Ç+,<oœšhNµ¨}ó-šüPÇwæ‡
+164 0 obj<</Subtype/Type1C/Length 1837/Filter/FlateDecode>>stream
+H‰tSkPÙ¾ÍLwcÀ™í‰¡­î‘€^>‚:€º‚l
+øZa…ˆÌèࢠ:¢Ñµj£‚¢«Ñì»UZº>Ðeƒ‚€ŽŠ Z )Vb¨”˲>")5§Çµ¹£k~%u»nwß:÷œïqC´„aÙ—»$.$ޒ[l)ÊÉÎ
+KÌYo-J^››³y‹Å¥JŒª×îòöP'xëшÖ×;^¯gåZæ§2¹–L úð§7ßeÞü„ðÅcá°´Žûbÿx0ÌïŽ,ÌË·¸s¦dO5̈4Î
+¨ö>¦¯K½DÏ'é]ú<|2ªgìvéÙ£ú.—9Ã£>l)‡»]>ì¯iA¡r[›Kßæ×ЩzÞYÝ¥j€Eœšy QOû`<œ Eÿ\0É÷wµ €,éR~XÊƔG=ÃÙÎ2†OVt§±N]S°ÐîŠPDYM î–¸PöD½øwæ¸ë_µØeßç0zTë†1Í¥eq`¢ºõríòeÐר¯û/•jú‡3ÞD
+ÁD½z"y䯛Þáò½É£„™oÃÜóÔïÐÐ*ÞÏóT£fº1;pÂý¼7A× ¾pVl8Üqò¼\¦¡ú²4p2#FÁ×8ËÿÏãü‹­Ã81Æ´!>G¾±%çJˆŸ´!%W)åtý}Šƒ:õ®R·.;tWÜ'֕Ÿ>vN¾^Ýzõ¾ôäÒêpðß°ÿ›‚‹²}]jM¢´pµuÕGJ7¯»ëÎýëËKTcj÷×;EzL]7Bè<‹³1"šj‚ @fÀøRâईš4$臼é{ÚÉږƒè®£P.»»ó­kß9hFŠK¡®Á¸ö'À÷Æ¢¾\FýÁÔô•IxcŒÕ&^ºŸÓ#QŸh¶ ‹/ŒN˜»n‘ÕM8e0yt%Œ§(ãe­«îøõ:tA‚*<랃´O¾ÃG¤ç7¸£ï>}+á-­6'Ô:50[œzðÞ<$]û§áÀo`¢ÿõoëþÚkß}”.ŒÙۈZÚ¹ñI³\¯0Ø?mmFȌs¶É͸ …¢~W5‰{K¶ï+‘ÒJ¿lUž¶C`2ƦõŒøðóÏm¾}ú䑊ã²[\:ª™5ïLR£a·ˆ\Jä”0só#†’ñGI£äÁË-ug兼ŽÎljdN0àš[®_Õ0_¨fM¦‰{ÿX³¯Vzx¶ôÍ
+166 0 obj<</Length 260/Filter/FlateDecode>>stream
+171 0 obj<</Subtype/Type1C/Length 732>>stream
+173 0 obj<</Length 229/Filter/FlateDecode>>stream
+H‰T=kÄ0 †wÿ
+W:8NéP†^ÊA†~Ð\»;¶’.¶Qœ!ÿ¾¶/\é`a}<Ò+ñ¶{霍À?Èë#ŒÖÂů¤œ¬Qƒ±:î^±zVx‚ûm‰8wnôÐ4Œ¦äiƒÃIˆûêø;$ë&8œÅ×w
+175 0 obj<</Subtype/Type1C/Length 746/Filter/FlateDecode>>stream
+H‰t’oHSQÆϝî^Wk–xWº¸(¦™æÔÄ-Êl…¥E ~hµ©«™6GYDXö
+177 0 obj<</Subtype/Type1C/Length 297>>stream
+NCGNFA+Europatchøø  ‚ù^ùEõ÷¡÷¦%.Copyright © 1998 Apple Computer Inc.Europatch" ú|ù‚cÍ÷\ÍÌÍ÷YÍíÑù^øÝÐG6®))8iHH]]mU}N<rQꊁ‹‚‹ŒErRòšN©U¹]HÎÞiíåÖ¥ÀÈáCL@i3:G§ÃRh®s³}·ø¤Äü=Š•‹•••‹”Œ•øV£Åüc™¸£²®®ÃÄϨÜâÕhFÌxžø{˜÷Aš Rcyÿ ç
+179 0 obj<</Length 260/Filter/FlateDecode>>stream
+H‰T9oà €w~ÅSuÀvC”HÈKšJz¨N»xvbŒ0üïËá¦êï{÷AÍsc´úáFÙ¢‡Nåpg'.ØkeJK¿j闃°@Cr»L‡Æt#pNègpNÞ-°y)«Çâè»Sè´éas.¿¾ƒ¡­½á€ÆCu
+183 0 obj<</Subtype/Type1C/Length 760/Filter/FlateDecode>>stream
+184 0 obj<</Length 2089/Filter/FlateDecode/Length1 3496>>stream
+òE‚òɈ"`(k³Ž…©]¢BŠ*ê1Ä¢
+îï ‰W~(¿`dïÑ®æOÎ>˜.SÖÚݹ¯£Ð}Í,¤ýÚn
+ÀÃß¾#ƒê”â¢}=¶þ}}U]Æ_¤þ÷ƒ‡:û§/å|ë¨ï¥ŸWÅYhäÿȱìÚ¥àŸ.õ۝Á£‡†P ¬ÈÖ¹Œ
+³Ui¡X‡IðcF"®HÛü]Ι«µiÇÄg¢XX…³xˆø îâCüwð¼‡wñ&q×Æe¼Ž‹8sÇNàc1€>@7ºÐ6ìÅ÷ъ=hA3šÐ€zlGjQ*„` ðÁ Ü(Fžù¾¦¯LÕ¦*íš6¤Ð<Z¼/?”7å›ò˜l“^é‘nY í2W.‘ÙÒ*-ҬΨwÕ°zUPÏ©/©£j‡ºZ¹¯ø³¸/>÷Ĥ‹‹bL,)0ƒ¯ð¦ñŸâóü3Ó{ÌuŠÙÞÁ¸ß1ßw¸?ގæ{_ś˜ÀßÊüeæ~/1ÿp§pô;5X¨@+s727r6²-72…¨LINZ”øœ%ÁlÒ5©*E¿j^ÀVeëÞ×Vó¢´±ÅQì˜[Rìø|w¦/scX- ‹`J”q¥¦eú\E칊Þu…·Œ„…cS)añQŽ{pÍHX±ÙÂn
+i!Ê0?+¡Þ£ï&ÆqœÈV¿DmÒ‰rµ–þ¦XŸKÌs
+oaáífÖkP‚3“êühnF
+s²ü΅kÍÉBôc¦¶r«0ÙžªÙSíjëìÕ2ûDkž™Ðš3ã ®´Ú)ìÂpew]UåÆõe%kŠ
+W­\‘“•aMIJ´èȬM¡eµ–r©”
+ø²”³bª·Ø—&ÒÄç.Y³Â¶4ǒ HëŒ÷@™áE;„*@wº<˜ÅTètÃï÷:KÄb{ª'#3Ãc_½*Ö¼eåkš§43#ÖÒ­&ÝhÉÂ^J'Õ¾8>Æ[³s¬ˆH·ã•Sö¹ËËÒ³r6‹ <]û½uërrҒŠ]¥êŽ½½}{Ûê6oôlªÈÊ._¿£î„AÿÒlë²¹Ëöæòҕö”d»Ã¿µ¦®eWmM0èp¸ŠQù@Ôí´fù
+186 0 obj<</Length 236/Filter/FlateDecode>>stream
+188 0 obj<</Subtype/Type1C/Length 695/Filter/FlateDecode>>stream
+u³9´°ŒbfFdF2)˜RØÇEbւTìo¤uQB×uz‘ðž¿gæ^Æsó^<<¿çy1
+k׊ˆv¯÷jGPÊ®Óë›w¯""9))jcÀ÷PjG2Œ³
+ª¶òõöv½EïvY¬¶V‹«YïlÔì6«Þätµ9]·ÝéÈÜDo5ùo9„CB‚ ¥"”‰P>BòÐ2$Cå ÀY¸?ÿõJ½²× %~&9†qQ6
+÷…
+àÕ"TÏûKY·9‚Wº8Áä¤/ §ÊK~–à‡£³Ø÷ ®‹2 œôO€X5¤½…8`[=Dsm³åj«C7
+Ž‹3jUÞ¢¯¶ô¶n†®”ÍeÞÔòº{ü9×\Ó©V¹0Äm`҆fKšY á¢lJÊ`’ò^–ËÇ®ðÆH‘Þ…¨9±¾Å¯+.ENó`„†žÕô‘ñâAvNéðJXf1¤.b×0‹Àk‚2Gg¡‹Ày:Í»È<å5’‡(™&„4ˆÞøo";.ªÞ¨¾ƒV2
+194 0 obj<</Subtype/Type1C/Length 2202/Filter/FlateDecode>>stream
+H‰tU{PSgÏ%¹÷F+©!{SMð&Š¨ ¨<$hx¨d*´­"²@¢PAÀ¨[
+5àÞ<^œåSÐz4CzÁTøUÏàmøŽ;_Ýà8¯½»×{ƒ¹rAôAê^CwËÚäÏ ¢q88-˜úŸC0¨¶À\¨S¥oHߕ•®;z>­s
+0‹ž9…dYÁ aÌFc:ƒ!/m4܅Λ¹ÿ íŒ‚œĒ_aô˜H‘& “êWȅ{Ü·ûûìAšY›–óBL%|y¥zYÀæÚðRÝ]g"§Ú ^n¼Ÿ‹:Œ=:;«ênmúâ–æzuáTw¼´1ŠB¢†£¤¤OAì%“T8"ìâFˆRüoz-@Ã,ú,"çõÍàøŸÐ´’M*K*:ÕÉW ,Ý{´ùzßÚøÁ*]"+f-Ì‚)'˜Ð¦î¨mîÑ]9×x½ê[9<bïî¹·²ƒo·¯ÒbILrÊÿ\Z(Çr¶zvE"N<$åêKû’æó¥BŠš´U ÙË%k.Ùß¾ÎÙ/m¢´ÐGL§Ó^1îV5Ü+1³’=1 ÍHÉ8&ÂBì6Blëxé8&«v uœ0KP;²šUO,OŒKÚAªXv¼Èˇ2WiRÁ4@H
+7A7Á4fC^D\D“˜W:ÆÖ;¨+¢ÙvµøXÜ®!,Ô‘€¥"™Â³ñG0:îÀïbÛg©w
+?ñ€»óGÞb`²ë¶P¼ %€ŒŸ3Ž.g
+QÄÎÈwèý z
+£_ÚÀÈì‚ívúµh:HAJ1Ó§PÀý±lU|üÞ]< ³=¯ Ö¬IâÁt„ƒ™!q>Î_dę<²öe ¬€_üÂx‘žSä V¸kÎ]„+$Z8ÁœmªÜw\×¼»:9G³¥,»p;oÝj©ù BA7{«úkÛp³üá…£ßk†KR{øõ>VjÑâ*ª>%¸1·“àN‚)䈳_( Ð$}¸á}>ŽA­l¹¸ÿ£ìÚ¤Ú¤²Øêèª]5»kwËaM=Sr°´®¬¾ø³
+0¨~>5œ‘óX³>„™£ù}©í|j{üéèN¹êAzSAcmwMkƒ£mÿ`Yyœ=YÁ L?öý´è‰Ó£O$³èZ-=9ýYòëÕü¥pS*¯jHØÝÞ¥»æ½ð€žÌ“ô¤ðŒÞùŒtÓ3˜A¿a¼ÃÇ.Dr;!ÃùMàQŸÿ*^è@“sÍܝ–´nOK/Œ kf‰š8,´H¥BÄ ebüD8þB£x2®^˯~¬B*ä’÷+†3&çÉòòw…&šüq¨½Ç
+§ˆû§hXπRÄ32k\x¯bÎJaˆÉ@€sÿ£?\ÀËöþ{ Pçƒß%ÀÂXVþàúnðƒäëßÝÀL8 ínlß]ÿ¸³þ>ôñyöïž?ÜÁnÿÝ R]9÷gÓÜß)³Ù~ùá#
+196 0 obj<</Length 7>>stream
+199 0 obj<</Length 245/Filter/FlateDecode>>stream
+”{PZ†ÍZo9
+4wËplMo¡iýŠÁ)øv¯%{,€~x…^›vçòû':ºÙ¹ŽhÀ9(ì =¾ ÷.FºÖý9ϋCدv¹¶
+201 0 obj<</Subtype/Type1C/Length 608/Filter/FlateDecode>>stream
+H‰|_HSqÇ¿é½s¶nT^ÿͶA>”á¦TJH9×L%ó!þk[5š›\ÇÒDŽh6MŠ
+…zŠ„v-!2nD¬ @Ñð)èÁèÏù]Ï.uØcçõœÏ÷Ï¡$×@(¥ûO7·:yæP‹?õG^g8äó‡úÚW®F:¢~é’GÚ<³2 eE¹¬Ì\ˆèÝx°ÑÌAí.hÚ=«æí!JkÚ¶%<ö@ŸÝcHŸ¿Ç#]³‡/ÛOƒ¿Ïî K½aÉ „CUÿsԇ’rrT“:r„4<=,1%Sdž¥7è3!#Æ'Ôç2í…éUE§»B×@Ru$_Ë4¥À¼’ÃV77™L·‘=̤ÄV¾:&¡€¹¬ƒ(×oB?8Ögêc6…‡½·Ý¿ÑbÁó×1„UXÇqè
+220 0 obj<</Subtype/XML/Length 3541/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Acrobat Distiller 7.0.5 for Macintosh</pdf:Producer>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2008-09-08T16:12:14-07:00</xap:CreateDate>
+ <xap:ModifyDate>2008-09-08T16:12:14-07:00</xap:ModifyDate>
+ <xap:CreatorTool>QuarkXPress: pictwpstops filter 1.0</xap:CreatorTool>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Terry Boblet</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">MAX7456 DS</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xapMM:DocumentID>uuid:cfbf5de4-7dfb-11dd-93e5-003065c68548</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:cfbf6bd4-7dfb-11dd-93e5-003065c68548</xapMM:InstanceID>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0000000000 65535 f
+0000049738 00000 n
+0000049865 00000 n
+0000050079 00000 n
+0000055914 00000 n
+0000056041 00000 n
+0000056233 00000 n
+0000061750 00000 n
+0000061877 00000 n
+0000062080 00000 n
+0000066933 00000 n
+0000067063 00000 n
+0000067291 00000 n
+0000073618 00000 n
+0000073748 00000 n
+0000074016 00000 n
+0000075697 00000 n
+0000090480 00000 n
+0000102160 00000 n
+0000114569 00000 n
+0000127890 00000 n
+0000128020 00000 n
+0000128299 00000 n
+0000130625 00000 n
+0000145583 00000 n
+0000157803 00000 n
+0000177540 00000 n
+0000185234 00000 n
+0000185364 00000 n
+0000185647 00000 n
+0000187567 00000 n
+0000199407 00000 n
+0000208862 00000 n
+0000226184 00000 n
+0000252432 00000 n
+0000264077 00000 n
+0000264207 00000 n
+0000264411 00000 n
+0000268810 00000 n
+0000268940 00000 n
+0000269143 00000 n
+0000276486 00000 n
+0000276616 00000 n
+0000276868 00000 n
+0000280882 00000 n
+0000282649 00000 n
+0000282779 00000 n
+0000282970 00000 n
+0000287637 00000 n
+0000287767 00000 n
+0000287958 00000 n
+0000291448 00000 n
+0000291578 00000 n
+0000291769 00000 n
+0000296213 00000 n
+0000296343 00000 n
+0000296534 00000 n
+0000300011 00000 n
+0000300141 00000 n
+0000300371 00000 n
+0000302403 00000 n
+0000303899 00000 n
+0000304029 00000 n
+0000304198 00000 n
+0000314484 00000 n
+0000314614 00000 n
+0000314783 00000 n
+0000319031 00000 n
+0000319161 00000 n
+0000319381 00000 n
+0000320374 00000 n
+0000320435 00000 n
+0000328312 00000 n
+0000328442 00000 n
+0000328645 00000 n
+0000333650 00000 n
+0000333780 00000 n
+0000333972 00000 n
+0000346130 00000 n
+0000346260 00000 n
+0000346463 00000 n
+0000353018 00000 n
+0000353148 00000 n
+0000353413 00000 n
+0000356218 00000 n
+0000358276 00000 n
+0000358406 00000 n
+0000358575 00000 n
+0000362754 00000 n
+0000362884 00000 n
+0000363065 00000 n
+0000365647 00000 n
+0000365777 00000 n
+0000365946 00000 n
+0000369066 00000 n
+0000369196 00000 n
+0000369388 00000 n
+0000373564 00000 n
+0000373694 00000 n
+0000373863 00000 n
+0000376734 00000 n
+0000376867 00000 n
+0000377049 00000 n
+0000379530 00000 n
+0000379663 00000 n
+0000379936 00000 n
+0000395133 00000 n
+0000398754 00000 n
+0000399015 00000 n
+0000403233 00000 n
+0000403479 00000 n
+0000408745 00000 n
+0000435362 00000 n
+0000435587 00000 n
+0000435720 00000 n
+0000435890 00000 n
+0000438917 00000 n
+0000439050 00000 n
+0000439220 00000 n
+0000441149 00000 n
+0000441282 00000 n
+0000441452 00000 n
+0000443745 00000 n
+0000443878 00000 n
+0000444048 00000 n
+0000446656 00000 n
+0000446789 00000 n
+0000446959 00000 n
+0000449380 00000 n
+0000449513 00000 n
+0000449695 00000 n
+0000453496 00000 n
+0000453629 00000 n
+0000453799 00000 n
+0000456334 00000 n
+0000456467 00000 n
+0000456637 00000 n
+0000459775 00000 n
+0000459908 00000 n
+0000460078 00000 n
+0000462935 00000 n
+0000463068 00000 n
+0000463249 00000 n
+0000467220 00000 n
+0000467353 00000 n
+0000467557 00000 n
+0000478905 00000 n
+0000479473 00000 n
+0000479681 00000 n
+0000479980 00000 n
+0000480043 00000 n
+0000480176 00000 n
+0000480392 00000 n
+0000484146 00000 n
+0000484279 00000 n
+0000484475 00000 n
+0000534074 00000 n
+0000535029 00000 n
+0000536042 00000 n
+0000536299 00000 n
+0000536531 00000 n
+0000536711 00000 n
+0000536844 00000 n
+0000537026 00000 n
+0000538904 00000 n
+0000540826 00000 n
+0000541115 00000 n
+0000541444 00000 n
+0000541637 00000 n
+0000542516 00000 n
+0000542603 00000 n
+0000542666 00000 n
+0000543463 00000 n
+0000543661 00000 n
+0000543959 00000 n
+0000544226 00000 n
+0000545056 00000 n
+0000545307 00000 n
+0000545669 00000 n
+0000545825 00000 n
+0000546154 00000 n
+0000546241 00000 n
+0000546495 00000 n
+0000546776 00000 n
+0000547620 00000 n
+0000549792 00000 n
+0000550024 00000 n
+0000550329 00000 n
+0000550460 00000 n
+0000551239 00000 n
+0000551507 00000 n
+0000551766 00000 n
+0000551965 00000 n
+0000552440 00000 n
+0000552799 00000 n
+0000555086 00000 n
+0000555163 00000 n
+0000555218 00000 n
+0000555263 00000 n
+0000555307 00000 n
+0000555621 00000 n
+0000555699 00000 n
+0000556391 00000 n
+0000556641 00000 n
+0000556913 00000 n
+0000557074 00000 n
+0000557120 00000 n
+0000557166 00000 n
+0000558045 00000 n
+0000558384 00000 n
+0000558448 00000 n
+0000558602 00000 n
+0000558998 00000 n
+0000559035 00000 n
+0000559060 00000 n
+0000559147 00000 n
+0000559277 00000 n
+0000559409 00000 n
+0000559543 00000 n
+0000559685 00000 n
+0000559778 00000 n
+0000563396 00000 n
+277 0 obj<</Subtype/XML/Length 3613/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Acrobat Distiller 7.0.5 for Macintosh</pdf:Producer>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2008-09-08T16:12:14-07:00</xap:CreateDate>
+ <xap:ModifyDate>2008-09-08T16:14:58-07:00</xap:ModifyDate>
+ <xap:CreatorTool>QuarkXPress: pictwpstops filter 1.0</xap:CreatorTool>
+ <xap:MetadataDate>2008-09-08T16:14:58-07:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Terry Boblet</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">MAX7456 DS</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xapMM:DocumentID>uuid:cfbf5de4-7dfb-11dd-93e5-003065c68548</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:f4ac7ebd-7dfb-11dd-94d9-003065c68548</xapMM:InstanceID>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0000568113 00000 n
+0000568261 00000 n
+0000568485 00000 n
+0000568569 00000 n
+0000568707 00000 n
+0000568733 00000 n
+0000568818 00000 n
+
/C-OSD/MAX7456_Breakout_v12.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/MAX7456_OSD.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/MAX7456_sample_code.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/OSD_Config.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/SimpleOSD_OPEN.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/ArduCAM_OSD/ArduCAM_OSD.ino
0,0 → 1,216
/*
 
Copyright (c) 2011. All rights reserved.
An Open Source Arduino based OSD and Camera Control project.
Program : ArduCAM-OSD (Supports the variant: minimOSD)
Version : V1.9, 14 February 2012
Author(s): Sandro Benigno
Coauthor(s):
Jani Hirvinen (All the EEPROM routines)
Michael Oborne (OSD Configutator)
Mike Smith (BetterStream and Fast Serial libraries)
Special Contribuitor:
Andrew Tridgell by all the support on MAVLink
Doug Weibel by his great orientation since the start of this project
Contributors: James Goppert, Max Levine
and all other members of DIY Drones Dev team
Thanks to: Chris Anderson, Jordi Munoz
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/
/* ************************************************************ */
/* **************** MAIN PROGRAM - MODULES ******************** */
/* ************************************************************ */
 
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
 
#undef PSTR
#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];}))
 
#define MAVLINK10
 
/* **********************************************/
/* ***************** INCLUDES *******************/
 
//#define membug
//#define FORCEINIT // You should never use this unless you know what you are doing
 
 
// AVR Includes
#include <FastSerial.h>
#include <AP_Common.h>
#include <AP_Math.h>
#include <math.h>
#include <inttypes.h>
#include <avr/pgmspace.h>
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
#include <EEPROM.h>
#include <SimpleTimer.h>
#include <GCS_MAVLink.h>
 
#ifdef membug
#include <MemoryFree.h>
#endif
 
// Configurations
#include "OSD_Config.h"
#include "ArduCam_Max7456.h"
#include "OSD_Vars.h"
#include "OSD_Func.h"
 
/* *************************************************/
/* ***************** DEFINITIONS *******************/
 
//OSD Hardware
//#define ArduCAM328
#define MinimOSD
 
#define TELEMETRY_SPEED 57600 // How fast our MAVLink telemetry is coming to Serial port
#define BOOTTIME 2000 // Time in milliseconds that we show boot loading bar and wait user input
 
// Objects and Serial definitions
FastSerialPort0(Serial);
OSD osd; //OSD object
 
SimpleTimer mavlinkTimer;
 
 
/* **********************************************/
/* ***************** SETUP() *******************/
 
void setup()
{
#ifdef ArduCAM328
pinMode(10, OUTPUT); // USB ArduCam Only
#endif
pinMode(MAX7456_SELECT, OUTPUT); // OSD CS
 
Serial.begin(TELEMETRY_SPEED);
// setup mavlink port
mavlink_comm_0_port = &Serial;
#ifdef membug
Serial.println(freeMem());
#endif
 
// Prepare OSD for displaying
unplugSlaves();
osd.init();
// Start
startPanels();
delay(500);
 
// OSD debug for development (Shown at start)
#ifdef membug
osd.setPanel(1,1);
osd.openPanel();
osd.printf("%i",freeMem());
osd.closePanel();
#endif
 
// Just to easy up development things
#ifdef FORCEINIT
InitializeOSD();
#endif
 
 
// Check EEPROM to see if we have initialized it already or not
// also checks if we have new version that needs EEPROM reset
if(readEEPROM(CHK1) + readEEPROM(CHK2) != VER) {
osd.setPanel(6,9);
osd.openPanel();
osd.printf_P(PSTR("Missing/Old Config"));
osd.closePanel();
InitializeOSD();
}
// Get correct panel settings from EEPROM
readSettings();
// Show bootloader bar
loadBar();
 
// Startup MAVLink timers
mavlinkTimer.Set(&OnMavlinkTimer, 120);
 
// House cleaning, clear display and enable timers
osd.clear();
mavlinkTimer.Enable();
} // END of setup();
 
 
 
/* ***********************************************/
/* ***************** MAIN LOOP *******************/
 
// Mother of all happenings, The loop()
// As simple as possible.
void loop()
{
 
if(enable_mav_request == 1){//Request rate control
osd.clear();
osd.setPanel(3,10);
osd.openPanel();
osd.printf_P(PSTR("Requesting DataStreams..."));
osd.closePanel();
for(int n = 0; n < 3; n++){
request_mavlink_rates();//Three times to certify it will be readed
delay(50);
}
enable_mav_request = 0;
delay(2000);
osd.clear();
waitingMAVBeats = 0;
lastMAVBeat = millis();//Preventing error from delay sensing
}
read_mavlink();
mavlinkTimer.Run();
}
 
/* *********************************************** */
/* ******** functions used in main loop() ******** */
void OnMavlinkTimer()
{
setHeadingPatern(); // generate the heading patern
 
osd_battery_pic_A = setBatteryPic(osd_battery_remaining_A); // battery A remmaning picture
//osd_battery_pic_B = setBatteryPic(osd_battery_remaining_B); // battery B remmaning picture
setHomeVars(osd); // calculate and set Distance from home and Direction to home
 
writePanels(); // writing enabled panels (check OSD_Panels Tab)
}
 
 
void unplugSlaves(){
//Unplug list of SPI
#ifdef ArduCAM328
digitalWrite(10, HIGH); // unplug USB HOST: ArduCam Only
#endif
digitalWrite(MAX7456_SELECT, HIGH); // unplug OSD
}
/C-OSD/arducam-osd/ArduCAM_OSD/ArduCam_Max7456.cpp
0,0 → 1,295
 
#include <FastSerial.h>
 
#include "ArduCam_Max7456.h"
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
#include "Spi.h"
 
volatile int x;
volatile int font_count;
volatile byte character_bitmap[0x40];
 
OSD::OSD()
{
}
 
//------------------ init ---------------------------------------------------
 
void OSD::init()
{
pinMode(MAX7456_SELECT,OUTPUT);
pinMode(MAX7456_VSYNC, INPUT);
digitalWrite(MAX7456_VSYNC,HIGH); //enabling pull-up resistor
 
detectMode();
 
digitalWrite(MAX7456_SELECT,LOW);
//read black level register
Spi.transfer(MAX7456_OSDBL_reg_read);//black level read register
byte osdbl_r = Spi.transfer(0xff);
Spi.transfer(MAX7456_VM0_reg);
Spi.transfer(MAX7456_RESET | video_mode);
delay(50);
//set black level
byte osdbl_w = (osdbl_r & 0xef); //Set bit 4 to zero 11101111
Spi.transfer(MAX7456_OSDBL_reg); //black level write register
Spi.transfer(osdbl_w);
 
// set all rows to same charactor white level, 90%
for (x = 0; x < MAX7456_screen_rows; x++)
{
Spi.transfer(x + 0x10);
Spi.transfer(MAX7456_WHITE_level_120);
}
// define sync (auto,int,ext) and
// making sure the Max7456 is enabled
control(1);
}
 
//------------------ Detect Mode (PAL/NTSC) ---------------------------------
 
void OSD::detectMode()
{
digitalWrite(MAX7456_SELECT,LOW);
//read STAT and auto detect Mode PAL/NTSC
Spi.transfer(MAX7456_STAT_reg_read);//status register
byte osdstat_r = Spi.transfer(0xff);
 
if ((B00000001 & osdstat_r) == 1){
setMode(1);
}
else if((B00000010 & osdstat_r) == 1){
setMode(0);
}
#ifdef MinimOSD
else if (digitalRead(3) == 1){
setMode(1);
}
#endif
else setMode(0);
digitalWrite(MAX7456_SELECT,LOW);
}
 
//------------------ Set Mode (PAL/NTSC) ------------------------------------
 
void OSD::setMode(int themode)
{
switch(themode){
case 0:
video_mode = MAX7456_MODE_MASK_NTCS;
video_center = MAX7456_CENTER_NTSC;
break;
case 1:
video_mode = MAX7456_MODE_MASK_PAL;
video_center = MAX7456_CENTER_PAL;
break;
}
}
 
//------------------ Get Mode (PAL 0/NTSC 1) --------------------------------
 
int OSD::getMode()
{
switch(video_mode){
case MAX7456_MODE_MASK_NTCS:
return 0;
break;
case MAX7456_MODE_MASK_PAL:
return 1;
break;
}
return 0;
}
 
//------------------ Get Center (PAL/NTSC) ----------------------------------
 
int OSD::getCenter()
{
return video_center; //first line for center panel
}
 
//------------------ plug ---------------------------------------------------
 
void OSD::plug()
{
digitalWrite(MAX7456_SELECT,LOW);
}
 
//------------------ clear ---------------------------------------------------
 
void OSD::clear()
{
// clear the screen
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_DMM_reg);
Spi.transfer(MAX7456_CLEAR_display);
digitalWrite(MAX7456_SELECT,HIGH);
}
 
//------------------ set panel -----------------------------------------------
 
void
OSD::setPanel(uint8_t st_col, uint8_t st_row){
start_col = st_col;
start_row = st_row;
col = st_col;
row = st_row;
}
 
//------------------ open panel ----------------------------------------------
 
void
OSD::openPanel(void){
unsigned int linepos;
byte settings, char_address_hi, char_address_lo;
//find [start address] position
linepos = row*30+col;
// divide 16 bits into hi & lo byte
char_address_hi = linepos >> 8;
char_address_lo = linepos;
 
//Auto increment turn writing fast (less SPI commands).
//No need to set next char address. Just send them
settings = MAX7456_INCREMENT_auto; //To Enable DMM Auto Increment
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_DMM_reg); //dmm
Spi.transfer(settings);
 
Spi.transfer(MAX7456_DMAH_reg); // set start address high
Spi.transfer(char_address_hi);
 
Spi.transfer(MAX7456_DMAL_reg); // set start address low
Spi.transfer(char_address_lo);
//Serial.printf("setPos -> %d %d\n", col, row);
}
 
//------------------ close panel ---------------------------------------------
 
void
OSD::closePanel(void){
Spi.transfer(MAX7456_DMDI_reg);
Spi.transfer(MAX7456_END_string); //This is needed "trick" to finish auto increment
digitalWrite(MAX7456_SELECT,HIGH);
//Serial.println("close");
row++; //only after finish the auto increment the new row will really act as desired
}
 
//------------------ write single char ---------------------------------------------
 
void
OSD::openSingle(uint8_t x, uint8_t y){
unsigned int linepos;
byte char_address_hi, char_address_lo;
//find [start address] position
linepos = y*30+x;
// divide 16 bits into hi & lo byte
char_address_hi = linepos >> 8;
char_address_lo = linepos;
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_DMAH_reg); // set start address high
Spi.transfer(char_address_hi);
 
Spi.transfer(MAX7456_DMAL_reg); // set start address low
Spi.transfer(char_address_lo);
//Serial.printf("setPos -> %d %d\n", col, row);
}
 
//------------------ write ---------------------------------------------------
 
size_t
OSD::write(uint8_t c){
if(c == '|'){
closePanel(); //It does all needed to finish auto increment and change current row
openPanel(); //It does all needed to re-enable auto increment
}
else{
Spi.transfer(MAX7456_DMDI_reg);
Spi.transfer(c);
}
return 1;
}
 
//---------------------------------
 
void
OSD::control(uint8_t ctrl){
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_VM0_reg);
switch(ctrl){
case 0:
Spi.transfer(MAX7456_DISABLE_display | video_mode);
break;
case 1:
//Spi.transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_internal);
//Spi.transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_external);
Spi.transfer((MAX7456_ENABLE_display_vert | video_mode) | MAX7456_SYNC_autosync);
break;
}
digitalWrite(MAX7456_SELECT,HIGH);
}
 
void
OSD::write_NVM(int font_count, uint8_t *character_bitmap)
{
byte x;
byte char_address_hi, char_address_lo;
byte screen_char;
 
char_address_hi = font_count;
char_address_lo = 0;
//Serial.println("write_new_screen");
 
// disable display
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_VM0_reg);
Spi.transfer(MAX7456_DISABLE_display);
 
Spi.transfer(MAX7456_CMAH_reg); // set start address high
Spi.transfer(char_address_hi);
 
for(x = 0; x < NVM_ram_size; x++) // write out 54 (out of 64) bytes of character to shadow ram
{
screen_char = character_bitmap[x];
Spi.transfer(MAX7456_CMAL_reg); // set start address low
Spi.transfer(x);
Spi.transfer(MAX7456_CMDI_reg);
Spi.transfer(screen_char);
}
 
// transfer a 54 bytes from shadow ram to NVM
Spi.transfer(MAX7456_CMM_reg);
Spi.transfer(WRITE_nvr);
// wait until bit 5 in the status register returns to 0 (12ms)
while ((Spi.transfer(MAX7456_STAT_reg_read) & STATUS_reg_nvr_busy) != 0x00);
 
Spi.transfer(MAX7456_VM0_reg); // turn on screen next vertical
Spi.transfer(MAX7456_ENABLE_display_vert);
digitalWrite(MAX7456_SELECT,HIGH);
}
 
//------------------ pure virtual ones (just overriding) ---------------------
 
int OSD::available(void){
return 0;
}
int OSD::read(void){
return 0;
}
int OSD::peek(void){
return 0;
}
void OSD::flush(void){
}
 
/C-OSD/arducam-osd/ArduCAM_OSD/ArduCam_Max7456.h
0,0 → 1,105
 
#ifndef ArduCam_Max7456_h
#define ArduCam_Max7456_h
 
/******* FROM DATASHEET *******/
 
#define MAX7456_SELECT 6//SS
#define MAX7456_VSYNC 2//INT0
 
#define NTSC 0
#define PAL 1
#define MAX7456_MODE_MASK_PAL 0x40 //PAL mask 01000000
#define MAX7456_CENTER_PAL 0x8
 
#define MAX7456_MODE_MASK_NTCS 0x00 //NTSC mask 00000000 ("|" will do nothing)
#define MAX7456_CENTER_NTSC 0x6
 
//MAX7456 reg read addresses
#define MAX7456_OSDBL_reg_read 0xec //black level
#define MAX7456_STAT_reg_read 0xa0 //0xa[X] Status
 
//MAX7456 reg write addresses
#define MAX7456_VM0_reg 0x00
#define MAX7456_VM1_reg 0x01
#define MAX7456_DMM_reg 0x04
#define MAX7456_DMAH_reg 0x05
#define MAX7456_DMAL_reg 0x06
#define MAX7456_DMDI_reg 0x07
#define MAX7456_OSDM_reg 0x0c //not used. Is to set mix
#define MAX7456_OSDBL_reg 0x6c //black level
 
//MAX7456 reg write addresses to recording NVM process
#define MAX7456_CMM_reg 0x08
#define MAX7456_CMAH_reg 0x09
#define MAX7456_CMAL_reg 0x0a
#define MAX7456_CMDI_reg 0x0b
 
//DMM commands
#define MAX7456_CLEAR_display 0x04
#define MAX7456_CLEAR_display_vert 0x06
 
#define MAX7456_INCREMENT_auto 0x03
#define MAX7456_SETBG_local 0x20 //00100000 force local BG to defined brightness level VM1[6:4]
 
#define MAX7456_END_string 0xff
 
//VM0 commands mixed with mode NTSC or PAL mode
#define MAX7456_ENABLE_display_vert 0x0c //mask with NTSC/PAL
#define MAX7456_RESET 0x02 //mask with NTSC/PAL
#define MAX7456_DISABLE_display 0x00 //mask with NTSC/PAL
 
//VM0 command modifiers
#define MAX7456_SYNC_autosync 0x10
#define MAX7456_SYNC_internal 0x30
#define MAX7456_SYNC_external 0x20
//VM1 command modifiers
#define MAX7456_WHITE_level_80 0x03
#define MAX7456_WHITE_level_90 0x02
#define MAX7456_WHITE_level_100 0x01
#define MAX7456_WHITE_level_120 0x00
 
#define NVM_ram_size 0x36
#define WRITE_nvr 0xa0
#define STATUS_reg_nvr_busy 0x20
 
//If PAL
#ifdef isPAL
#define MAX7456_screen_size 480 //16x30
#define MAX7456_screen_rows 15
#else
#define MAX7456_screen_size 390 //13x30
#define MAX7456_screen_rows 12
#endif
 
//------------------ the OSD class -----------------------------------------------
 
class OSD: public BetterStream
{
public:
OSD(void);
void init(void);
void clear(void);
void plug(void);
void setPanel(uint8_t start_col, uint8_t start_row);
void openPanel(void);
void closePanel(void);
void control(uint8_t ctrl);
void detectMode(void);
void setMode(int mode);
void openSingle(uint8_t x, uint8_t y);
int getMode(void);
int getCenter(void);
virtual int available(void);
virtual int read(void);
virtual int peek(void);
virtual void flush(void);
virtual size_t write(uint8_t c);
void write_NVM(int font_count, uint8_t *character_bitmap);
using BetterStream::write;
private:
uint8_t start_col, start_row, col, row, video_mode, video_center;
};
 
#endif
 
/C-OSD/arducam-osd/ArduCAM_OSD/ArduNOTES.ino
0,0 → 1,82
/*
 
File : ArduCAM-OSD Notes
Version : v1.0.02
Author : Jani Hirvinen
 
File to define all panels that can be used on ArduCAM-OSD hardware. Also their order numbers
and other information.
 
Order number are also used when configuring their location. Look below
 
Register , Order number , Panel name, Data/Size , Definitions
-------------------------------------------------------
panA_REG.0 01 panCenter "IIII" \r "IIII" - Center xrosshair
panA_REG.1 02 panPitch "DDDDII" - Pitch angle with symbols
panA_REG.2 03 panRoll "DDDDII" - Roll angle with symbols
panA_REG.3 04 panBattery1 "DD.DII" - Voltage sensing #1 symbol with voltage reading
panA_REG.4 05 panBattery2 "DD.DII" - Voltage sensing #2 symbol with voltage reading (!Not Implemented)
panA_REG.5 06 panGPSats "I CC" - Amount of locked satelliset with symbols
panA_REG.6 07 panGPL "II" - GPS Lock symbol
panA_REG.7 08 panGPS "I DDD.DDDDDD" \r "I DDD.DDDDDD" - GPS location data (lat/lon)
panB_REG.0 09 panRose "IIIIIIIIIIIII" \r "ICCCCCCCCCCCCI" - Compass rose
panB_REG.1 10 panHeading "IIDDDDI" - Compass heading with symbols
panB_REG.2 11 panMavBeat "II" - MAVLink heartbeat
panB_REG.3 12 panHomeDir "II" N/Y - Home location arrows
panB_REG.4 13 panHomeDis "IDDDDDI" N/Y - Distance to home
panB_REG.5 14 panWPDir "II" N/Y - Waypoint location arrows (!Not Implemented)
panB_REG.6 15 panWPDis "IDDDDDI" - Distance to next waypoint (!Not Implemented)
panB_REG.7 16 panRSSI - RSSI data from RC (!Not Implemented)
panC_REG.0 17 panCurrent1 - Current sensing #1 (!Not Implemented)
panC_REG.1 18 panCurrent2 - Current sensing #2 (!Not Implemented)
panC_REG.2 19 panAlt "IDDDDDI" - Altitude information
panC_REG.3 20 panVel "IDDDDDI" - Velocity information
panC_REG.4 21 panThr "IDDDDDI" - MAVLink Throttle data
panC_REG.5 22 panFMod "II" - Flight mode display
panC_REG.6 05 panHorizon - Artificial Horizon
panC_REG.7 24 --
 
 
I = Icon
D = Digit
C = Char
 
N/Y = Not Yet working
N/C = Not Confirmed
 
Screen sizes:
PAL 15 Rows x 32 Chars
NTSC 13 Rows x 30 Chars
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
*/
/C-OSD/arducam-osd/ArduCAM_OSD/BOOT_Func.ino
0,0 → 1,76
 
 
/* ******************************************************************/
/* *********************** BOOT UP FUNCTIONS ********************** */
 
 
///////////////////////////////////////////////////////
// Function: loadBar(void)
//
// On bootup time we will show loading bar for defined BOOTTIME seconds
// This is interesting to avoid writing to APM during bootup if OSD's TX is connected
// After that, it continue in normal mode eg starting to listen MAVLink commands
 
#define barX 5
#define barY 12
 
void loadBar() { //change name due we don't have CLI anymore
int waitTimer;
byte barStep = 0;
 
// Write plain panel to let users know what to do
panBoot(barX,barY);
 
delay(500); // To give small extra waittime to users
// Serial.flush();
// Our main loop to wait input from user.
for(waitTimer = 0; waitTimer <= BOOTTIME; waitTimer++) {
 
// How often we update our progress bar is depending on modulo
if(waitTimer % (BOOTTIME / 8) == 0) {
barStep++;
// Update bar it self
osd.setPanel(barX + 12, barY);
osd.openPanel();
switch(barStep) {
case 0:
osd.printf_P(PSTR("\xf1\xf2\xf2\xf2\xf2\xf2\xf2"));
break;
case 1:
osd.printf_P(PSTR("\xef\xf2\xf2\xf2\xf2\xf2\xf2"));
break;
case 2:
osd.printf_P(PSTR("\xee\xf0\xf2\xf2\xf2\xf2\xf2"));
break;
case 3:
osd.printf_P(PSTR("\xee\xee\xf0\xf2\xf2\xf2\xf2"));
break;
case 4:
osd.printf_P(PSTR("\xee\xee\xee\xf0\xf2\xf2\xf2"));
break;
case 5:
osd.printf_P(PSTR("\xee\xee\xee\xee\xf0\xf2\xf2"));
break;
case 6:
osd.printf_P(PSTR("\xee\xee\xee\xee\xee\xf0\xf2"));
break;
case 7:
osd.printf_P(PSTR("\xee\xee\xee\xee\xee\xee\xf0"));
break;
case 8:
osd.printf_P(PSTR("\xee\xee\xee\xee\xee\xee\xee"));
break;
case 9:
osd.printf_P(PSTR("\xee\xee\xee\xee\xee\xee\xee\xee"));
break;
}
osd.closePanel();
}
delay(1); // Minor delay to make sure that we stay here long enough
}
}
 
 
/C-OSD/arducam-osd/ArduCAM_OSD/Font.ino
0,0 → 1,93
 
void uploadFont()
{
uint16_t byte_count = 0;
byte bit_count;
byte ascii_binary[0x08];
// move these local to prevent ram usage
uint8_t character_bitmap[0x40];
int font_count = 0;
osd.clear();
osd.setPanel(6,9);
osd.openPanel();
osd.printf_P(PSTR("Update CharSet"));
osd.closePanel();
Serial.printf_P(PSTR("Ready for Font\n"));
while(font_count < 256) {
int8_t incomingByte = Serial.read();
switch(incomingByte) // parse and decode mcm file
{
case 0x0d: // carridge return, end of line
//Serial.println("cr");
if (bit_count == 8 && (ascii_binary[0] == 0x30 || ascii_binary[0] == 0x31))
{
// turn 8 ascii binary bytes to single byte '01010101' = 0x55
// fill in 64 bytes of character data
// made this local to prevent needing a global
byte ascii_byte;
 
ascii_byte = 0;
if (ascii_binary[0] == 0x31) // ascii '1'
ascii_byte = ascii_byte + 128;
 
if (ascii_binary[1] == 0x31)
ascii_byte = ascii_byte + 64;
 
if (ascii_binary[2] == 0x31)
ascii_byte = ascii_byte + 32;
 
if (ascii_binary[3] == 0x31)
ascii_byte = ascii_byte + 16;
 
if (ascii_binary[4] == 0x31)
ascii_byte = ascii_byte + 8;
 
if (ascii_binary[5] == 0x31)
ascii_byte = ascii_byte + 4;
 
if (ascii_binary[6] == 0x31)
ascii_byte = ascii_byte + 2;
 
if (ascii_binary[7] == 0x31)
ascii_byte = ascii_byte + 1;
character_bitmap[byte_count] = ascii_byte;
byte_count++;
bit_count = 0;
}
else
bit_count = 0;
break;
case 0x0a: // line feed, ignore
//Serial.println("ln");
break;
case 0x30: // ascii '0'
case 0x31: // ascii '1'
ascii_binary[bit_count] = incomingByte;
bit_count++;
break;
default:
break;
}
// we have one completed character
// write the character to NVM
if(byte_count == 64)
{
osd.write_NVM(font_count, character_bitmap);
byte_count = 0;
font_count++;
Serial.printf_P(PSTR("Char Done\n"));
}
}
// character_bitmap[]
}
 
 
/C-OSD/arducam-osd/ArduCAM_OSD/MAVLink.ino
0,0 → 1,154
#define MAVLINK_COMM_NUM_BUFFERS 1
#define MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
// this code was moved from libraries/GCS_MAVLink to allow compile
// time selection of MAVLink 1.0
BetterStream *mavlink_comm_0_port;
BetterStream *mavlink_comm_1_port;
 
mavlink_system_t mavlink_system = {12,1,0,0};
 
#include "Mavlink_compat.h"
 
#ifdef MAVLINK10
#include "../GCS_MAVLink/include/mavlink/v1.0/mavlink_types.h"
#include "../GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink.h"
#else
#include "../GCS_MAVLink/include/mavlink/v0.9/mavlink_types.h"
#include "../GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink.h"
#endif
 
// true when we have received at least 1 MAVLink packet
static bool mavlink_active;
static uint8_t crlf_count = 0;
 
static int packet_drops = 0;
static int parse_error = 0;
 
void request_mavlink_rates()
{
const int maxStreams = 6;
const uint8_t MAVStreams[maxStreams] = {MAV_DATA_STREAM_RAW_SENSORS,
MAV_DATA_STREAM_EXTENDED_STATUS,
MAV_DATA_STREAM_RC_CHANNELS,
MAV_DATA_STREAM_POSITION,
MAV_DATA_STREAM_EXTRA1,
MAV_DATA_STREAM_EXTRA2};
const uint16_t MAVRates[maxStreams] = {0x02, 0x02, 0x05, 0x02, 0x05, 0x02};
for (int i=0; i < maxStreams; i++) {
mavlink_msg_request_data_stream_send(MAVLINK_COMM_0,
apm_mav_system, apm_mav_component,
MAVStreams[i], MAVRates[i], 1);
}
}
 
void read_mavlink(){
mavlink_message_t msg;
mavlink_status_t status;
//grabing data
while(Serial.available() > 0) {
uint8_t c = Serial.read();
/* allow CLI to be started by hitting enter 3 times, if no
heartbeat packets have been received */
if (mavlink_active == 0 && millis() < 20000) {
if (c == '\n' || c == '\r') {
crlf_count++;
} else {
crlf_count = 0;
}
if (crlf_count == 3) {
uploadFont();
}
}
//trying to grab msg
if(mavlink_parse_char(MAVLINK_COMM_0, c, &msg, &status)) {
mavlink_active = 1;
//handle msg
switch(msg.msgid) {
case MAVLINK_MSG_ID_HEARTBEAT:
{
mavbeat = 1;
apm_mav_system = msg.sysid;
apm_mav_component = msg.compid;
apm_mav_type = mavlink_msg_heartbeat_get_type(&msg);
#ifdef MAVLINK10
osd_mode = mavlink_msg_heartbeat_get_custom_mode(&msg);
osd_nav_mode = 0;
#endif
lastMAVBeat = millis();
if(waitingMAVBeats == 1){
enable_mav_request = 1;
}
}
break;
case MAVLINK_MSG_ID_SYS_STATUS:
{
#ifndef MAVLINK10
osd_vbat_A = (mavlink_msg_sys_status_get_vbat(&msg) / 1000.0f);
osd_mode = mavlink_msg_sys_status_get_mode(&msg);
osd_nav_mode = mavlink_msg_sys_status_get_nav_mode(&msg);
#else
osd_vbat_A = (mavlink_msg_sys_status_get_voltage_battery(&msg) / 1000.0f);
#endif
osd_battery_remaining_A = mavlink_msg_sys_status_get_battery_remaining(&msg);
//osd_mode = apm_mav_component;//Debug
//osd_nav_mode = apm_mav_system;//Debug
}
break;
#ifndef MAVLINK10
case MAVLINK_MSG_ID_GPS_RAW:
{
osd_lat = mavlink_msg_gps_raw_get_lat(&msg);
osd_lon = mavlink_msg_gps_raw_get_lon(&msg);
osd_fix_type = mavlink_msg_gps_raw_get_fix_type(&msg);
}
break;
case MAVLINK_MSG_ID_GPS_STATUS:
{
osd_satellites_visible = mavlink_msg_gps_status_get_satellites_visible(&msg);
}
break;
#else
case MAVLINK_MSG_ID_GPS_RAW_INT:
{
osd_lat = mavlink_msg_gps_raw_int_get_lat(&msg) / 10000000.0f;
osd_lon = mavlink_msg_gps_raw_int_get_lon(&msg) / 10000000.0f;
osd_fix_type = mavlink_msg_gps_raw_int_get_fix_type(&msg);
osd_satellites_visible = mavlink_msg_gps_raw_int_get_satellites_visible(&msg);
}
break;
#endif
 
case MAVLINK_MSG_ID_VFR_HUD:
{
osd_groundspeed = mavlink_msg_vfr_hud_get_groundspeed(&msg);
osd_heading = mavlink_msg_vfr_hud_get_heading(&msg);// * 3.60f;//0-100% of 360
osd_throttle = mavlink_msg_vfr_hud_get_throttle(&msg);
if(osd_throttle > 100 && osd_throttle < 150) osd_throttle = 100;//Temporary fix for ArduPlane 2.28
if(osd_throttle < 0 || osd_throttle > 150) osd_throttle = 0;//Temporary fix for ArduPlane 2.28
osd_alt = mavlink_msg_vfr_hud_get_alt(&msg);
}
break;
case MAVLINK_MSG_ID_ATTITUDE:
{
osd_pitch = ToDeg(mavlink_msg_attitude_get_pitch(&msg));
osd_roll = ToDeg(mavlink_msg_attitude_get_roll(&msg));
osd_yaw = ToDeg(mavlink_msg_attitude_get_yaw(&msg));
}
break;
default:
//Do nothing
break;
}
}
delayMicroseconds(138);
//next one
}
// Update global packet drops counter
packet_drops += status.packet_rx_drop_count;
parse_error += status.parse_error;
 
}
/C-OSD/arducam-osd/ArduCAM_OSD/OSD_Config.h
0,0 → 1,129
 
#define on 1
#define off 0
 
// Versio number, incrementing this will erase/upload factory settings.
// Only devs should increment this
#define VER 74
 
// EEPROM Stepping, be careful not to overstep.
// We reserved floats for just to be sure if some values needs to be
// changed in future.
// byte = 1
// int = 4
// float = 8
 
// Panel 8bit REGISTER with BIT positions
// panA_REG Byte has:
#define Cen_BIT 0
#define Pit_BIT 1
#define Rol_BIT 2
#define BatA_BIT 3
#define BatB_BIT 4 //(!Not implemented)
#define GPSats_BIT 5
#define GPL_BIT 6
#define GPS_BIT 7
 
// panB_REG Byte has:
#define Rose_BIT 0
#define Head_BIT 1
#define MavB_BIT 2
#define HDir_BIT 3
#define HDis_BIT 4
#define WDir_BIT 5 //(!Not implemented)
#define WDis_BIT 6 //(!Not implemented)
#define RSSI_BIT 7 //(!Not implemented)
 
// panC_REG Byte has:
#define CurA_BIT 0 //(!Not implemented)
#define CurB_BIT 1 //(!Not implemented)
#define Alt_BIT 2
#define Vel_BIT 3
#define Thr_BIT 4
#define FMod_BIT 5
#define Hor_BIT 6
//#define XXC_BIT 7 //Free
 
 
/* *********************************************** */
// EEPROM Storage addresses
 
// First of 8 panels
#define panCenter_en_ADDR 0
#define panCenter_x_ADDR 2
#define panCenter_y_ADDR 4
#define panPitch_en_ADDR 6
#define panPitch_x_ADDR 8
#define panPitch_y_ADDR 10
#define panRoll_en_ADDR 12
#define panRoll_x_ADDR 14
#define panRoll_y_ADDR 16
#define panBatt_A_en_ADDR 18
#define panBatt_A_x_ADDR 20
#define panBatt_A_y_ADDR 22
#define panBatt_B_en_ADDR 24
#define panBatt_B_x_ADDR 26
#define panBatt_B_y_ADDR 28
#define panGPSats_en_ADDR 30
#define panGPSats_x_ADDR 32
#define panGPSats_y_ADDR 34
#define panGPL_en_ADDR 36
#define panGPL_x_ADDR 38
#define panGPL_y_ADDR 40
#define panGPS_en_ADDR 42
#define panGPS_x_ADDR 44
#define panGPS_y_ADDR 46
 
// Second set of 8 panels
#define panRose_en_ADDR 48
#define panRose_x_ADDR 50
#define panRose_y_ADDR 52
#define panHeading_en_ADDR 54
#define panHeading_x_ADDR 56
#define panHeading_y_ADDR 58
#define panMavBeat_en_ADDR 60
#define panMavBeat_x_ADDR 62
#define panMavBeat_y_ADDR 64
#define panHomeDir_en_ADDR 66
#define panHomeDir_x_ADDR 68
#define panHomeDir_y_ADDR 70
#define panHomeDis_en_ADDR 72
#define panHomeDis_x_ADDR 74
#define panHomeDis_y_ADDR 76
#define panWPDir_en_ADDR 80 //(!Not implemented)
#define panWPDir_x_ADDR 82 //
#define panWPDir_y_ADDR 84 //
#define panWPDis_en_ADDR 86 //(!Not implemented)
#define panWPDis_x_ADDR 88 //
#define panWPDis_y_ADDR 90 //
#define panRSSI_en_ADDR 92 //(!Not implemented)
#define panRSSI_x_ADDR 94 //
#define panRSSI_y_ADDR 96 //
 
// Third set of 8 panels
#define panCurA_en_ADDR 98 //(!Not implemented)
#define panCurA_x_ADDR 100 //
#define panCurA_y_ADDR 102 //
#define panCurB_en_ADDR 104 //(!Not implemented)
#define panCurB_x_ADDR 106 //
#define panCurB_y_ADDR 108 //
#define panAlt_en_ADDR 110
#define panAlt_x_ADDR 112
#define panAlt_y_ADDR 114
#define panVel_en_ADDR 116
#define panVel_x_ADDR 118
#define panVel_y_ADDR 120
#define panThr_en_ADDR 122
#define panThr_x_ADDR 124
#define panThr_y_ADDR 126
#define panFMod_en_ADDR 128
#define panFMod_x_ADDR 130
#define panFMod_y_ADDR 132
#define panHorizon_en_ADDR 134
#define panHorizon_x_ADDR 136
#define panHorizon_y_ADDR 138
 
#define CHK1 1000
#define CHK2 1006
 
#define EEPROM_MAX_ADDR 1024 // this is 328 chip
/C-OSD/arducam-osd/ArduCAM_OSD/OSD_Config_Func.ino
0,0 → 1,248
/* ******************************************************************/
/* *********************** GENERAL FUNCTIONS ********************** */
 
//Extract functions (get bits from the positioning bytes
#define ISa(whichBit) getBit(panA_REG, whichBit)
#define ISb(whichBit) getBit(panB_REG, whichBit)
#define ISc(whichBit) getBit(panC_REG, whichBit)
 
boolean getBit(byte Reg, byte whichBit) {
boolean State;
State = Reg & (1 << whichBit);
return State;
}
 
byte setBit(byte &Reg, byte whichBit, boolean stat) {
if (stat) {
Reg = Reg | (1 << whichBit);
}
else {
Reg = Reg & ~(1 << whichBit);
}
return Reg;
}
 
// EEPROM reader/writers
// Utilities for writing and reading from the EEPROM
byte readEEPROM(int address) {
 
return EEPROM.read(address);
}
 
void writeEEPROM(byte value, int address) {
EEPROM.write(address, value);
}
 
 
void InitializeOSD() {
loadBar();
delay(500);
 
writeEEPROM(42, CHK1);
writeEEPROM(VER-42,CHK2);
writeSettings();
osd.setPanel(4,9);
osd.openPanel();
osd.printf_P(PSTR("OSD Initialized, reboot"));
osd.closePanel();
// run for ever so user resets
for(;;) {}
}
 
// Write our latest FACTORY settings to EEPROM
void writeSettings() {
// Writing all default parameters to EEPROM, ON = panel enabled
// All panels have 3 values:
// - Enable/Disable
// - X coordinate on screen
// - Y coordinate on screen
writeEEPROM(off, panCenter_en_ADDR);
writeEEPROM(13, panCenter_x_ADDR);
writeEEPROM(7, panCenter_y_ADDR);
writeEEPROM(on, panPitch_en_ADDR);
writeEEPROM(22, panPitch_x_ADDR);
writeEEPROM(9, panPitch_y_ADDR);
writeEEPROM(on, panRoll_en_ADDR);
writeEEPROM(11, panRoll_x_ADDR);
writeEEPROM(1, panRoll_y_ADDR);
writeEEPROM(on, panBatt_A_en_ADDR);
writeEEPROM(21, panBatt_A_x_ADDR);
writeEEPROM(1, panBatt_A_y_ADDR);
//writeEEPROM(on, panBatt_B_en_ADDR);
//writeEEPROM(21, panBatt_B_x_ADDR);
//writeEEPROM(3, panBatt_B_y_ADDR);
writeEEPROM(on, panGPSats_en_ADDR);
writeEEPROM(2, panGPSats_x_ADDR);
writeEEPROM(13, panGPSats_y_ADDR);
writeEEPROM(on, panGPL_en_ADDR);
writeEEPROM(5, panGPL_x_ADDR);
writeEEPROM(13, panGPL_y_ADDR);
writeEEPROM(on, panGPS_en_ADDR);
writeEEPROM(2, panGPS_x_ADDR);
writeEEPROM(14, panGPS_y_ADDR);
writeEEPROM(on, panRose_en_ADDR);
writeEEPROM(16, panRose_x_ADDR);
writeEEPROM(14, panRose_y_ADDR);
writeEEPROM(on, panHeading_en_ADDR);
writeEEPROM(24, panHeading_x_ADDR);
writeEEPROM(13, panHeading_y_ADDR);
writeEEPROM(on, panMavBeat_en_ADDR);
writeEEPROM(2, panMavBeat_x_ADDR);
writeEEPROM(9, panMavBeat_y_ADDR);
writeEEPROM(on, panHomeDir_en_ADDR);
writeEEPROM(14, panHomeDir_x_ADDR);
writeEEPROM(3, panHomeDir_y_ADDR);
writeEEPROM(on, panHomeDis_en_ADDR);
writeEEPROM(2, panHomeDis_x_ADDR);
writeEEPROM(1, panHomeDis_y_ADDR);
writeEEPROM(off,panWPDir_en_ADDR);
writeEEPROM(0, panWPDir_x_ADDR);
writeEEPROM(0, panWPDir_y_ADDR);
writeEEPROM(off,panWPDis_en_ADDR);
writeEEPROM(0, panWPDis_x_ADDR);
writeEEPROM(0, panWPDis_y_ADDR);
//writeEEPROM(on, panRSSI_en_ADDR);
//writeEEPROM(21, panRSSI_x_ADDR);
//writeEEPROM(5, panRSSI_y_ADDR);
//writeEEPROM(on, panCur_A_en_ADDR);
//writeEEPROM(21, panCur_A_x_ADDR);
//writeEEPROM(2, panCur_A_y_ADDR);
//writeEEPROM(on, panCur_B_en_ADDR);
//writeEEPROM(21, panCur_B_x_ADDR);
//writeEEPROM(4, panCur_B_y_ADDR);
writeEEPROM(on, panAlt_en_ADDR);
writeEEPROM(2, panAlt_x_ADDR);
writeEEPROM(2, panAlt_y_ADDR);
writeEEPROM(on, panVel_en_ADDR);
writeEEPROM(2, panVel_x_ADDR);
writeEEPROM(3, panVel_y_ADDR);
writeEEPROM(on, panThr_en_ADDR);
writeEEPROM(2, panThr_x_ADDR);
writeEEPROM(4, panThr_y_ADDR);
writeEEPROM(on, panFMod_en_ADDR);
writeEEPROM(17, panFMod_x_ADDR);
writeEEPROM(13, panFMod_y_ADDR);
writeEEPROM(on, panHorizon_en_ADDR);
writeEEPROM(8, panHorizon_x_ADDR);
writeEEPROM(7, panHorizon_y_ADDR);
}
 
void readSettings() {
//****** First set of 8 Panels ******
setBit(panA_REG, Cen_BIT, readEEPROM(panCenter_en_ADDR));
panCenter_XY[0] = readEEPROM(panCenter_x_ADDR);
panCenter_XY[1] = checkPAL(readEEPROM(panCenter_y_ADDR));
setBit(panA_REG, Pit_BIT, readEEPROM(panPitch_en_ADDR));
panPitch_XY[0] = readEEPROM(panPitch_x_ADDR);
panPitch_XY[1] = checkPAL(readEEPROM(panPitch_y_ADDR));
setBit(panA_REG, Rol_BIT, readEEPROM(panRoll_en_ADDR));
panRoll_XY[0] = readEEPROM(panRoll_x_ADDR);
panRoll_XY[1] = checkPAL(readEEPROM(panRoll_y_ADDR));
setBit(panA_REG, BatA_BIT, readEEPROM(panBatt_A_en_ADDR));
panBatt_A_XY[0] = readEEPROM(panBatt_A_x_ADDR);
panBatt_A_XY[1] = checkPAL(readEEPROM(panBatt_A_y_ADDR));
 
//setBit(panA_REG, BatB_BIT, readEEPROM(panBatt_B_en_ADDR));
//panBatt_B_XY[0] = readEEPROM(panBatt_B_x_ADDR);
//panBatt_B_XY[1] = checkPAL(readEEPROM(panBatt_B_y_ADDR));
setBit(panA_REG, GPSats_BIT, readEEPROM(panGPSats_en_ADDR));
panGPSats_XY[0] = readEEPROM(panGPSats_x_ADDR);
panGPSats_XY[1] = checkPAL(readEEPROM(panGPSats_y_ADDR));
 
setBit(panA_REG, GPL_BIT, readEEPROM(panGPL_en_ADDR));
panGPL_XY[0] = readEEPROM(panGPL_x_ADDR);
panGPL_XY[1] = checkPAL(readEEPROM(panGPL_y_ADDR));
setBit(panA_REG, GPS_BIT, readEEPROM(panGPS_en_ADDR));
panGPS_XY[0] = readEEPROM(panGPS_x_ADDR);
panGPS_XY[1] = checkPAL(readEEPROM(panGPS_y_ADDR));
 
//****** Second set of 8 Panels ******
setBit(panB_REG, Rose_BIT, readEEPROM(panRose_en_ADDR));
panRose_XY[0] = readEEPROM(panRose_x_ADDR);
panRose_XY[1] = checkPAL(readEEPROM(panRose_y_ADDR));
 
setBit(panB_REG, Head_BIT, readEEPROM(panHeading_en_ADDR));
panHeading_XY[0] = readEEPROM(panHeading_x_ADDR);
panHeading_XY[1] = checkPAL(readEEPROM(panHeading_y_ADDR));
 
setBit(panB_REG, MavB_BIT, readEEPROM(panMavBeat_en_ADDR));
panMavBeat_XY[0] = readEEPROM(panMavBeat_x_ADDR);
panMavBeat_XY[1] = checkPAL(readEEPROM(panMavBeat_y_ADDR));
 
setBit(panB_REG, HDis_BIT, readEEPROM(panHomeDis_en_ADDR));
panHomeDis_XY[0] = readEEPROM(panHomeDis_x_ADDR);
panHomeDis_XY[1] = checkPAL(readEEPROM(panHomeDis_y_ADDR));
 
setBit(panB_REG, HDir_BIT, readEEPROM(panHomeDir_en_ADDR));
panHomeDir_XY[0] = readEEPROM(panHomeDir_x_ADDR);
panHomeDir_XY[1] = checkPAL(readEEPROM(panHomeDir_y_ADDR));
 
//setBit(panB_REG, RSSI_BIT, readEEPROM(panRSSI_en_ADDR));
//panRSSI_XY[0] = readEEPROM(panRSSI_x_ADDR);
//panRSSI_XY[1] = checkPAL(readEEPROM(panRSSI_y_ADDR));
 
//****** Third set of 8 Panels ******
 
//setBit(panC_REG, CurA_BIT, readEEPROM(panCur_A_en_ADDR));
//panCur_A_XY[0] = readEEPROM(panCur_A_x_ADDR);
//panCur_A_XY[1] = checkPAL(readEEPROM(panCur_A_y_ADDR));
 
//setBit(panC_REG, CurB_BIT, readEEPROM(panCur_B_en_ADDR));
//panCur_B_XY[0] = readEEPROM(panCur_B_x_ADDR);
//panCur_B_XY[1] = checkPAL(readEEPROM(panCur_B_y_ADDR));
 
setBit(panC_REG, Alt_BIT, readEEPROM(panAlt_en_ADDR));
panAlt_XY[0] = readEEPROM(panAlt_x_ADDR);
panAlt_XY[1] = checkPAL(readEEPROM(panAlt_y_ADDR));
 
setBit(panC_REG, Vel_BIT, readEEPROM(panVel_en_ADDR));
panVel_XY[0] = readEEPROM(panVel_x_ADDR);
panVel_XY[1] = checkPAL(readEEPROM(panVel_y_ADDR));
 
setBit(panC_REG, Thr_BIT, readEEPROM(panThr_en_ADDR));
panThr_XY[0] = readEEPROM(panThr_x_ADDR);
panThr_XY[1] = checkPAL(readEEPROM(panThr_y_ADDR));
 
setBit(panC_REG, FMod_BIT, readEEPROM(panFMod_en_ADDR));
panFMod_XY[0] = readEEPROM(panFMod_x_ADDR);
panFMod_XY[1] = checkPAL(readEEPROM(panFMod_y_ADDR));
 
setBit(panC_REG, Hor_BIT, readEEPROM(panHorizon_en_ADDR));
panHorizon_XY[0] = readEEPROM(panHorizon_x_ADDR);
panHorizon_XY[1] = checkPAL(readEEPROM(panHorizon_y_ADDR));
 
}
 
int checkPAL(int line){
if(line >= osd.getCenter() && osd.getMode() == 0){
line -= 3;//Cutting lines offset after center if NTSC
}
return line;
}
 
void updateSettings(byte panel, byte panel_x, byte panel_y, byte panel_s ) {
if(panel >= 1 && panel <= 32) {
writeEEPROM(panel_s, (6 * panel) - 6 + 0);
if(panel_s != 0) {
writeEEPROM(panel_x, (6 * panel) - 6 + 2);
writeEEPROM(panel_y, (6 * panel) - 6 + 4);
}
osd.clear();
readSettings();
}
}
 
/C-OSD/arducam-osd/ArduCAM_OSD/OSD_Func.h
0,0 → 1,81
//------------------ Heading and Compass ----------------------------------------
 
static char buf_show[12];
const char buf_Rule[36] = {0xc2,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc4,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc3,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc5,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0};
void setHeadingPatern()
{
int start;
start = round((osd_heading * 36)/360);
start -= 5;
if(start < 0) start += 36;
for(int x=0; x <= 10; x++){
buf_show[x] = buf_Rule[start];
if(++start > 35) start = 0;
}
buf_show[11] = '\0';
}
 
//------------------ Battery Remaining Picture ----------------------------------
 
char setBatteryPic(uint16_t bat_level)
{
if(bat_level <= 100){
return 0xb4;
}
else if(bat_level <= 300){
return 0xb5;
}
else if(bat_level <= 400){
return 0xb6;
}
else if(bat_level <= 500){
return 0xb7;
}
else if(bat_level <= 800){
return 0xb8;
}
else return 0xb9;
}
 
//------------------ Home Distance and Direction Calculation ----------------------------------
 
void setHomeVars(OSD &osd)
{
float dstlon, dstlat;
long bearing;
if(osd_got_home == 0 && osd_fix_type > 1){
osd_home_lat = osd_lat;
osd_home_lon = osd_lon;
osd_home_alt = osd_alt;
osd_got_home = 1;
}
else if(osd_got_home == 1){
// shrinking factor for longitude going to poles direction
float rads = fabs(osd_home_lat) * 0.0174532925;
double scaleLongDown = cos(rads);
double scaleLongUp = 1.0f/cos(rads);
 
//DST to Home
dstlat = fabs(osd_home_lat - osd_lat) * 111319.5;
dstlon = fabs(osd_home_lon - osd_lon) * 111319.5 * scaleLongDown;
osd_home_distance = sqrt(sq(dstlat) + sq(dstlon));
 
//DIR to Home
dstlon = (osd_home_lon - osd_lon); //OffSet_X
dstlat = (osd_home_lat - osd_lat) * scaleLongUp; //OffSet Y
bearing = 90 + (atan2(dstlat, -dstlon) * 57.295775); //absolut home direction
if(bearing < 0) bearing += 360;//normalization
bearing = bearing - 180;//absolut return direction
if(bearing < 0) bearing += 360;//normalization
bearing = bearing - osd_heading;//relative home direction
if(bearing < 0) bearing += 360; //normalization
osd_home_direction = round((float)(bearing/360.0f) * 16.0f) + 1;//array of arrows =)
if(osd_home_direction > 16) osd_home_direction = 0;
 
}
}
/C-OSD/arducam-osd/ArduCAM_OSD/OSD_Panels.ino
0,0 → 1,570
/******* STARTUP PANEL *******/
 
void startPanels(){
osd.clear();
// Display our logo
panLogo(10,5);
}
 
/******* PANELS - POSITION *******/
 
void writePanels(){
if(millis() < (lastMAVBeat + 2000)){
//osd.clear();
//Testing bits from 8 bit register A
if(ISa(Cen_BIT)) panCenter(panCenter_XY[0], panCenter_XY[1]); //4x2
if(ISa(Pit_BIT)) panPitch(panPitch_XY[0], panPitch_XY[1]); //5x1
if(ISa(Rol_BIT)) panRoll(panRoll_XY[0], panRoll_XY[1]); //5x1
if(ISa(BatA_BIT)) panBatt_A(panBatt_A_XY[0], panBatt_A_XY[1]); //7x1
// if(ISa(BatB_BIT)) panBatt_B(panBatt_B_XY[0], panBatt_B_XY[1]); //7x1
if(ISa(GPSats_BIT)) panGPSats(panGPSats_XY[0], panGPSats_XY[1]); //5x1
if(ISa(GPL_BIT)) panGPL(panGPL_XY[0], panGPL_XY[1]); //2x1
if(ISa(GPS_BIT)) panGPS(panGPS_XY[0], panGPS_XY[1]); //12x3
//Testing bits from 8 bit register B
if(ISb(Rose_BIT)) panRose(panRose_XY[0], panRose_XY[1]); //13x3
if(ISb(Head_BIT)) panHeading(panHeading_XY[0], panHeading_XY[1]); //13x3
if(ISb(MavB_BIT)) panMavBeat(panMavBeat_XY[0], panMavBeat_XY[1]); //13x3
 
if(osd_got_home == 1){
if(ISb(HDis_BIT)) panHomeDis(panHomeDis_XY[0], panHomeDis_XY[1]); //13x3
if(ISb(HDir_BIT)) panHomeDir(panHomeDir_XY[0], panHomeDir_XY[1]); //13x3
}
// if(ISb(WDir_BIT)) panWayPDir(panWayPDir_XY[0], panWayPDir_XY[1]); //??x??
// if(ISb(WDis_BIT)) panWayPDis(panWayPDis_XY[0], panWayPDis_XY[1]); //??x??
// if(ISb(WRSSI_BIT)) panRSSI(panRSSI_XY[0], panRSSI_XY[1]); //??x??
 
//Testing bits from 8 bit register C
//if(osd_got_home == 1){
if(ISc(Alt_BIT)) panAlt(panAlt_XY[0], panAlt_XY[1]); //
if(ISc(Vel_BIT)) panVel(panVel_XY[0], panVel_XY[1]); //
//}
if(ISc(Thr_BIT)) panThr(panThr_XY[0], panThr_XY[1]); //
if(ISc(FMod_BIT)) panFlightMode(panFMod_XY[0], panFMod_XY[1]); //
if(ISc(Hor_BIT)) panHorizon(panHorizon_XY[0], panHorizon_XY[1]); //14x5
}
else{
osd.clear();
waitingMAVBeats = 1;
// Display our logo and wait...
panWaitMAVBeats(5,10); //Waiting for MAVBeats...
}
// OSD debug for development (Shown on top-middle panels)
#ifdef membug
osd.setPanel(13,4);
osd.openPanel();
osd.printf("%i",freeMem());
osd.closePanel();
#endif
}
 
/******* PANELS - DEFINITION *******/
 
 
/* **************************************************************** */
// Panel : panAlt
// Needs : X, Y locations
// Output : Alt symbol and altitude value in meters from MAVLink
// Size : 1 x 7Hea (rows x chars)
// Staus : done
 
void panAlt(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
//osd.printf("%c%5.0f%c",0x85, (double)(osd_alt - osd_home_alt), 0x8D);
osd.printf("%c%5.0f%c",0x85, (double)(osd_alt), 0x8D);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panVel
// Needs : X, Y locations
// Output : Velocity value from MAVlink with symbols
// Size : 1 x 7 (rows x chars)
// Staus : done
 
void panVel(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%3.0f%c",0x86,(double)osd_groundspeed,0x88);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panThr
// Needs : X, Y locations
// Output : Throttle value from MAVlink with symbols
// Size : 1 x 7 (rows x chars)
// Staus : done
 
void panThr(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%3.0i%c",0x87,osd_throttle,0x25);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panHomeDis
// Needs : X, Y locations
// Output : Home Symbol with distance to home in meters
// Size : 1 x 7 (rows x chars)
// Staus : done
 
void panHomeDis(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%5.0f%c", 0x1F, (double)osd_home_distance, 0x8D);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panCenter
// Needs : X, Y locations
// Output : 2 row croshair symbol created by 2 x 4 chars
// Size : 2 x 4 (rows x chars)
// Staus : done
 
void panCenter(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\x05\x03\x04\x05|\x15\x13\x14\x15"));
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panHorizon
// Needs : X, Y locations
// Output : 12 x 4 Horizon line surrounded by 2 cols (left/right rules)
// Size : 14 x 4 (rows x chars)
// Staus : done
 
void panHorizon(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xd8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xd9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9"));
osd.closePanel();
showHorizon((first_col + 1), first_line);
}
 
/* **************************************************************** */
// Panel : panPitch
// Needs : X, Y locations
// Output : -+ value of current Pitch from vehicle with degree symbols and pitch symbol
// Size : 1 x 6 (rows x chars)
// Staus : done
 
void panPitch(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4i%c%c",osd_pitch,0xb0,0xb1);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panRoll
// Needs : X, Y locations
// Output : -+ value of current Roll from vehicle with degree symbols and roll symbol
// Size : 1 x 6 (rows x chars)
// Staus : done
 
void panRoll(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4i%c%c",osd_roll,0xb0,0xb2);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panBattery A (Voltage 1)
// Needs : X, Y locations
// Output : Voltage value as in XX.X and symbol of over all battery status
// Size : 1 x 8 (rows x chars)
// Staus : done
 
void panBatt_A(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
/*************** This commented code is for the next ArduPlane Version
#ifdef MAVLINK10
if(osd_battery_remaining_A > 100){
osd.printf(" %c%5.2f%c", 0xE2, (double)osd_vbat_A, 0x8E);
}
#else
if(osd_battery_remaining_A > 1000){
osd.printf(" %c%5.2f%c", 0xE2, (double)osd_vbat_A, 0x8E);
}
#endif //MAVLINK10
else osd.printf("%c%5.2f%c%c", 0xE2, (double)osd_vbat_A, 0x8E, osd_battery_pic_A);
*/
osd.printf(" %c%5.2f%c", 0xE2, (double)osd_vbat_A, 0x8E);
osd.closePanel();
}
 
//------------------ Panel: Startup ArduCam OSD LOGO -------------------------------
 
void panLogo(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\x20\x20\x20\x20\xba\xbb\xbc\xbd\xbe|\x20\x20\x20\x20\xca\xcb\xcc\xcd\xce|ArduCam OSD"));
osd.closePanel();
}
 
//------------------ Panel: Waiting for MAVLink HeartBeats -------------------------------
 
void panWaitMAVBeats(int first_col, int first_line){
panLogo(10,5);
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("Waiting for|MAVLink heartbeats..."));
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panGPL
// Needs : X, Y locations
// Output : 1 static symbol with changing FIX symbol
// Size : 1 x 2 (rows x chars)
// Staus : done
 
void panGPL(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
switch(osd_fix_type) {
case 0:
osd.printf_P(PSTR("\x10\x20"));
break;
case 1:
osd.printf_P(PSTR("\x10\x20"));
break;
case 2:
osd.printf_P(PSTR("\x11\x20"));//If not APM, x01 would show 2D fix
break;
case 3:
osd.printf_P(PSTR("\x11\x20"));//If not APM, x02 would show 3D fix
break;
}
/* if(osd_fix_type <= 1) {
osd.printf_P(PSTR("\x10"));
} else {
osd.printf_P(PSTR("\x11"));
} */
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panGPSats
// Needs : X, Y locations
// Output : 1 symbol and number of locked satellites
// Size : 1 x 5 (rows x chars)
// Staus : done
 
void panGPSats(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%2i", 0x0f,osd_satellites_visible);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panGPS
// Needs : X, Y locations
// Output : two row numeric value of current GPS location with LAT/LON symbols as on first char
// Size : 2 x 12 (rows x chars)
// Staus : done
 
void panGPS(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%11.6f|%c%11.6f", 0x83, (double)osd_lat, 0x84, (double)osd_lon);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panHeading
// Needs : X, Y locations
// Output : Symbols with numeric compass heading value
// Size : 1 x 5 (rows x chars)
// Staus : not ready
 
void panHeading(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4.0f%c", (double)osd_heading, 0xb0);
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panRose
// Needs : X, Y locations
// Output : a dynamic compass rose that changes along the heading information
// Size : 2 x 13 (rows x chars)
// Staus : done
 
void panRose(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
//osd_heading = osd_yaw;
//if(osd_yaw < 0) osd_heading = 360 + osd_yaw;
osd.printf("%s|%c%s%c", "\x20\xc0\xc0\xc0\xc0\xc0\xc7\xc0\xc0\xc0\xc0\xc0\x20", 0xd0, buf_show, 0xd1);
osd.closePanel();
}
 
 
/* **************************************************************** */
// Panel : panBoot
// Needs : X, Y locations
// Output : Booting up text and empty bar after that
// Size : 1 x 21 (rows x chars)
// Staus : done
 
void panBoot(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("Booting up:\xed\xf2\xf2\xf2\xf2\xf2\xf2\xf2\xf3"));
osd.closePanel();
 
}
 
/* **************************************************************** */
// Panel : panMavBeat
// Needs : X, Y locations
// Output : 2 symbols, one static and one that blinks on every 50th received
// mavlink packet.
// Size : 1 x 2 (rows x chars)
// Staus : done
 
void panMavBeat(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
if(mavbeat == 1){
osd.printf_P(PSTR("\xEA\xEC"));
mavbeat = 0;
}
else{
osd.printf_P(PSTR("\xEA\xEB"));
}
osd.closePanel();
}
 
 
/* **************************************************************** */
// Panel : panWPDir
// Needs : X, Y locations
// Output : 2 symbols that are combined as one arrow, shows direction to next waypoint
// Size : 1 x 2 (rows x chars)
// Staus : not ready
 
void panWPDir(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
showArrow();
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panHomeDir
// Needs : X, Y locations
// Output : 2 symbols that are combined as one arrow, shows direction to home
// Size : 1 x 2 (rows x chars)
// Status : not tested
 
void panHomeDir(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
showArrow();
osd.closePanel();
}
 
/* **************************************************************** */
// Panel : panFlightMode
// Needs : X, Y locations
// Output : 2 symbols, one static name symbol and another that changes by flight modes
// Size : 1 x 2 (rows x chars)
// Status : done
 
void panFlightMode(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
#ifndef MAVLINK10
if(apm_mav_type == 2){//ArduCopter MultiRotor or ArduCopter Heli
if(osd_mode == 100) osd.printf_P(PSTR("\xE0""stab"));//Stabilize
if(osd_mode == 101) osd.printf_P(PSTR("\xE0""acro"));//Acrobatic
if(osd_mode == 102) osd.printf_P(PSTR("\xE0""alth"));//Alt Hold
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0""auto"));//Auto
if(osd_mode == MAV_MODE_GUIDED && osd_nav_mode == MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0""guid"));//Guided
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_HOLD) osd.printf_P(PSTR("\xE0""loit"));//Loiter
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_RETURNING) osd.printf_P(PSTR("\xE0""retl"));//Return to Launch
if(osd_mode == 107) osd.printf_P(PSTR("\xE0""circ")); // Circle
if(osd_mode == 108) osd.printf_P(PSTR("\xE0""posi")); // Position
if(osd_mode == 109) osd.printf_P(PSTR("\xE0""land")); // Land
if(osd_mode == 110) osd.printf_P(PSTR("\xE0""oflo")); // OF_Loiter
}
else if(apm_mav_type == 1){//ArduPlane
if(osd_mode == MAV_MODE_TEST1 && osd_nav_mode == MAV_NAV_VECTOR) osd.printf_P(PSTR("\xE0""stab"));//Stabilize
if(osd_mode == MAV_MODE_MANUAL && osd_nav_mode == MAV_NAV_VECTOR) osd.printf_P(PSTR("\xE0""manu"));//Manual
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_LOITER) osd.printf_P(PSTR("\xE0""loit"));//Loiter
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_RETURNING) osd.printf_P(PSTR("\xE0""retl"));//Return to Launch
if(osd_mode == MAV_MODE_TEST2 && osd_nav_mode == 1) osd.printf_P(PSTR("\xE0""fbwa"));//FLY_BY_WIRE_A
if(osd_mode == MAV_MODE_TEST2 && osd_nav_mode == 2) osd.printf_P(PSTR("\xE0""fbwb"));//FLY_BY_WIRE_B
if(osd_mode == MAV_MODE_GUIDED) osd.printf_P(PSTR("\xE0""guid"));//GUIDED
if(osd_mode == MAV_MODE_AUTO && osd_nav_mode == MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0""auto"));//AUTO
if(osd_mode == MAV_MODE_TEST3) osd.printf_P(PSTR("\xE0""circ"));//CIRCLE
}
#else
if(apm_mav_type == 2){//ArduCopter MultiRotor or ArduCopter Heli
if(osd_mode == 0) osd.printf_P(PSTR("\xE0""stab"));//Stabilize
if(osd_mode == 1) osd.printf_P(PSTR("\xE0""acro"));//Acrobatic
if(osd_mode == 2) osd.printf_P(PSTR("\xE0""alth"));//Alt Hold
if(osd_mode == 3) osd.printf_P(PSTR("\xE0""auto"));//Auto
if(osd_mode == 4) osd.printf_P(PSTR("\xE0""guid"));//Guided
if(osd_mode == 5) osd.printf_P(PSTR("\xE0""loit"));//Loiter
if(osd_mode == 6) osd.printf_P(PSTR("\xE0""retl"));//Return to Launch
if(osd_mode == 7) osd.printf_P(PSTR("\xE0""circ")); // Circle
if(osd_mode == 8) osd.printf_P(PSTR("\xE0""posi")); // Position
if(osd_mode == 9) osd.printf_P(PSTR("\xE0""land")); // Land
if(osd_mode == 10) osd.printf_P(PSTR("\xE0""oflo")); // OF_Loiter
}
else if(apm_mav_type == 1){//ArduPlane
if(osd_mode == 2 ) osd.printf_P(PSTR("\xE0""stab"));//Stabilize
if(osd_mode == 0) osd.printf_P(PSTR("\xE0""manu"));//Manual
if(osd_mode == 12) osd.printf_P(PSTR("\xE0""loit"));//Loiter
if(osd_mode == 11 ) osd.printf_P(PSTR("\xE0""retl"));//Return to Launch
if(osd_mode == 5 ) osd.printf_P(PSTR("\xE0""fbwa"));//FLY_BY_WIRE_A
if(osd_mode == 6 ) osd.printf_P(PSTR("\xE0""fbwb"));//FLY_BY_WIRE_B
if(osd_mode == 15) osd.printf_P(PSTR("\xE0""guid"));//GUIDED
if(osd_mode == 10 ) osd.printf_P(PSTR("\xE0""auto"));//AUTO
if(osd_mode == 1) osd.printf_P(PSTR("\xE0""circ"));//CIRCLE
}
#endif
osd.closePanel();
}
 
 
// ---------------- EXTRA FUNCTIONS ----------------------
// Show those fancy 2 char arrows
void showArrow() {
switch(osd_home_direction) {
case 0:
osd.printf_P(PSTR("\x90\x91"));
break;
case 1:
osd.printf_P(PSTR("\x90\x91"));
break;
case 2:
osd.printf_P(PSTR("\x92\x93"));
break;
case 3:
osd.printf_P(PSTR("\x94\x95"));
break;
case 4:
osd.printf_P(PSTR("\x96\x97"));
break;
case 5:
osd.printf_P(PSTR("\x98\x99"));
break;
case 6:
osd.printf_P(PSTR("\x9A\x9B"));
break;
case 7:
osd.printf_P(PSTR("\x9C\x9D"));
break;
case 8:
osd.printf_P(PSTR("\x9E\x9F"));
break;
case 9:
osd.printf_P(PSTR("\xA0\xA1"));
break;
case 10:
osd.printf_P(PSTR("\xA2\xA3"));
break;
case 11:
osd.printf_P(PSTR("\xA4\xA5"));
break;
case 12:
osd.printf_P(PSTR("\xA6\xA7"));
break;
case 13:
osd.printf_P(PSTR("\xA8\xA9"));
break;
case 14:
osd.printf_P(PSTR("\xAA\xAB"));
break;
case 15:
osd.printf_P(PSTR("\xAC\xAD"));
break;
case 16:
osd.printf_P(PSTR("\xAE\xAF"));
break;
}
}
 
// Calculate and shows Artificial Horizon
void showHorizon(int start_col, int start_row) {
 
int x, nose, row, minval, hit, subval = 0;
int cols = 12;
int rows = 5;
int col_hit[cols];
float pitch, roll;
(abs(osd_pitch) == 90)?pitch = 89.99 * (90/osd_pitch) * -0.017453293:pitch = osd_pitch * -0.017453293;
(abs(osd_roll) == 90)?roll = 89.99 * (90/osd_roll) * 0.017453293:roll = osd_roll * 0.017453293;
 
nose = round(tan(pitch) * (rows*9));
for(int col=1;col <= cols;col++){
x = (col * 12) - (cols * 6) - 6;//center X point at middle of each col
col_hit[col-1] = (tan(roll) * x) + nose + (rows*9) - 1;//calculating hit point on Y plus offset to eliminate negative values
//col_hit[(col-1)] = nose + (rows * 9);
}
 
for(int col=0;col < cols; col++){
hit = col_hit[col];
if(hit > 0 && hit < (rows * 18)){
row = rows - ((hit-1)/18);
minval = rows*18 - row*18 + 1;
subval = hit - minval;
subval = round((subval*9)/18);
if(subval == 0) subval = 1;
printHit(start_col + col, start_row + row - 1, subval);
}
}
}
 
void printHit(byte col, byte row, byte subval){
osd.openSingle(col, row);
switch (subval){
case 1:
osd.printf_P(PSTR("\x06"));
break;
case 2:
osd.printf_P(PSTR("\x07"));
break;
case 3:
osd.printf_P(PSTR("\x08"));
break;
case 4:
osd.printf_P(PSTR("\x09"));
break;
case 5:
osd.printf_P(PSTR("\x0a"));
break;
case 6:
osd.printf_P(PSTR("\x0b"));
break;
case 7:
osd.printf_P(PSTR("\x0c"));
break;
case 8:
osd.printf_P(PSTR("\x0d"));
break;
case 9:
osd.printf_P(PSTR("\x0e"));
break;
}
}
/C-OSD/arducam-osd/ArduCAM_OSD/OSD_Vars.h
0,0 → 1,88
/*Panels variables*/
//Will come from APM telem port
 
static float osd_vbat_A = 0; // Battery A voltage in milivolt
//static float osd_curr_A = 0; // Battery A current
static uint16_t osd_battery_remaining_A = 0; // 0 to 100 <=> 0 to 1000
static uint8_t osd_battery_pic_A = 0xb4; // picture to show battery remaining
//static float osd_vbat_B = 0; // voltage in milivolt
//static float osd_curr_B = 0; // Battery B current
//static uint16_t osd_battery_remaining_B = 0; // 0 to 100 <=> 0 to 1000
//static uint8_t osd_battery_pic_B = 0xb4; // picture to show battery remaining
 
static uint16_t osd_mode = 0; // Navigation mode from RC AC2 = CH5, APM = CH8
static uint8_t osd_nav_mode = 0; // Navigation mode from RC AC2 = CH5, APM = CH8
 
static float osd_lat = 0; // latidude
static float osd_lon = 0; // longitude
static uint8_t osd_satellites_visible = 0; // number of satelites
static uint8_t osd_fix_type = 0; // GPS lock 0-1=no fix, 2=2D, 3=3D
 
static uint8_t osd_got_home = 0; // tels if got home position or not
static float osd_home_lat = 0; // home latidude
static float osd_home_lon = 0; // home longitude
static float osd_home_alt = 0;
static long osd_home_distance = 0; // distance from home
static uint8_t osd_home_direction; // Arrow direction pointing to home (1-16 to CW loop)
 
static int8_t osd_pitch = 0; // pitch form DCM
static int8_t osd_roll = 0; // roll form DCM
static int8_t osd_yaw = 0; // relative heading form DCM
static float osd_heading = 0; // ground course heading from GPS
static float osd_alt = 0; // altitude
static float osd_groundspeed = 0; // ground speed
static uint16_t osd_throttle = 0; // throtle
 
//MAVLink session control
static boolean mavbeat = 0;
static float lastMAVBeat = 0;
static boolean waitingMAVBeats = 1;
static uint8_t apm_mav_type;
static uint8_t apm_mav_system;
static uint8_t apm_mav_component;
static boolean enable_mav_request = 0;
 
// Panel BIT registers
byte panA_REG = 0b00000000;
byte panB_REG = 0b00000000;
byte panC_REG = 0b00000000;
 
byte modeScreen = 0; //NTSC:0, PAL:1
 
byte SerCMD1 = 0;
byte SerCMD2 = 0;
 
 
int tempvar; // Temporary variable used on many places around the OSD
 
// First 8 panels and their X,Y coordinate holders
byte panCenter_XY[2]; // = { 13,7,0 };
byte panPitch_XY[2]; // = { 11,1 };
byte panRoll_XY[2]; // = { 23,7 };
byte panBatt_A_XY[2]; // = { 23,1 };
//byte panBatt_B_XY[2]; // = { 23,3 };
byte panGPSats_XY[2]; // = { 2,12 };
byte panGPL_XY[2]; // = { 2,11 };
byte panGPS_XY[2]; // = { 2,13 };
 
// Second 8 set of panels and their X,Y coordinate holders
byte panRose_XY[2]; // = { 16,13 };
byte panHeading_XY[2]; // = { 16,12 };
byte panMavBeat_XY[2]; // = { 2,10 };
byte panHomeDir_XY[2]; // = { 0,0 };
byte panHomeDis_XY[2]; // = { 0,0 };
byte panWPDir_XY[2]; // = { 0,0 };
byte panWPDis_XY[2]; // = { 0,0 };
//byte panRSSI_XY[2] = { 0,0 };
 
// Third set of panels and their X,Y coordinate holders
//byte panCur_A_XY[2]; // = { 23,1 };
//byte panCur_B_XY[2]; // = { 23,3 };
byte panAlt_XY[2]; // = { 0,0 };
byte panVel_XY[2]; // = { 0,0 };
byte panThr_XY[2]; // = { 0,0 };
byte panFMod_XY[2]; // = { 0,0 };
byte panHorizon_XY[2]; // = {8,centercalc}
//byte panXXX_XY[2] = { 0,0 };
 
 
/C-OSD/arducam-osd/ArduCAM_OSD/Spi.cpp
0,0 → 1,56
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
#include "Spi.h"
 
//---------- constructor ----------------------------------------------------
 
SPI::SPI()
{
// initialize the SPI pins
pinMode(SCK_PIN, OUTPUT);
pinMode(MOSI_PIN, OUTPUT);
pinMode(MISO_PIN, INPUT);
pinMode(SS_PIN, OUTPUT); // <------- !!! (Remember! This pin will select USB host chip Max3421)
 
// enable SPI Master, MSB, SPI mode 0, FOSC/4
mode(0);
}
 
//------------------ mode ---------------------------------------------------
 
void SPI::mode(byte config)
{
byte tmp;
 
// enable SPI master with configuration byte specified
SPCR = 0;
SPCR = (config & 0x7F) | (1<<SPE) | (1<<MSTR);
tmp = SPSR;
tmp = SPDR;
}
 
//------------------ transfer -----------------------------------------------
 
byte SPI::transfer(byte value)
{
SPDR = value;
while (!(SPSR & (1<<SPIF))) ;
return SPDR;
}
 
byte SPI::transfer(byte value, byte period)
{
SPDR = value;
if (period > 0) delayMicroseconds(period);
while (!(SPSR & (1<<SPIF))) ;
return SPDR;
}
 
 
//---------- preinstantiate SPI object --------------------------------------
 
SPI Spi = SPI();
/C-OSD/arducam-osd/ArduCAM_OSD/Spi.h
0,0 → 1,27
#ifndef Spi_h
#define Spi_h
 
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
 
#define SCK_PIN 13
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10 // <------- !!! (Remember! This pin will select USB host chip Max3421)
 
class SPI
{
public:
SPI(void);
void mode(byte);
byte transfer(byte);
byte transfer(byte, byte);
};
 
extern SPI Spi;
 
#endif
/C-OSD/arducam-osd/ArduCamOSD_Beta/ArduCamOSD_Beta.pde
0,0 → 1,269
/*
ArduCam OSD - The Arduino based Remote Camera Control and OSD.
 
File : ArduCamOSD_Beta.pde
Version : v0.95, 17 may 2011
 
Author(s): Sandro Benigno
FastSerial and BetterStream from Michael Smith
USB host and PTP library from Oleg Mazurov - circuitsathome.com
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include <FastSerial.h>
 
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
 
#undef PSTR
#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];}))
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <stdio.h>
 
#include "Spi.h"
#include "Wire.h" //Future i2c comunication. Uncommented to watch hex size
 
/****** USB INCLUDES ******/
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Usb.h>
#include <ptp.h>
#include <ptpdebug.h>
#include <canonps.h>
#include <simpletimer.h>
#include "pseventparser.h"
#include "ptpobjinfoparser.h"
 
#define DEV_ADDR 1
//Example -> Canon PowerShot S3 IS
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
#define MAX_USB_STRING_LEN 64
 
/****** OSD INCLUDES ******/
#include "ArduCam_Max7456.h"
#include "OSD_Vars.h"
 
#define SerPri Serial.print
#define SerPriln Serial.println
#define SerAva Serial.available
#define SerRea Serial.read
 
void setup();
void loop();
 
FastSerialPort0(Serial);
 
/****** CAMSTATES CLASS ******/
class CamStateHandlers : public PSStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
/****** END CAMSTATES ******/
 
/****** OBJECTS ******/
OSD osd; //OSD object instance
CanonPS Ps(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates); //Canon PS object instance
SimpleTimer displayTimer, cameraTimer; //Timers
 
/********** HANDLERS**********/
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
cameraTimer.Disable();
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
{
Notify(PSTR("Camera connected\r\n"));
stateConnected = true;
cameraTimer.Enable();
}
}
 
/**********END TIMERS HANDLERS******/
 
//Demo vars control (!!! Remember to delete it after APM integration)
float lastGPSUpdate = 0;
float lastBatUpdate = 0;
float lastHeadUpdate = 0;
float headIncrementSignal = 1;
 
void setup()
{
Serial.begin(57600);
pinMode(10, OUTPUT); //usb host CS
pinMode(6, OUTPUT); //OSD CS
unplugSlaves();
 
osd.init();
startPanels();
delay( 200 );
unplugSlaves();
Ps.Setup();
delay( 2000 );
osd.clear();
//Setting Timers
displayTimer.Set(&OnDisplayTimer, 150);
cameraTimer.Set(&OnCameraTimer, 500);
delay( 200 );
 
displayTimer.Enable(); //Starting OSD timer (camera timer depends on camera is attached or not)
}
 
void loop(){
unplugSlaves();
displayTimer.Run();
unplugSlaves();
Ps.Task();
cameraTimer.Run();
}
 
void OnCameraTimer()
{
readSerialCommand();
}
 
void OnDisplayTimer()
{
osd_job();
}
 
void writeOSD() //Interrupt function (ISR)
{
//Serial.println("Interrupt!");
detachInterrupt(0); //It will respect the new aquisition
unplugSlaves();
writePanels();//Check OSD_Panels Tab!
}
 
void osd_job()
{
/*Its the place for data aquisition*/
/*JUST Simulated here as DEMO and test*/
if(millis() > lastGPSUpdate + 100){
lastGPSUpdate = millis();
lat+=0.0001;
lon+=0.002;
hom_dis+=1;
}
if(millis() > lastHeadUpdate + 100){
lastHeadUpdate = millis();
//looping forever
if(head >= 180){
head -= 360;
}else head+=5;
//or ping-pong
/*if(head >= 180) headIncrementSignal = -1;
if(head <= -180) headIncrementSignal = 1;
head += 1.8 * headIncrementSignal;*/
}
if(millis() > lastBatUpdate + 2000){
lastBatUpdate = millis();
alt++;
vel+=5;
bat_val -= 0.1;
}
//Next line will arm OSD function for the next VSync interruption
attachInterrupt(0, writeOSD, FALLING);
}
 
void readSerialCommand() {
char queryType;
if (SerAva()) {
queryType = SerRea();
switch (queryType) {
case 'A': //Activate Capture
Ps.Initialize(true);
//mapping capture target to SD card
Ps.SetDevicePropValue(PS_DPC_CaptureTransferMode, (uint16_t)0x0F);
break;
case 'C': //Capture!!!
Ps.Capture();
break;
case 'D': //Deactivate Capture
Ps.Operation(PS_OC_ViewfinderOff);
Ps.Initialize(false);
break;
case 'L': //Focus Lock
Ps.Operation(PS_OC_FocusLock);
delay(50);
break;
case 'O': //ViewFinder Output. 1 = LCD. 2 = AV.
Ps.SetDevicePropValue(PS_DPC_CameraOutput, (uint16_t)readFloatSerial());
break;
case 'U': //Focus Unlock
Ps.Operation(PS_OC_FocusUnlock);
break;
case 'V': //ViewFinder ON/OFF
if((uint16_t)readFloatSerial() == 0){
Ps.Operation(PS_OC_ViewfinderOff);
}
else Ps.Operation(PS_OC_ViewfinderOn);
break;
case 'X': //Close session forever
Ps.Initialize(false);
break;
case 'Z': //Set Zoom
Ps.SetDevicePropValue(PS_DPC_Zoom, (uint16_t)readFloatSerial());
break;
}
}
}
 
float readFloatSerial() {
byte index = 0;
byte timeout = 0;
char data[128] = "";
 
do {
if (SerAva() == 0) {
delay(10);
timeout++;
}
else {
data[index] = SerRea();
timeout = 0;
index++;
}
}
while ((data[constrain(index-1, 0, 128)] != ';') && (timeout < 5) && (index < 128));
return atof(data);
}
 
void unplugSlaves(){
digitalWrite(10, HIGH); //unplug USB Host
digitalWrite(6, HIGH); //unplug OSD
}
/C-OSD/arducam-osd/ArduCamOSD_Beta/ArduCam_Max7456.cpp
0,0 → 1,160
#include <FastSerial.h>
 
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
 
#undef PSTR
#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];}))
 
#include "ArduCam_Max7456.h"
#include "WProgram.h"
#include "Spi.h"
 
volatile int x;
 
OSD::OSD()
{
}
 
//------------------ init ---------------------------------------------------
 
void OSD::init()
{
pinMode(MAX7456_SELECT,OUTPUT);
digitalWrite(MAX7456_SELECT,HIGH); //disable device
pinMode(MAX7456_VSYNC, INPUT);
//digitalWrite(MAX7456_VSYNC,HIGH); //enabling pull-up resistor
// force soft reset on Max7456
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_VM0_reg);
Spi.transfer(MAX7456_RESET);
digitalWrite(MAX7456_SELECT,HIGH);
delay(50);
 
// set all rows to same charactor white level, 90%
digitalWrite(MAX7456_SELECT,LOW);
for (x = 0; x < MAX7456_screen_rows; x++)
{
Spi.transfer(x + 0x10);
Spi.transfer(MAX7456_WHITE_level_120);
}
// define sync (auto,int,ext) and
// making sure the Max7456 is enabled
control(1);
//digitalWrite(MAX7456_SELECT,HIGH);
 
//Serial.println("Initialized!");
}
 
//------------------ plug ---------------------------------------------------
 
void OSD::plug()
{
digitalWrite(MAX7456_SELECT,LOW);
}
 
//------------------ clear ---------------------------------------------------
 
void OSD::clear()
{
// clear the screen
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_DMM_reg);
Spi.transfer(MAX7456_CLEAR_display);
digitalWrite(MAX7456_SELECT,HIGH);
}
 
//------------------ set panel -----------------------------------------------
 
void
OSD::setPanel(uint8_t st_col, uint8_t st_row){
start_col = st_col;
start_row = st_row;
col = st_col;
row = st_row;
//Serial.printf("setPanel -> %d %d %d %d\n", start_col, start_row, max_col, max_row);
}
 
//------------------ open panel ----------------------------------------------
 
void
OSD::openPanel(void){
unsigned int linepos;
byte settings, char_address_hi, char_address_lo;
//find [start address] position
linepos = row*30+col;
// divide 16 bits into hi & lo byte
char_address_hi = linepos >> 8;
char_address_lo = linepos;
 
//Auto increment turn writing fast (less SPI commands).
//No need to set next char address. Just send them
settings = MAX7456_INCREMENT_auto; //To Enable DMM Auto Increment
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_DMM_reg); //dmm
Spi.transfer(settings);
 
Spi.transfer(MAX7456_DMAH_reg); // set start address high
Spi.transfer(char_address_hi);
 
Spi.transfer(MAX7456_DMAL_reg); // set start address low
Spi.transfer(char_address_lo);
//Serial.printf("setPos -> %d %d\n", col, row);
}
 
//------------------ close panel ---------------------------------------------
 
void
OSD::closePanel(void){
Spi.transfer(MAX7456_DMDI_reg);
Spi.transfer(MAX7456_END_string); //This is needed "trick" to finish auto increment
digitalWrite(MAX7456_SELECT,HIGH);
//Serial.println("close");
row++; //only after finish the auto increment the new row will really act as desired
}
 
//------------------ write ---------------------------------------------------
 
void
OSD::write(uint8_t c){
if(c == '|'){
closePanel(); //It does all needed to finish auto increment and change current row
openPanel(); //It does all needed to re-enable auto increment
}
else{
Spi.transfer(MAX7456_DMDI_reg);
Spi.transfer(c);
}
}
 
//------------------
 
void
OSD::control(uint8_t ctrl){
digitalWrite(MAX7456_SELECT,LOW);
Spi.transfer(MAX7456_VM0_reg);
switch(ctrl){
case 0:
Spi.transfer(MAX7456_DISABLE_display);
break;
case 1:
//Spi.transfer(MAX7456_ENABLE_display_vert | MAX7456_SYNC_internal);
//Spi.transfer(MAX7456_ENABLE_display_vert | MAX7456_SYNC_external);
Spi.transfer(MAX7456_ENABLE_display_vert | MAX7456_SYNC_autosync);
break;
}
digitalWrite(MAX7456_SELECT,HIGH);
}
 
//------------------ pure virtual ones (just overriding) ---------------------
 
int OSD::available(void){
}
int OSD::read(void){
}
int OSD::peek(void){
}
void OSD::flush(void){
}
/C-OSD/arducam-osd/ArduCamOSD_Beta/ArduCam_Max7456.h
0,0 → 1,88
#ifndef ArduCam_Max7456_h
#define ArduCam_Max7456_h
 
/******* FROM DATASHEET *******/
 
//#define isPAL
#define MAX7456_SELECT 6//SS
#define MAX7456_VSYNC 2//INT0
 
#ifdef isPAL
#define MAX7456_MODE 0x40 //PAL mask 10000000
#else
#define MAX7456_MODE 0x00 //NTSC mask 00000000 ("|" will do nothing)
#endif
 
//MAX7456 reg write addresses
#define MAX7456_VM0_reg 0x00
#define MAX7456_VM1_reg 0x01
#define MAX7456_DMM_reg 0x04
#define MAX7456_DMAH_reg 0x05
#define MAX7456_DMAL_reg 0x06
#define MAX7456_DMDI_reg 0x07
#define MAX7456_OSDM_reg 0x0c //not used. Is to set mix
 
//MAX7456 reg write addresses to recording NVM process
#define MAX7456_CMM_reg 0x08
#define MAX7456_CMAH_reg 0x09
#define MAX7456_CMAL_reg 0x0a
#define MAX7456_CMDI_reg 0x0b
#define MAX7456_STAT_reg 0xa0 //0xa[X]
 
//DMM commands
#define MAX7456_CLEAR_display 0x04
#define MAX7456_CLEAR_display_vert 0x06
 
#define MAX7456_INCREMENT_auto 0x03
#define MAX7456_SETBG_local 0x20 //00100000 force local BG to defined brightness level VM1[6:4]
 
#define MAX7456_END_string 0xff
 
//VM0 commands mixed with mode NTSC or PAL mode
#define MAX7456_ENABLE_display (0x08 | MAX7456_MODE) //Don't used. Bad sync. 00001000
#define MAX7456_ENABLE_display_vert (0x0c | MAX7456_MODE) //Much better. Good sync 00001100
#define MAX7456_RESET (0x02 | MAX7456_MODE)
#define MAX7456_DISABLE_display (0x00 | MAX7456_MODE)
//VM0 command modifiers
#define MAX7456_SYNC_autosync 0x10
#define MAX7456_SYNC_internal 0x30
#define MAX7456_SYNC_external 0x20
//VM1 command modifiers
#define MAX7456_WHITE_level_80 0x03
#define MAX7456_WHITE_level_90 0x02
#define MAX7456_WHITE_level_100 0x01
#define MAX7456_WHITE_level_120 0x00
 
//If PAL
#ifdef isPAL
#define MAX7456_screen_size 480
#define MAX7456_screen_rows 15
#else
#define MAX7456_screen_size 390
#define MAX7456_screen_rows 13
#endif
 
//------------------ the OSD class -----------------------------------------------
 
class OSD: public BetterStream
{
public:
OSD(void);
void init(void);
void clear(void);
void plug(void);
void setPanel(uint8_t start_col, uint8_t start_row);
void openPanel(void);
void closePanel(void);
void control(uint8_t ctrl);
virtual int available(void);
virtual int read(void);
virtual int peek(void);
virtual void flush(void);
virtual void write(uint8_t c);
using BetterStream::write;
private:
uint8_t start_col, start_row, col, row;
};
 
#endif
/C-OSD/arducam-osd/ArduCamOSD_Beta/OSD_Panels.pde
0,0 → 1,114
/******* STARTUP PANEL *******/
 
void startPanels(){
osd.clear();
panLogo(10,5);
}
 
/******* PANELS - POSITION *******/
 
void writePanels(){
//osd.clear();
int offset = 2;
#ifdef isPAL
offset = 0;
#endif
//Top = no offset in NTSC
panHome(2,1); //1x2
panBattery(22,1); //7x1
//Bottom = need offset in NTSC
panCenter(13,8-offset); //4x2
panGPS(2,12-offset); //12x3
panCompass(16,12-offset); //13x3
//osd.control(1);
}
 
/******* PANELS - DEFINITION *******/
 
//------------------ Panel: Home ---------------------------------------------------
 
void panHome(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%5.0f%c|%c%5.0f%c|%c%5.0f%c",0x1f,hom_dis,0x8d,0x85,alt,0x8d,0x86,vel,0x88);
osd.closePanel();
}
 
//------------------ Panel: Center -------------------------------------------------
 
void panCenter(int first_col, int first_line){
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%c%c%c|%c%c%c%c",0x05,0x03,0x04,0x05,0x15,0x13,0x14,0x15);
osd.closePanel();
}
 
//------------------ Panel: Battery ------------------------------------------------
 
void panBattery(int first_col, int first_line){
char buf_bat[6] = {0xb4,0xb5,0xb6,0xb7,0xb8,0xb9}; //dead, critic, 25%, 50%, 75%, 100%
float critic = bat_cel * 3.0;
float full = bat_cel * 3.7;
float level = round((bat_val - critic) * (5 - 0) / (full - critic) + 0);
level = constrain(level, 0, 5);
if(bat_val < 0) bat_val = 0;
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4.1f%c%c", bat_val, 0x76, buf_bat[(int)level]);
osd.closePanel();
}
 
//------------------ Panel: Startup ArduCam OSD LOGO -------------------------------
 
void panLogo(int first_col, int first_line){
char buf_logo[][12] = { //11 Null terminated
{0x20,0x20,0x20,0x20,0xba,0xbb,0xbc,0xbd,0xbe},
{0x20,0x20,0x20,0x20,0xca,0xcb,0xcc,0xcd,0xce},
{"ArduCam OSD"}
};
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%s|%s|%s", buf_logo[0], buf_logo[1], buf_logo[2]);
osd.closePanel();
}
 
//------------------ Panel: GPS ---------------------------------------------------
 
void panGPS(int first_col, int first_line){
char buf_lock[3] = {0x10,0x11};
osd.setPanel(first_col, first_line);
osd.openPanel();
switch (gps_lock){
case 0:
osd.printf("%c%c%2.0f %c|%c%s|%c%s", 0x0f, 0xe3,(float)num_sat, buf_lock[0], 0x83, " ---- ", 0x84, " ---- ");
break;
case 1:
osd.printf("%c%c%2.0f %c|%c%11.6f|%c%11.6f", 0x0f, 0xe3,(float)num_sat, buf_lock[1], 0x83, lat, 0x84, lon);
break;
}
osd.closePanel();
}
 
//------------------ Panel: Compass -----------------------------------------------
 
void panCompass(int first_col, int first_line){
char buf_Rule[36] = {0xc2,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc4,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc3,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc5,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0};
char buf_mark[14] = {0x20,0xc0,0xc0,0xc0,0xc0,0xc0,0xc7,0xc0,0xc0,0xc0,0xc0,0xc0,0x20,'\0'};
char buf_show[12];
buf_show[11] = '\0';
int start;
start = round((head * 18)/180);
start -= 5;
if(start < 0) start += 36;
for(int x=0; x <= 10; x++){
buf_show[x] = buf_Rule[start];
if(++start > 35) start = 0;
}
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf(" %c%c%4.0f%c|%s|%c%s%c", 0xc8, 0xc9, head, 0xb0, buf_mark, 0xd0, buf_show, 0xd1);
osd.closePanel();
}
/C-OSD/arducam-osd/ArduCamOSD_Beta/OSD_Vars.h
0,0 → 1,29
#define on 1
#define off 0
 
/*Enabling disabling Panels Switches*/
//Not working yet!!! Just here to remember:
 
int swBat = on;
int swCam = off;
int swDir = off;
int swGPS = on;
int swAlt = off;
int swTim = off;
int swDis = off;
 
/*Panels variables*/
//Will come from APM telem port
 
float bat_val = 12.05; //current voltage
float bat_cel = 3; //number of cells
float lat = 34.178851; //latidude
float lon = -118.501655; //longitude
float hom_dis = 0; //distance from home <-------- !!! (probably must be calculated here)
float head = 170.0; //heading angle = compass
float alt = 0; //altitude <-------- !!! ( Need to know the default unit meters foots?)
float vel = 0; //velocity <-------- !!! ( Need to know the default unit meters/sec kmeters/h milles/h?)
int num_sat = 3; //number of satelites
int gps_lock = 1; //GPS lock... need verify if is boolean or not <--------- !!! ( Remember!!! Very important on startup time!!!)
 
 
/C-OSD/arducam-osd/ArduCamOSD_Beta/Spi.cpp
0,0 → 1,51
#include "WProgram.h"
#include "Spi.h"
 
//---------- constructor ----------------------------------------------------
 
SPI::SPI()
{
// initialize the SPI pins
pinMode(SCK_PIN, OUTPUT);
pinMode(MOSI_PIN, OUTPUT);
pinMode(MISO_PIN, INPUT);
pinMode(SS_PIN, OUTPUT); // <------- !!! (Remember! This pin will select USB host chip Max3421)
 
// enable SPI Master, MSB, SPI mode 0, FOSC/4
mode(0);
}
 
//------------------ mode ---------------------------------------------------
 
void SPI::mode(byte config)
{
byte tmp;
 
// enable SPI master with configuration byte specified
SPCR = 0;
SPCR = (config & 0x7F) | (1<<SPE) | (1<<MSTR);
tmp = SPSR;
tmp = SPDR;
}
 
//------------------ transfer -----------------------------------------------
 
byte SPI::transfer(byte value)
{
SPDR = value;
while (!(SPSR & (1<<SPIF))) ;
return SPDR;
}
 
byte SPI::transfer(byte value, byte period)
{
SPDR = value;
if (period > 0) delayMicroseconds(period);
while (!(SPSR & (1<<SPIF))) ;
return SPDR;
}
 
 
//---------- preinstantiate SPI object --------------------------------------
 
SPI Spi = SPI();
/C-OSD/arducam-osd/ArduCamOSD_Beta/Spi.h
0,0 → 1,22
#ifndef Spi_h
#define Spi_h
 
#include "WProgram.h"
 
#define SCK_PIN 13
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10 // <------- !!! (Remember! This pin will select USB host chip Max3421)
 
class SPI
{
public:
SPI(void);
void mode(byte);
byte transfer(byte);
byte transfer(byte, byte);
};
 
extern SPI Spi;
 
#endif
/C-OSD/arducam-osd/ArduCamOSD_Beta/pseventparser.cpp
0,0 → 1,86
#include "pseventparser.h"
 
void PSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
 
if (!cntdn)
return;
nStage ++;
 
case 1:
//Notify(PSTR("\r\nEvent Block Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
//Notify(PSTR("\r\nNumber of Fields:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
//Notify(PSTR("\r\nEvent Code:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
 
eventCode = *((uint16_t*)theBuffer.pValue);
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
//Notify(PSTR("\r\nTransaction ID:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
if (eventCode == PTP_EC_ObjectAdded)
Notify(PSTR("\r\nObject Added:\t\t"));
 
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (eventCode == PTP_EC_ObjectAdded)
{
if (!valueParser.Parse(&p, &cntdn))
return;
 
objHandle = *((uint32_t*)theBuffer.pValue);
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
Notify(PSTR("\r\n"));
}
if (eventCode == PTP_EC_CaptureComplete)
Notify(PSTR("\r\nCapture complete.\r\n"));
nStage ++;
case 11:
nStage = 0;
}
}
/C-OSD/arducam-osd/ArduCamOSD_Beta/pseventparser.h
0,0 → 1,29
#ifndef __PSEVENTPARSER_H__
#define __PSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "ptpcallback.h"
#include "ptpdebug.h"
#include "canonps.h"
 
class PSEventParser : public PTPReadParser
{
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
uint16_t eventCode;
uint32_t objHandle;
 
MultiByteValueParser valueParser;
 
public:
PSEventParser() : nStage(0), varBuffer(0), objHandle(0)
{
theBuffer.pValue = &varBuffer;
};
uint32_t GetObjHandle() { return objHandle; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PSEVENTPARSER_H__
/C-OSD/arducam-osd/ArduCamOSD_Beta/ptpobjinfoparser.cpp
0,0 → 1,298
#include "ptpobjinfoparser.h"
 
const char* PTPObjInfoParser::acNames[] PROGMEM =
{
msgUndefined,
msgAssociation,
msgScript,
msgExecutable,
msgText,
msgHTML,
msgDPOF,
msgAIFF,
msgWAV,
msgMP3,
msgAVI,
msgMPEG,
msgASF,
msgQT
};
 
const char* PTPObjInfoParser::imNames[] PROGMEM =
{
msgUndefined,
msgEXIF_JPEG,
msgTIFF_EP,
msgFlashPix,
msgBMP,
msgCIFF,
msgUndefined_0x3806,
msgGIF,
msgJFIF,
msgPCD,
msgPICT,
msgPNG,
msgUndefined_0x380C,
msgTIFF,
msgTIFF_IT,
msgJP2,
msgJPX,
};
 
void PTPObjInfoParser::PrintFormat(uint16_t op)
{
Serial.print(op, HEX);
Serial.print("\t");
//Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x30) && ((op & 0xFF) <= (PTP_OFC_QT & 0xFF)))
Notify((char*)pgm_read_word(&acNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0x38) && ((op & 0xFF) <= (PTP_OFC_JPX & 0xFF)))
Notify((char*)pgm_read_word(&imNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OFC_Undefined_Firmware:
Notify(msgUndefined_Firmware);
break;
case MTP_OFC_Windows_Image_Format:
Notify(msgWindows_Image_Format);
break;
case MTP_OFC_Undefined_Audio:
Notify(msgUndefined_Audio);
break;
case MTP_OFC_WMA:
Notify(msgWMA);
break;
case MTP_OFC_OGG:
Notify(msgOGG);
break;
case MTP_OFC_AAC:
Notify(msgAAC);
break;
case MTP_OFC_Audible:
Notify(msgAudible);
break;
case MTP_OFC_FLAC:
Notify(msgFLAC);
break;
case MTP_OFC_Undefined_Video:
Notify(msgUndefined_Video);
break;
case MTP_OFC_WMV:
Notify(msgWMV);
break;
case MTP_OFC_MP4_Container:
Notify(msgMP4_Container);
break;
case MTP_OFC_MP2:
Notify(msgMP2);
break;
case MTP_OFC_3GP_Container:
Notify(msg3GP_Container);
break;
default:
Notify(PSTR("Vendor defined"));
}
}
Notify(PSTR("\r\n"));
}
 
void PTPObjInfoParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
Notify(PSTR("Storage ID:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
Notify(PSTR("\r\nObject Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
Notify(PSTR("Protection Status:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
Notify(PSTR("\r\nObject Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
Notify(PSTR("\r\nThumb Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 11:
Notify(PSTR("Thumb Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 12:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 13:
Notify(PSTR("\r\nThumb Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 14:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 15:
Notify(PSTR("\r\nThumb Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 16:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 17:
Notify(PSTR("\r\nImage Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 18:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 19:
Notify(PSTR("\r\nImage Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 20:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 21:
Notify(PSTR("\r\nImage Bit Depth:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 22:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 23:
Notify(PSTR("\r\nParent Object:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 24:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 25:
Notify(PSTR("\r\nAssociation Type:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 26:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 27:
Notify(PSTR("\r\nAssociation Desc:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 28:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 29:
Notify(PSTR("\r\nSequence Number:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 30:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 31:
Notify(PSTR("\r\nFile Name:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 32:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 33:
Notify(PSTR("\r\nCapture Date:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 34:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 35:
Notify(PSTR("\r\nModification Date:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 36:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 37:
Notify(PSTR("\r\nKeywords:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 38:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
Notify(PSTR("\r\n"));
nStage = 0;
}
}
/C-OSD/arducam-osd/ArduCamOSD_Beta/ptpobjinfoparser.h
0,0 → 1,83
#ifndef __PTPOBJINFOPARSER_H__
#define __PTPOBJINFOPARSER_H__
 
#include <ptp.h>
#include <mtpconst.h>
#include <ptpcallback.h>
 
const char msgUndefined [] PROGMEM = "Undefined";
 
// Ancillary formats
const char msgAssociation [] PROGMEM = "Association";
const char msgScript [] PROGMEM = "Script";
const char msgExecutable [] PROGMEM = "Executable";
const char msgText [] PROGMEM = "Text";
const char msgHTML [] PROGMEM = "HTML";
const char msgDPOF [] PROGMEM = "DPOF";
const char msgAIFF [] PROGMEM = "AIFF";
const char msgWAV [] PROGMEM = "WAV";
const char msgMP3 [] PROGMEM = "MP3";
const char msgAVI [] PROGMEM = "AVI";
const char msgMPEG [] PROGMEM = "MPEG";
const char msgASF [] PROGMEM = "ASF";
const char msgQT [] PROGMEM = "QT";
 
// Image formats
const char msgEXIF_JPEG [] PROGMEM = "EXIF_JPEG";
const char msgTIFF_EP [] PROGMEM = "TIFF_EP";
const char msgFlashPix [] PROGMEM = "FlashPix";
const char msgBMP [] PROGMEM = "BMP";
const char msgCIFF [] PROGMEM = "CIFF";
const char msgUndefined_0x3806 [] PROGMEM = "Undefined_0x3806";
const char msgGIF [] PROGMEM = "GIF";
const char msgJFIF [] PROGMEM = "JFIF";
const char msgPCD [] PROGMEM = "PCD";
const char msgPICT [] PROGMEM = "PICT";
const char msgPNG [] PROGMEM = "PNG";
const char msgUndefined_0x380C [] PROGMEM = "Undefined_0x380C";
const char msgTIFF [] PROGMEM = "TIFF";
const char msgTIFF_IT [] PROGMEM = "TIFF_IT";
const char msgJP2 [] PROGMEM = "JP2";
const char msgJPX [] PROGMEM = "JPX";
 
// MTP Object Formats
const char msgUndefined_Firmware [] PROGMEM = "Undefined_Firmware";
const char msgWindows_Image_Format [] PROGMEM = "Windows_Image_Format";
const char msgUndefined_Audio [] PROGMEM = "Undefined_Audio";
const char msgWMA [] PROGMEM = "WMA";
const char msgOGG [] PROGMEM = "OGG";
const char msgAAC [] PROGMEM = "AAC";
const char msgAudible [] PROGMEM = "Audible";
const char msgFLAC [] PROGMEM = "FLAC";
const char msgUndefined_Video [] PROGMEM = "Undefined_Video";
const char msgWMV [] PROGMEM = "WMV";
const char msgMP4_Container [] PROGMEM = "MP4_Container";
const char msgMP2 [] PROGMEM = "MP2";
const char msg3GP_Container [] PROGMEM = "3GP_Container";
 
 
class PTPObjInfoParser : public PTPReadParser
{
static const char* acNames[];
static const char* imNames[];
 
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
 
MultiByteValueParser valueParser;
PTPListParser arrayParser;
 
static void PrintChar(MultiValueBuffer *p)
{
if (((unsigned char*)p->pValue)[0])
Serial.print(((unsigned char*)p->pValue)[0]);
};
void PrintFormat(uint16_t op);
 
public:
PTPObjInfoParser() : nStage(0) { theBuffer.pValue = (uint8_t*)&varBuffer; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PTPOBJINFOPARSER_H__
/C-OSD/arducam-osd/Tools/MAX7456Charwizard.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/MAX_Char_Write/Max_Char_Write.pde
0,0 → 1,345
// Code to copy a MCM font file to the Arduino + Max7456 OSD
//
// MAX7456_font Sketch
// at 9600 baud it take about 3min to download a mcm file
// http://www.maxim-ic.com/tools/evkit/index.cfm?EVKit=558
// max7456 evaluation kit software
 
#define DATAOUT 11//11-MOSI
#define DATAIN 12//12-MISO
#define SPICLOCK 13//13-sck
#define MAX7456SELECT 6 //6
#define USBSELECT 10//10-ss
#define VSYNC 2// INT0
 
//MAX7456 opcodes
#define VM0_reg 0x00
#define VM1_reg 0x01
#define DMM_reg 0x04
#define DMAH_reg 0x05
#define DMAL_reg 0x06
#define DMDI_reg 0x07
#define CMM_reg 0x08
#define CMAH_reg 0x09
#define CMAL_reg 0x0A
#define CMDI_reg 0x0B
#define STAT_reg 0xA0
 
//MAX7456 commands
#define CLEAR_display 0x04
#define CLEAR_display_vert 0x06
#define END_string 0xff
#define WRITE_nvr 0xa0
// with NTSC
#define ENABLE_display 0x08
#define ENABLE_display_vert 0x0c
#define MAX7456_reset 0x02
#define DISABLE_display 0x00
 
// with PAL
// all VM0_reg commands need bit 6 set
//#define ENABLE_display 0x48
//#define ENABLE_display_vert 0x4c
//#define MAX7456_reset 0x42
//#define DISABLE_display 0x40
 
#define WHITE_level_80 0x03
#define WHITE_level_90 0x02
#define WHITE_level_100 0x01
#define WHITE_level_120 0x00
 
#define MAX_font_rom 0xff
#define STATUS_reg_nvr_busy 0x20
#define NVM_ram_size 0x36
 
// with NTSC
#define MAX_screen_rows 0x0d //13
 
// with PAL
//#define MAX_screen_rows 0x10 //16
 
volatile byte screen_buffer[MAX_font_rom];
volatile byte character_bitmap[0x40];
volatile byte ascii_binary[0x08];
 
volatile byte bit_count;
volatile byte byte_count;
volatile int font_count;
volatile int incomingByte;
volatile int count;
 
 
//////////////////////////////////////////////////////////////
void setup()
{
byte spi_junk;
int x;
Serial.begin(38400);
Serial.flush();
 
digitalWrite(USBSELECT,HIGH); //disable USB chip
 
pinMode(MAX7456SELECT,OUTPUT);
digitalWrite(MAX7456SELECT,HIGH); //disable device
 
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(VSYNC, INPUT);
 
// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 rate (4 meg)
SPCR = (1<<SPE)|(1<<MSTR);
spi_junk=SPSR;
spi_junk=SPDR;
delay(250);
 
// force soft reset on Max7456
digitalWrite(MAX7456SELECT,LOW);
spi_transfer(VM0_reg);
spi_transfer(MAX7456_reset);
digitalWrite(MAX7456SELECT,HIGH);
delay(500);
 
// set all rows to same character white level, 90%
digitalWrite(MAX7456SELECT,LOW);
for (x = 0; x < MAX_screen_rows; x++)
{
spi_transfer(x + 0x10);
spi_transfer(WHITE_level_90);
}
 
// make sure the Max7456 is enabled
spi_transfer(VM0_reg);
spi_transfer(ENABLE_display);
digitalWrite(MAX7456SELECT,HIGH);
 
incomingByte = 0;
count = 0;
bit_count = 0;
byte_count = 0;
font_count = 0;
 
//display all 256 internal MAX7456 characters
for (x = 0; x < MAX_font_rom; x++)
{
screen_buffer[x] = x;
}
count = MAX_font_rom;
write_new_screen();
 
Serial.println("Ready for text file download");
Serial.println("");
delay(100);
}
 
//////////////////////////////////////////////////////////////
void loop()
{
byte x;
if (Serial.available() > 0)
{
// read the incoming byte:
incomingByte = Serial.read();
 
switch(incomingByte) // parse and decode mcm file
{
case 0x0d: // carridge return, end of line
//Serial.println("cr");
if (bit_count == 8 && (ascii_binary[0] == 0x30 || ascii_binary[0] == 0x31))
{
// turn 8 ascii binary bytes to single byte '01010101' = 0x55
// fill in 64 bytes of character data
character_bitmap[byte_count] = decode_ascii_binary();
byte_count++;
bit_count = 0;
}
else
bit_count = 0;
break;
case 0x0a: // line feed, ignore
//Serial.println("ln");
break;
case 0x30: // ascii '0'
case 0x31: // ascii '1'
ascii_binary[bit_count] = incomingByte;
bit_count++;
break;
default:
break;
}
}
// we have one completed character
// write the character to NVM
if(byte_count == 64)
{
write_NVM();
byte_count = 0;
font_count++;
}
 
// we have burned all 256 characters in NVM
if(font_count == 256)
{
font_count = 0;
 
// force soft reset on Max7456
digitalWrite(MAX7456SELECT,LOW);
spi_transfer(VM0_reg);
spi_transfer(MAX7456_reset);
digitalWrite(MAX7456SELECT,HIGH);
delay(500);
 
// display all 256 new internal MAX7456 characters
for (x = 0; x < MAX_font_rom; x++)
{
screen_buffer[x] = x;
}
count = MAX_font_rom;
write_new_screen();
Serial.println("");
Serial.println("Done with file download");
}
}
 
//////////////////////////////////////////////////////////////
byte spi_transfer(volatile byte data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
return SPDR; // return the received byte
}
 
//////////////////////////////////////////////////////////////
void write_new_screen()
{
int x, local_count;
byte char_address_hi, char_address_lo;
byte screen_char;
local_count = count;
char_address_hi = 0;
char_address_lo = 60; // start on third line
//Serial.println("write_new_screen");
 
// clear the screen
digitalWrite(MAX7456SELECT,LOW);
spi_transfer(DMM_reg);
spi_transfer(CLEAR_display);
digitalWrite(MAX7456SELECT,HIGH);
 
// disable display
digitalWrite(MAX7456SELECT,LOW);
spi_transfer(VM0_reg);
spi_transfer(DISABLE_display);
 
spi_transfer(DMM_reg); //dmm
//spi_transfer(0x21); //16 bit trans background
spi_transfer(0x01); //16 bit trans w/o background
 
spi_transfer(DMAH_reg); // set start address high
spi_transfer(char_address_hi);
 
spi_transfer(DMAL_reg); // set start address low
spi_transfer(char_address_lo);
 
x = 0;
while(local_count) // write out full screen
{
screen_char = screen_buffer[x];
spi_transfer(DMDI_reg);
spi_transfer(screen_char);
x++;
local_count--;
}
 
spi_transfer(DMDI_reg);
spi_transfer(END_string);
 
spi_transfer(VM0_reg); // turn on screen next vertical
spi_transfer(ENABLE_display_vert);
digitalWrite(MAX7456SELECT,HIGH);
}
 
//////////////////////////////////////////////////////////////
byte decode_ascii_binary()
{
byte ascii_byte;
 
ascii_byte = 0;
if (ascii_binary[0] == 0x31) // ascii '1'
ascii_byte = ascii_byte + 128;
 
if (ascii_binary[1] == 0x31)
ascii_byte = ascii_byte + 64;
 
if (ascii_binary[2] == 0x31)
ascii_byte = ascii_byte + 32;
 
if (ascii_binary[3] == 0x31)
ascii_byte = ascii_byte + 16;
 
if (ascii_binary[4] == 0x31)
ascii_byte = ascii_byte + 8;
 
if (ascii_binary[5] == 0x31)
ascii_byte = ascii_byte + 4;
 
if (ascii_binary[6] == 0x31)
ascii_byte = ascii_byte + 2;
 
if (ascii_binary[7] == 0x31)
ascii_byte = ascii_byte + 1;
 
//Serial.print(ascii_byte, HEX);
 
return(ascii_byte);
}
 
//////////////////////////////////////////////////////////////
void write_NVM()
{
byte x;
byte char_address_hi, char_address_lo;
byte screen_char;
 
char_address_hi = font_count;
char_address_lo = 0;
//Serial.println("write_new_screen");
 
// disable display
digitalWrite(MAX7456SELECT,LOW);
spi_transfer(VM0_reg);
spi_transfer(DISABLE_display);
 
spi_transfer(CMAH_reg); // set start address high
spi_transfer(char_address_hi);
 
for(x = 0; x < NVM_ram_size; x++) // write out 54 (out of 64) bytes of character to shadow ram
{
screen_char = character_bitmap[x];
spi_transfer(CMAL_reg); // set start address low
spi_transfer(x);
spi_transfer(CMDI_reg);
spi_transfer(screen_char);
}
 
// transfer a 54 bytes from shadow ram to NVM
spi_transfer(CMM_reg);
spi_transfer(WRITE_nvr);
// wait until bit 5 in the status register returns to 0 (12ms)
while ((spi_transfer(STAT_reg) & STATUS_reg_nvr_busy) != 0x00);
 
spi_transfer(VM0_reg); // turn on screen next vertical
spi_transfer(ENABLE_display_vert);
digitalWrite(MAX7456SELECT,HIGH);
}
/C-OSD/arducam-osd/Tools/OSD/ArduinoSTK.cs
0,0 → 1,334
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Threading;
 
// Written by Michael Oborne
 
namespace ArdupilotMega
{
class ArduinoSTK : SerialPort
{
public delegate void ProgressEventHandler(int progress);
 
public event ProgressEventHandler Progress;
 
public new void Open()
{
// default dtr status is false
 
//from http://svn.savannah.nongnu.org/viewvc/RELEASE_5_11_0/arduino.c?root=avrdude&view=markup
base.Open();
 
base.DtrEnable = false;
base.RtsEnable = false;
 
System.Threading.Thread.Sleep(50);
 
base.DtrEnable = true;
base.RtsEnable = true;
 
System.Threading.Thread.Sleep(50);
}
 
/// <summary>
/// Used to start initial connecting after serialport.open
/// </summary>
/// <returns>true = passed, false = failed</returns>
public bool connectAP()
{
if (!this.IsOpen)
{
return false;
}
int a = 0;
while (a < 50)
{
this.DiscardInBuffer();
this.Write(new byte[] { (byte)'0', (byte)' ' }, 0, 2);
a++;
Thread.Sleep(50);
 
Console.WriteLine("btr {0}", this.BytesToRead);
if (this.BytesToRead >= 2)
{
byte b1 = (byte)this.ReadByte();
byte b2 = (byte)this.ReadByte();
if (b1 == 0x14 && b2 == 0x10)
{
return true;
}
}
}
 
return false;
}
 
/// <summary>
/// Used to keep alive the connection
/// </summary>
/// <returns>true = passed, false = lost connection</returns>
public bool keepalive()
{
return connectAP();
}
/// <summary>
/// Syncs after a private command has been sent
/// </summary>
/// <returns>true = passed, false = failed</returns>
public bool sync()
{
if (!this.IsOpen)
{
return false;
}
this.ReadTimeout = 1000;
int f = 0;
while (this.BytesToRead < 1)
{
f++;
System.Threading.Thread.Sleep(1);
if (f > 1000)
return false;
}
int a = 0;
while (a < 10)
{
if (this.BytesToRead >= 2)
{
byte b1 = (byte)this.ReadByte();
byte b2 = (byte)this.ReadByte();
Console.WriteLine("bytes {0:X} {1:X}", b1, b2);
 
if (b1 == 0x14 && b2 == 0x10)
{
return true;
}
}
Console.WriteLine("btr {0}", this.BytesToRead);
Thread.Sleep(10);
a++;
}
return false;
}
/// <summary>
/// Downloads the eeprom with the given length - set Address first
/// </summary>
/// <param name="length">eeprom length</param>
/// <returns>downloaded data</returns>
public byte[] download(short length)
{
if (!this.IsOpen)
{
throw new Exception();
}
byte[] data = new byte[length];
 
byte[] command = new byte[] { (byte)'t', (byte)(length >> 8), (byte)(length & 0xff), (byte)'E', (byte)' ' };
this.Write(command, 0, command.Length);
 
if (this.ReadByte() == 0x14)
{ // 0x14
 
int step = 0;
while (step < length)
{
byte chr = (byte)this.ReadByte();
data[step] = chr;
step++;
}
 
if (this.ReadByte() != 0x10) // 0x10
throw new Exception("Lost Sync 0x10");
}
else
{
throw new Exception("Lost Sync 0x14");
}
return data;
}
 
public byte[] downloadflash(short length)
{
if (!this.IsOpen)
{
throw new Exception("Port Not Open");
}
byte[] data = new byte[length];
 
this.ReadTimeout = 1000;
 
byte[] command = new byte[] { (byte)'t', (byte)(length >> 8), (byte)(length & 0xff), (byte)'F', (byte)' ' };
this.Write(command, 0, command.Length);
 
if (this.ReadByte() == 0x14)
{ // 0x14
 
int read = length;
while (read > 0)
{
//Console.WriteLine("offset {0} read {1}", length - read, read);
read -= this.Read(data, length - read, read);
//System.Threading.Thread.Sleep(1);
}
 
if (this.ReadByte() != 0x10) // 0x10
throw new Exception("Lost Sync 0x10");
}
else
{
throw new Exception("Lost Sync 0x14");
}
return data;
}
 
public bool uploadflash(byte[] data, int startfrom, int length, int startaddress)
{
if (!this.IsOpen)
{
return false;
}
int loops = (length / 0x100);
int totalleft = length;
int sending = 0;
 
for (int a = 0; a <= loops; a++)
{
if (totalleft > 0x100)
{
sending = 0x100;
}
else
{
sending = totalleft;
}
 
//startaddress = 256;
if (sending == 0)
return true;
 
setaddress(startaddress);
startaddress += sending;
 
byte[] command = new byte[] { (byte)'d', (byte)(sending >> 8), (byte)(sending & 0xff), (byte)'F' };
this.Write(command, 0, command.Length);
Console.WriteLine((startfrom + (length - totalleft)) + " - " + sending);
this.Write(data, startfrom + (length - totalleft), sending);
command = new byte[] { (byte)' ' };
this.Write(command, 0, command.Length);
 
totalleft -= sending;
 
 
if (Progress != null)
Progress((int)(((float)startaddress / (float)length) * 100));
 
if (!sync())
{
Console.WriteLine("No Sync");
return false;
}
}
return true;
}
 
/// <summary>
/// Sets the eeprom start read or write address
/// </summary>
/// <param name="address">address, must be eaven number</param>
/// <returns>true = passed, false = failed</returns>
public bool setaddress(int address)
{
if (!this.IsOpen)
{
return false;
}
 
if (address % 2 == 1)
{
throw new Exception("Address must be an even number");
}
 
Console.WriteLine("Sending address " + ((ushort)(address / 2)));
 
address /= 2;
address = (ushort)address;
 
byte[] command = new byte[] { (byte)'U', (byte)(address & 0xff), (byte)(address >> 8), (byte)' ' };
this.Write(command, 0, command.Length);
 
return sync();
}
/// <summary>
/// Upload data at preset address
/// </summary>
/// <param name="data">array to read from</param>
/// <param name="startfrom">start array index</param>
/// <param name="length">length to send</param>
/// <param name="startaddress">sets eeprom start programing address</param>
/// <returns>true = passed, false = failed</returns>
public bool upload(byte[] data, short startfrom, short length, short startaddress)
{
if (!this.IsOpen)
{
return false;
}
int loops = (length / 0x100);
int totalleft = length;
int sending = 0;
 
for (int a = 0; a <= loops; a++)
{
if (totalleft > 0x100)
{
sending = 0x100;
}
else
{
sending = totalleft;
}
 
if (sending == 0)
return true;
 
setaddress(startaddress);
startaddress += (short)sending;
 
byte[] command = new byte[] { (byte)'d', (byte)(sending >> 8), (byte)(sending & 0xff), (byte)'E' };
this.Write(command, 0, command.Length);
Console.WriteLine((startfrom + (length - totalleft)) + " - " + sending);
this.Write(data, startfrom + (length - totalleft), sending);
command = new byte[] { (byte)' ' };
this.Write(command, 0, command.Length);
 
totalleft -= sending;
 
if (!sync())
{
Console.WriteLine("No Sync");
return false;
}
}
return true;
}
 
public new bool Close()
{
try
{
 
byte[] command = new byte[] { (byte)'Q', (byte)' ' };
this.Write(command, 0, command.Length);
}
catch { }
 
if (base.IsOpen)
base.Close();
 
this.DtrEnable = false;
this.RtsEnable = false;
return true;
}
}
}
/C-OSD/arducam-osd/Tools/OSD/MavlinkOther.cs
0,0 → 1,167
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ArdupilotMega
{
public partial class MAVLink
{
 
#if !MAVLINK10
enum MAV_CLASS
{
MAV_CLASS_GENERIC = 0, /// Generic autopilot, full support for everything
MAV_CLASS_PIXHAWK = 1, /// PIXHAWK autopilot, http://pixhawk.ethz.ch
MAV_CLASS_SLUGS = 2, /// SLUGS autopilot, http://slugsuav.soe.ucsc.edu
MAV_CLASS_ARDUPILOTMEGA = 3, /// ArduPilotMega / ArduCopter, http://diydrones.com
MAV_CLASS_OPENPILOT = 4, /// OpenPilot, http://openpilot.org
MAV_CLASS_GENERIC_MISSION_WAYPOINTS_ONLY = 5, /// Generic autopilot only supporting simple waypoints
MAV_CLASS_GENERIC_MISSION_NAVIGATION_ONLY = 6, /// Generic autopilot supporting waypoints and other simple navigation commands
MAV_CLASS_GENERIC_MISSION_FULL = 7, /// Generic autopilot supporting the full mission command set
MAV_CLASS_NONE = 8, /// No valid autopilot
MAV_CLASS_NB /// Number of autopilot classes
};
 
public enum MAV_ACTION
{
MAV_ACTION_HOLD = 0,
MAV_ACTION_MOTORS_START = 1,
MAV_ACTION_LAUNCH = 2,
MAV_ACTION_RETURN = 3,
MAV_ACTION_EMCY_LAND = 4,
MAV_ACTION_EMCY_KILL = 5,
MAV_ACTION_CONFIRM_KILL = 6,
MAV_ACTION_CONTINUE = 7,
MAV_ACTION_MOTORS_STOP = 8,
MAV_ACTION_HALT = 9,
MAV_ACTION_SHUTDOWN = 10,
MAV_ACTION_REBOOT = 11,
MAV_ACTION_SET_MANUAL = 12,
MAV_ACTION_SET_AUTO = 13,
MAV_ACTION_STORAGE_READ = 14,
MAV_ACTION_STORAGE_WRITE = 15,
MAV_ACTION_CALIBRATE_RC = 16,
MAV_ACTION_CALIBRATE_GYRO = 17,
MAV_ACTION_CALIBRATE_MAG = 18,
MAV_ACTION_CALIBRATE_ACC = 19,
MAV_ACTION_CALIBRATE_PRESSURE = 20,
MAV_ACTION_REC_START = 21,
MAV_ACTION_REC_PAUSE = 22,
MAV_ACTION_REC_STOP = 23,
MAV_ACTION_TAKEOFF = 24,
MAV_ACTION_NAVIGATE = 25,
MAV_ACTION_LAND = 26,
MAV_ACTION_LOITER = 27,
MAV_ACTION_SET_ORIGIN = 28,
MAV_ACTION_RELAY_ON = 29,
MAV_ACTION_RELAY_OFF = 30,
MAV_ACTION_GET_IMAGE = 31,
MAV_ACTION_VIDEO_START = 32,
MAV_ACTION_VIDEO_STOP = 33,
MAV_ACTION_RESET_MAP = 34,
MAV_ACTION_RESET_PLAN = 35,
MAV_ACTION_DELAY_BEFORE_COMMAND = 36,
MAV_ACTION_ASCEND_AT_RATE = 37,
MAV_ACTION_CHANGE_MODE = 38,
MAV_ACTION_LOITER_MAX_TURNS = 39,
MAV_ACTION_LOITER_MAX_TIME = 40,
MAV_ACTION_START_HILSIM = 41,
MAV_ACTION_STOP_HILSIM = 42,
MAV_ACTION_NB /// Number of MAV actions
};
 
public enum MAV_MODE
{
MAV_MODE_UNINIT = 0, /// System is in undefined state
MAV_MODE_LOCKED = 1, /// Motors are blocked, system is safe
MAV_MODE_MANUAL = 2, /// System is allowed to be active, under manual (RC) control
MAV_MODE_GUIDED = 3, /// System is allowed to be active, under autonomous control, manual setpoint
MAV_MODE_AUTO = 4, /// System is allowed to be active, under autonomous control and navigation
MAV_MODE_TEST1 = 5, /// Generic test mode, for custom use
MAV_MODE_TEST2 = 6, /// Generic test mode, for custom use
MAV_MODE_TEST3 = 7, /// Generic test mode, for custom use
MAV_MODE_READY = 8, /// System is ready, motors are unblocked, but controllers are inactive
MAV_MODE_RC_TRAINING = 9 /// System is blocked, only RC valued are read and reported back
};
 
public enum MAV_STATE
{
MAV_STATE_UNINIT = 0,
MAV_STATE_BOOT,
MAV_STATE_CALIBRATING,
MAV_STATE_STANDBY,
MAV_STATE_ACTIVE,
MAV_STATE_CRITICAL,
MAV_STATE_EMERGENCY,
MAV_STATE_HILSIM,
MAV_STATE_POWEROFF
};
 
public enum MAV_NAV
{
MAV_NAV_GROUNDED = 0,
MAV_NAV_LIFTOFF,
MAV_NAV_HOLD,
MAV_NAV_WAYPOINT,
MAV_NAV_VECTOR,
MAV_NAV_RETURNING,
MAV_NAV_LANDING,
MAV_NAV_LOST,
MAV_NAV_LOITER,
MAV_NAV_FREE_DRIFT
};
 
public enum MAV_TYPE
{
MAV_GENERIC = 0,
MAV_FIXED_WING = 1,
MAV_QUADROTOR = 2,
MAV_COAXIAL = 3,
MAV_HELICOPTER = 4,
MAV_GROUND = 5,
OCU = 6,
MAV_AIRSHIP = 7,
MAV_FREE_BALLOON = 8,
MAV_ROCKET = 9,
UGV_GROUND_ROVER = 10,
UGV_SURFACE_SHIP = 11
};
 
public enum MAV_AUTOPILOT_TYPE
{
MAV_AUTOPILOT_GENERIC = 0,
MAV_AUTOPILOT_PIXHAWK = 1,
MAV_AUTOPILOT_SLUGS = 2,
MAV_AUTOPILOT_ARDUPILOTMEGA = 3,
MAV_AUTOPILOT_NONE = 4
};
 
public enum MAV_COMPONENT
{
MAV_COMP_ID_GPS,
MAV_COMP_ID_WAYPOINTPLANNER,
MAV_COMP_ID_BLOBTRACKER,
MAV_COMP_ID_PATHPLANNER,
MAV_COMP_ID_AIRSLAM,
MAV_COMP_ID_MAPPER,
MAV_COMP_ID_CAMERA,
MAV_COMP_ID_IMU = 200,
MAV_COMP_ID_IMU_2 = 201,
MAV_COMP_ID_IMU_3 = 202,
MAV_COMP_ID_UDP_BRIDGE = 240,
MAV_COMP_ID_UART_BRIDGE = 241,
MAV_COMP_ID_SYSTEM_CONTROL = 250
};
 
public enum MAV_FRAME
{
GLOBAL = 0,
LOCAL = 1,
MISSION = 2,
GLOBAL_RELATIVE_ALT = 3,
LOCAL_ENU = 4
};
#endif
}
}
/C-OSD/arducam-osd/Tools/OSD/OSD.Designer.cs
0,0 → 1,434
namespace OSD
{
partial class OSD
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
 
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
 
#region Windows Form Designer generated code
 
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OSD));
this.LIST_items = new System.Windows.Forms.CheckedListBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.NUM_Y = new System.Windows.Forms.NumericUpDown();
this.NUM_X = new System.Windows.Forms.NumericUpDown();
this.BUT_WriteOSD = new System.Windows.Forms.Button();
this.CMB_ComPort = new System.Windows.Forms.ComboBox();
this.BUT_ReadOSD = new System.Windows.Forms.Button();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.loadDefaultsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.videoModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.nTSCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.CHK_pal = new System.Windows.Forms.ToolStripMenuItem();
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkBox1 = new System.Windows.Forms.ToolStripMenuItem();
this.updateFirmwareToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.customBGPictureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.sendTLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.updateFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.loadFromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUM_Y)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUM_X)).BeginInit();
this.statusStrip1.SuspendLayout();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// LIST_items
//
this.LIST_items.FormattingEnabled = true;
this.LIST_items.Location = new System.Drawing.Point(13, 24);
this.LIST_items.Name = "LIST_items";
this.LIST_items.Size = new System.Drawing.Size(138, 289);
this.LIST_items.TabIndex = 1;
this.LIST_items.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBox1_ItemCheck);
this.LIST_items.SelectedIndexChanged += new System.EventHandler(this.checkedListBox1_SelectedIndexChanged);
this.LIST_items.SelectedValueChanged += new System.EventHandler(this.checkedListBox1_SelectedValueChanged);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.NUM_Y);
this.groupBox1.Controls.Add(this.NUM_X);
this.groupBox1.Location = new System.Drawing.Point(13, 315);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(138, 82);
this.groupBox1.TabIndex = 2;
this.groupBox1.TabStop = false;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(7, 48);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(14, 13);
this.label2.TabIndex = 3;
this.label2.Text = "Y";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(7, 20);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(14, 13);
this.label1.TabIndex = 2;
this.label1.Text = "X";
//
// NUM_Y
//
this.NUM_Y.Location = new System.Drawing.Point(30, 46);
this.NUM_Y.Maximum = new decimal(new int[] {
15,
0,
0,
0});
this.NUM_Y.Name = "NUM_Y";
this.NUM_Y.Size = new System.Drawing.Size(91, 20);
this.NUM_Y.TabIndex = 1;
this.NUM_Y.ValueChanged += new System.EventHandler(this.numericUpDown2_ValueChanged);
//
// NUM_X
//
this.NUM_X.Location = new System.Drawing.Point(30, 20);
this.NUM_X.Maximum = new decimal(new int[] {
29,
0,
0,
0});
this.NUM_X.Name = "NUM_X";
this.NUM_X.Size = new System.Drawing.Size(91, 20);
this.NUM_X.TabIndex = 0;
this.NUM_X.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
//
// BUT_WriteOSD
//
this.BUT_WriteOSD.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.BUT_WriteOSD.Location = new System.Drawing.Point(555, 376);
this.BUT_WriteOSD.Name = "BUT_WriteOSD";
this.BUT_WriteOSD.Size = new System.Drawing.Size(100, 23);
this.BUT_WriteOSD.TabIndex = 2;
this.BUT_WriteOSD.Text = "Save to OSD";
this.BUT_WriteOSD.UseVisualStyleBackColor = true;
this.BUT_WriteOSD.Click += new System.EventHandler(this.BUT_WriteOSD_Click);
//
// CMB_ComPort
//
this.CMB_ComPort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.CMB_ComPort.FormattingEnabled = true;
this.CMB_ComPort.Location = new System.Drawing.Point(346, 376);
this.CMB_ComPort.Name = "CMB_ComPort";
this.CMB_ComPort.Size = new System.Drawing.Size(98, 21);
this.CMB_ComPort.TabIndex = 4;
this.CMB_ComPort.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
this.CMB_ComPort.Click += new System.EventHandler(this.comboBox1_Click);
//
// BUT_ReadOSD
//
this.BUT_ReadOSD.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.BUT_ReadOSD.Location = new System.Drawing.Point(449, 376);
this.BUT_ReadOSD.Name = "BUT_ReadOSD";
this.BUT_ReadOSD.Size = new System.Drawing.Size(100, 23);
this.BUT_ReadOSD.TabIndex = 6;
this.BUT_ReadOSD.Text = "Read From OSD";
this.BUT_ReadOSD.UseVisualStyleBackColor = true;
this.BUT_ReadOSD.Click += new System.EventHandler(this.BUT_ReadOSD_Click);
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripProgressBar1,
this.toolStripStatusLabel1});
this.statusStrip1.Location = new System.Drawing.Point(0, 403);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(667, 22);
this.statusStrip1.TabIndex = 8;
this.statusStrip1.Text = "statusStrip1";
//
// toolStripProgressBar1
//
this.toolStripProgressBar1.Name = "toolStripProgressBar1";
this.toolStripProgressBar1.Size = new System.Drawing.Size(500, 16);
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(0, 17);
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.videoModeToolStripMenuItem,
this.optionsToolStripMenuItem,
this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(667, 24);
this.menuStrip1.TabIndex = 10;
this.menuStrip1.Text = "menuStrip1";
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.saveToFileToolStripMenuItem,
this.loadFromFileToolStripMenuItem,
this.toolStripSeparator2,
this.loadDefaultsToolStripMenuItem,
this.toolStripSeparator1,
this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "File";
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(199, 6);
//
// loadDefaultsToolStripMenuItem
//
this.loadDefaultsToolStripMenuItem.Name = "loadDefaultsToolStripMenuItem";
this.loadDefaultsToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.loadDefaultsToolStripMenuItem.Text = "Load Defaults";
this.loadDefaultsToolStripMenuItem.Click += new System.EventHandler(this.loadDefaultsToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(199, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
this.exitToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
// videoModeToolStripMenuItem
//
this.videoModeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.nTSCToolStripMenuItem,
this.CHK_pal});
this.videoModeToolStripMenuItem.Name = "videoModeToolStripMenuItem";
this.videoModeToolStripMenuItem.Size = new System.Drawing.Size(83, 20);
this.videoModeToolStripMenuItem.Text = "Video Mode";
//
// nTSCToolStripMenuItem
//
this.nTSCToolStripMenuItem.CheckOnClick = true;
this.nTSCToolStripMenuItem.Name = "nTSCToolStripMenuItem";
this.nTSCToolStripMenuItem.Size = new System.Drawing.Size(104, 22);
this.nTSCToolStripMenuItem.Text = "NTSC";
this.nTSCToolStripMenuItem.CheckStateChanged += new System.EventHandler(this.nTSCToolStripMenuItem_CheckStateChanged);
//
// CHK_pal
//
this.CHK_pal.Checked = true;
this.CHK_pal.CheckOnClick = true;
this.CHK_pal.CheckState = System.Windows.Forms.CheckState.Checked;
this.CHK_pal.Name = "CHK_pal";
this.CHK_pal.Size = new System.Drawing.Size(104, 22);
this.CHK_pal.Text = "PAL";
this.CHK_pal.CheckedChanged += new System.EventHandler(this.CHK_pal_CheckedChanged);
this.CHK_pal.CheckStateChanged += new System.EventHandler(this.pALToolStripMenuItem_CheckStateChanged);
//
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.checkBox1,
this.updateFirmwareToolStripMenuItem,
this.customBGPictureToolStripMenuItem,
this.sendTLogToolStripMenuItem,
this.updateFontToolStripMenuItem});
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G)));
this.optionsToolStripMenuItem.ShowShortcutKeys = false;
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
this.optionsToolStripMenuItem.Text = "Options";
//
// checkBox1
//
this.checkBox1.Checked = true;
this.checkBox1.CheckOnClick = true;
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(183, 22);
this.checkBox1.Text = "Show Grid";
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
//
// updateFirmwareToolStripMenuItem
//
this.updateFirmwareToolStripMenuItem.Name = "updateFirmwareToolStripMenuItem";
this.updateFirmwareToolStripMenuItem.Size = new System.Drawing.Size(183, 22);
this.updateFirmwareToolStripMenuItem.Text = "Update Firmware...";
this.updateFirmwareToolStripMenuItem.ToolTipText = "Re-Flash the OSD with a new firmware image";
this.updateFirmwareToolStripMenuItem.Click += new System.EventHandler(this.updateFirmwareToolStripMenuItem_Click);
//
// customBGPictureToolStripMenuItem
//
this.customBGPictureToolStripMenuItem.Name = "customBGPictureToolStripMenuItem";
this.customBGPictureToolStripMenuItem.Size = new System.Drawing.Size(183, 22);
this.customBGPictureToolStripMenuItem.Text = "Background Image...";
this.customBGPictureToolStripMenuItem.Click += new System.EventHandler(this.customBGPictureToolStripMenuItem_Click);
//
// sendTLogToolStripMenuItem
//
this.sendTLogToolStripMenuItem.Name = "sendTLogToolStripMenuItem";
this.sendTLogToolStripMenuItem.Size = new System.Drawing.Size(183, 22);
this.sendTLogToolStripMenuItem.Text = "Send TLog...";
this.sendTLogToolStripMenuItem.ToolTipText = "Send a Mavlink transmission log to the OSD to test the layout";
this.sendTLogToolStripMenuItem.Click += new System.EventHandler(this.sendTLogToolStripMenuItem_Click);
//
// updateFontToolStripMenuItem
//
this.updateFontToolStripMenuItem.Name = "updateFontToolStripMenuItem";
this.updateFontToolStripMenuItem.Size = new System.Drawing.Size(183, 22);
this.updateFontToolStripMenuItem.Text = "Update CharSet...";
this.updateFontToolStripMenuItem.ToolTipText = "Update the font file on the OSD";
this.updateFontToolStripMenuItem.Click += new System.EventHandler(this.updateFontToolStripMenuItem_Click);
//
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem.Text = "Help";
this.helpToolStripMenuItem.Click += new System.EventHandler(this.helpToolStripMenuItem_Click);
//
// saveToFileToolStripMenuItem
//
this.saveToFileToolStripMenuItem.Image = global::OSD.Properties.Resources.saveHS;
this.saveToFileToolStripMenuItem.Name = "saveToFileToolStripMenuItem";
this.saveToFileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
this.saveToFileToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.saveToFileToolStripMenuItem.Text = "Save OSD file...";
this.saveToFileToolStripMenuItem.Click += new System.EventHandler(this.saveToFileToolStripMenuItem_Click);
//
// loadFromFileToolStripMenuItem
//
this.loadFromFileToolStripMenuItem.Image = global::OSD.Properties.Resources.openHS;
this.loadFromFileToolStripMenuItem.Name = "loadFromFileToolStripMenuItem";
this.loadFromFileToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.loadFromFileToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.loadFromFileToolStripMenuItem.Text = "Open OSD File...";
this.loadFromFileToolStripMenuItem.Click += new System.EventHandler(this.loadFromFileToolStripMenuItem_Click);
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.Location = new System.Drawing.Point(158, 27);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(497, 343);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
//
// OSD
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(667, 425);
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.menuStrip1);
this.Controls.Add(this.BUT_ReadOSD);
this.Controls.Add(this.CMB_ComPort);
this.Controls.Add(this.BUT_WriteOSD);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.LIST_items);
this.Controls.Add(this.pictureBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.Name = "OSD";
this.Text = "ArduCAM OSD Config - By Michael Oborne";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OSD_FormClosed);
this.Load += new System.EventHandler(this.OSD_Load);
this.Resize += new System.EventHandler(this.OSD_Resize);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUM_Y)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUM_X)).EndInit();
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
 
}
 
#endregion
 
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.CheckedListBox LIST_items;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.NumericUpDown NUM_Y;
private System.Windows.Forms.NumericUpDown NUM_X;
private System.Windows.Forms.Button BUT_WriteOSD;
private System.Windows.Forms.ComboBox CMB_ComPort;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button BUT_ReadOSD;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem videoModeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem nTSCToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem CHK_pal;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveToFileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem loadFromFileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem loadDefaultsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem checkBox1;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem updateFirmwareToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem customBGPictureToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem sendTLogToolStripMenuItem;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripMenuItem updateFontToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
}
}
 
/C-OSD/arducam-osd/Tools/OSD/OSD.cs
0,0 → 1,1381
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO.Ports;
using System.IO;
using ArdupilotMega;
using System.Xml;
 
namespace OSD
{
public partial class OSD : Form
{
//max 7456 datasheet pg 10
//pal = 16r 30 char
//ntsc = 13r 30 char
Size basesize = new Size(30, 16);
/// <summary>
/// the un-scaled font render image
/// </summary>
Bitmap screen = new Bitmap(30 * 12, 16 * 18);
/// <summary>
/// the scaled to size background control
/// </summary>
Bitmap image = new Bitmap(30 * 12, 16 * 18);
/// <summary>
/// Bitmaps of all the chars created from the mcm
/// </summary>
Bitmap[] chars;
/// <summary>
/// record of what panel is using what squares
/// </summary>
string[][] usedPostion = new string[30][];
/// <summary>
/// used to track currently selected panel across calls
/// </summary>
string currentlyselected = "";
/// <summary>
/// used to track current processing panel across calls (because i maintained the original code for panel drawing)
/// </summary>
string processingpanel = "";
/// <summary>
/// use to draw the red outline box is currentlyselected matchs
/// </summary>
bool selectedrectangle = false;
/// <summary>
/// use to as a invalidator
/// </summary>
bool startup = false;
/// <summary>
/// 328 eeprom memory
/// </summary>
byte[] eeprom = new byte[1024];
/// <summary>
/// background image
/// </summary>
Image bgpicture;
 
bool mousedown = false;
 
SerialPort comPort = new SerialPort();
 
Panels pan;
 
Tuple<string, Func<int, int, int>, int, int, int, int, int>[] panelItems = new Tuple<string, Func<int, int, int>, int, int, int, int, int>[30];
 
Graphics gr;
 
// in pixels
int x = 0, y = 0;
 
public OSD()
{
InitializeComponent();
 
// load default font
chars = mcm.readMCM("OSD_SA_v5.mcm");
// load default bg picture
try
{
bgpicture = Image.FromFile("vlcsnap-2012-01-28-07h46m04s95.png");
}
catch { }
 
gr = Graphics.FromImage(screen);
 
pan = new Panels(this);
 
// setup all panel options
setupFunctions();
}
 
void changeToPal(bool pal)
{
if (pal)
{
basesize = new Size(30, 16);
 
screen = new Bitmap(30 * 12, 16 * 18);
image = new Bitmap(30 * 12, 16 * 18);
 
NUM_X.Maximum = 29;
NUM_Y.Maximum = 15;
}
else
{
basesize = new Size(30, 13);
 
screen = new Bitmap(30 * 12, 13 * 18);
image = new Bitmap(30 * 12, 13 * 18);
 
NUM_X.Maximum = 29;
NUM_Y.Maximum = 15;
}
 
}
 
void setupFunctions()
{
currentlyselected = "";
processingpanel = "";
 
int a = 0;
 
for (a = 0; a < usedPostion.Length; a++)
{
usedPostion[a] = new string[16];
}
 
a = 0;
 
// first 8
// Display name,printfunction,X,Y,ENaddress,Xaddress,Yaddress
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Center", pan.panCenter, 13, 8, panCenter_en_ADDR, panCenter_x_ADDR, panCenter_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Pitch", pan.panPitch, 22, 9, panPitch_en_ADDR, panPitch_x_ADDR, panPitch_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Roll", pan.panRoll, 11, 1, panRoll_en_ADDR, panRoll_x_ADDR, panRoll_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Battery A", pan.panBatt_A, 21, 1, panBatt_A_en_ADDR, panBatt_A_x_ADDR, panBatt_A_y_ADDR);
//items[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Battery B", pan.panBatt_B, 21, 3, panBatt_B_en_ADDR, panBatt_B_x_ADDR, panBatt_B_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Visible Sats", pan.panGPSats, 2, 13, panGPSats_en_ADDR, panGPSats_x_ADDR, panGPSats_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("GPS Lock", pan.panGPL, 5, 13, panGPL_en_ADDR, panGPL_x_ADDR, panGPL_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("GPS Coord", pan.panGPS, 2, 14, panGPS_en_ADDR, panGPS_x_ADDR, panGPS_y_ADDR);
 
//second 8
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Heading Rose", pan.panRose, 16, 14, panRose_en_ADDR, panRose_x_ADDR, panRose_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Heading", pan.panHeading, 24, 13, panHeading_en_ADDR, panHeading_x_ADDR, panHeading_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Heart Beat", pan.panMavBeat, 2, 9, panMavBeat_en_ADDR, panMavBeat_x_ADDR, panMavBeat_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Home Direction", pan.panHomeDir, 14, 3, panHomeDir_en_ADDR, panHomeDir_x_ADDR, panHomeDir_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Home Distance", pan.panHomeDis, 2, 1, panHomeDis_en_ADDR, panHomeDis_x_ADDR, panHomeDis_y_ADDR);
//items[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("WP Dir", pan.panWPDir, 14, 4, panWPDir_en_ADDR, panWPDir_x_ADDR, panWPDir_y_ADDR);
//items[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("WP Dir", pan.panWPDis, 14, 4, panWPDis_en_ADDR, panWPDis_x_ADDR, panWPDis_y_ADDR);
// rssi
 
// third 8
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Altitude", pan.panAlt, 2, 2, panAlt_en_ADDR, panAlt_x_ADDR, panAlt_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Velocity", pan.panVel, 2, 3, panVel_en_ADDR, panVel_x_ADDR, panVel_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Throttle", pan.panThr, 2, 4, panThr_en_ADDR, panThr_x_ADDR, panThr_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Flight Mode", pan.panFlightMode, 17, 13, panFMod_en_ADDR, panFMod_x_ADDR, panFMod_y_ADDR);
panelItems[a++] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>("Horizon", pan.panHorizon, 8, 7, panHorizon_en_ADDR, panHorizon_x_ADDR, panHorizon_y_ADDR);
 
LIST_items.Items.Clear();
 
startup = true;
 
foreach (var thing in panelItems)
{
if (thing != null)
{
if (thing.Item1 == "Center")
{
LIST_items.Items.Add(thing.Item1, false);
}
else
{
LIST_items.Items.Add(thing.Item1, true);
}
}
}
 
startup = false;
 
osdDraw();
}
 
private string[] GetPortNames()
{
string[] devs = new string[0];
 
if (Directory.Exists("/dev/"))
devs = Directory.GetFiles("/dev/", "*ACM*");
 
string[] ports = SerialPort.GetPortNames();
 
string[] all = new string[devs.Length + ports.Length];
 
devs.CopyTo(all, 0);
ports.CopyTo(all, devs.Length);
 
return all;
}
 
public void setPanel(int x, int y)
{
this.x = x * 12;
this.y = y * 18;
}
 
public void openPanel()
{
d = 0;
r = 0;
}
 
public void openSingle(int x, int y)
{
setPanel(x, y);
openPanel();
}
 
public int getCenter()
{
if (CHK_pal.Checked)
return 8;
return 6;
}
 
// used for printf tracking line and row
int d = 0, r = 0;
 
public void printf(string format, params object[] args)
{
StringBuilder sb = new StringBuilder();
 
sb = new StringBuilder(AT.MIN.Tools.sprintf(format, args));
 
//sprintf(sb, format, __arglist(args));
 
//Console.WriteLine(sb.ToString());
 
foreach (char ch in sb.ToString().ToCharArray())
{
if (ch == '|')
{
d += 1;
r = 0;
continue;
}
 
try
{
// draw red boxs
if (selectedrectangle)
{
gr.DrawRectangle(Pens.Red, (this.x + r * 12) % screen.Width, (this.y + d * 18), 12, 18);
}
 
int w1 = (this.x / 12 + r) % basesize.Width;
int h1 = (this.y / 18 + d);
 
if (w1 < basesize.Width && h1 < basesize.Height)
{
// check if this box has bene used
if (usedPostion[w1][h1] != null)
{
//System.Diagnostics.Debug.WriteLine("'" + used[this.x / 12 + r * 12 / 12][this.y / 18 + d * 18 / 18] + "'");
}
else
{
gr.DrawImage(chars[ch], (this.x + r * 12) % screen.Width, (this.y + d * 18), 12, 18);
}
 
usedPostion[w1][h1] = processingpanel;
}
}
catch { System.Diagnostics.Debug.WriteLine("printf exception"); }
r++;
}
}
 
string getMouseOverItem(int x, int y)
{
int ansW,ansH;
 
getCharLoc(x, y, out ansW, out ansH);
 
if (usedPostion[ansW][ansH] != null && usedPostion[ansW][ansH] != "")
{
LIST_items.SelectedIndex = LIST_items.Items.IndexOf(usedPostion[ansW][ansH]);
return usedPostion[ansW][ansH];
}
 
return "";
}
 
void getCharLoc(int x, int y,out int xpos, out int ypos)
{
 
x = Constrain(x, 0, pictureBox1.Width - 1);
y = Constrain(y, 0, pictureBox1.Height - 1);
 
float scaleW = pictureBox1.Width / (float)screen.Width;
float scaleH = pictureBox1.Height / (float)screen.Height;
 
int ansW = (int)((x / scaleW / 12) % 30);
int ansH = 0;
if (CHK_pal.Checked)
{
ansH = (int)((y / scaleH / 18) % 16);
}
else
{
ansH = (int)((y / scaleH / 18) % 13);
}
 
xpos = Constrain(ansW,0,30 -1);
ypos = Constrain(ansH,0,16 - 1);
}
 
public void printf_P(string format, params object[] args)
{
printf(format, args);
}
 
public void closePanel()
{
x = 0;
y = 0;
}
 
void osdDraw()
{
if (startup)
return;
 
for (int b = 0; b < usedPostion.Length; b++)
{
usedPostion[b] = new string[16];
}
 
image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
 
float scaleW = pictureBox1.Width / (float)screen.Width;
float scaleH = pictureBox1.Height / (float)screen.Height;
 
screen = new Bitmap(screen.Width, screen.Height);
 
gr = Graphics.FromImage(screen);
 
image = new Bitmap(image.Width, image.Height);
 
Graphics grfull = Graphics.FromImage(image);
 
try
{
grfull.DrawImage(bgpicture, 0, 0, pictureBox1.Width, pictureBox1.Height);
}
catch { }
 
if (checkBox1.Checked)
{
for (int b = 1; b < 16; b++)
{
for (int a = 1; a < 30; a++)
{
grfull.DrawLine(new Pen(Color.Gray, 1), a * 12 * scaleW, 0, a * 12 * scaleW, pictureBox1.Height);
grfull.DrawLine(new Pen(Color.Gray, 1), 0, b * 18 * scaleH, pictureBox1.Width, b * 18 * scaleH);
}
}
}
 
pan.setHeadingPatern();
pan.setBatteryPic();
 
List<string> list = new List<string>();
 
foreach (string it in LIST_items.CheckedItems)
{
list.Add(it);
}
 
list.Reverse();
 
foreach (string it in list)
{
foreach (var thing in panelItems)
{
selectedrectangle = false;
if (thing != null)
{
if (thing.Item1 == it)
{
if (thing.Item1 == currentlyselected)
{
selectedrectangle = true;
}
 
processingpanel = thing.Item1;
 
// ntsc and below the middle line
if (thing.Item4 >= getCenter() && !CHK_pal.Checked)
{
thing.Item2(thing.Item3, thing.Item4 - 3);
}
else // pal and no change
{
thing.Item2(thing.Item3, thing.Item4);
}
 
}
}
}
}
 
grfull.DrawImage(screen, 0, 0, image.Width, image.Height);
 
pictureBox1.Image = image;
}
 
int Constrain(double value, double min, double max)
{
if (value < min)
return (int)min;
if (value > max)
return (int)max;
 
return (int)value;
}
 
private void OSD_Load(object sender, EventArgs e)
{
 
string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
this.Text = this.Text + " " + strVersion;
 
CMB_ComPort.Items.AddRange(GetPortNames());
 
if (CMB_ComPort.Items.Count > 0)
CMB_ComPort.SelectedIndex = 0;
 
xmlconfig(false);
 
osdDraw();
}
 
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string item = ((CheckedListBox)sender).SelectedItem.ToString();
 
currentlyselected = item;
 
osdDraw();
 
foreach (var thing in panelItems)
{
if (thing != null && thing.Item1 == item)
{
NUM_X.Value = Constrain(thing.Item3,0,basesize.Width -1);
NUM_Y.Value = Constrain(thing.Item4,0,16 -1);
}
}
}
 
private void checkedListBox1_SelectedValueChanged(object sender, EventArgs e)
{
if (((CheckedListBox)sender).Text == "Horizon")
{
//groupBox1.Enabled = false;
}
else
{
//groupBox1.Enabled = true;
}
}
 
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
// if (((CheckedListBox)sender).SelectedItem != null && ((CheckedListBox)sender).SelectedItem.ToString() == "Horizon")
if (((CheckedListBox)sender).SelectedItem != null)
{
if (((CheckedListBox)sender).SelectedItem.ToString() == "Horizon" && e.NewValue == CheckState.Checked)
{
int index = LIST_items.Items.IndexOf("Center");
LIST_items.SetItemChecked(index, false);
}
else if (((CheckedListBox)sender).SelectedItem.ToString() == "Center" && e.NewValue == CheckState.Checked)
{
int index = LIST_items.Items.IndexOf("Horizon");
LIST_items.SetItemChecked(index, false);
}
}
 
// add a delay to this so it runs after the control value has been defined.
if (this.IsHandleCreated)
this.BeginInvoke((MethodInvoker)delegate { osdDraw(); });
}
 
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
string item;
try
{
item = LIST_items.SelectedItem.ToString();
}
catch { return; }
 
for (int a = 0; a < panelItems.Length; a++)
{
if (panelItems[a] != null && panelItems[a].Item1 == item)
{
panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, (int)NUM_X.Value, panelItems[a].Item4, panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7);
}
}
 
osdDraw();
}
 
private void numericUpDown2_ValueChanged(object sender, EventArgs e)
{
string item;
try
{
item = LIST_items.SelectedItem.ToString();
}
catch { return; }
 
for (int a = 0; a < panelItems.Length; a++)
{
if (panelItems[a] != null && panelItems[a].Item1 == item)
{
panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, panelItems[a].Item3, (int)NUM_Y.Value, panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7);
 
}
}
 
osdDraw();
}
 
private void BUT_WriteOSD_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
this.toolStripStatusLabel1.Text = "";
 
foreach (string str in this.LIST_items.Items)
{
foreach (var tuple in this.panelItems)
{
if ((tuple != null) && ((tuple.Item1 == str)) && tuple.Item5 != -1)
{
eeprom[tuple.Item5] = (byte)(this.LIST_items.CheckedItems.Contains(str) ? 1 : 0);
eeprom[tuple.Item6] = (byte)tuple.Item3; // x
eeprom[tuple.Item7] = (byte)tuple.Item4; // y
 
Console.WriteLine(str);
}
}
}
 
ArduinoSTK sp;
 
try
{
if (comPort.IsOpen)
comPort.Close();
 
sp = new ArduinoSTK();
sp.PortName = CMB_ComPort.Text;
sp.BaudRate = 57600;
sp.DtrEnable = true;
 
sp.Open();
}
catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
 
if (sp.connectAP())
{
try
{
if (sp.upload(eeprom, 0, 200, 0))
{
MessageBox.Show("Done!");
}
else
{
MessageBox.Show("Failed to upload new settings");
}
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show("Failed to talk to bootloader");
}
 
sp.Close();
}
 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
 
}
 
private void comboBox1_Click(object sender, EventArgs e)
{
CMB_ComPort.Items.Clear();
CMB_ComPort.Items.AddRange(GetPortNames());
}
 
 
 
/* *********************************************** */
// EEPROM Storage addresses
 
// First of 8 panels
const int panCenter_en_ADDR = 0;
const int panCenter_x_ADDR = 2;
const int panCenter_y_ADDR = 4;
const int panPitch_en_ADDR = 6;
const int panPitch_x_ADDR = 8;
const int panPitch_y_ADDR = 10;
const int panRoll_en_ADDR = 12;
const int panRoll_x_ADDR = 14;
const int panRoll_y_ADDR = 16;
const int panBatt_A_en_ADDR = 18;
const int panBatt_A_x_ADDR = 20;
const int panBatt_A_y_ADDR = 22;
const int panBatt_B_en_ADDR = 24;
const int panBatt_B_x_ADDR = 26;
const int panBatt_B_y_ADDR = 28;
const int panGPSats_en_ADDR = 30;
const int panGPSats_x_ADDR = 32;
const int panGPSats_y_ADDR = 34;
const int panGPL_en_ADDR = 36;
const int panGPL_x_ADDR = 38;
const int panGPL_y_ADDR = 40;
const int panGPS_en_ADDR = 42;
const int panGPS_x_ADDR = 44;
const int panGPS_y_ADDR = 46;
 
// Second set of 8 panels
const int panRose_en_ADDR = 48;
const int panRose_x_ADDR = 50;
const int panRose_y_ADDR = 52;
const int panHeading_en_ADDR = 54;
const int panHeading_x_ADDR = 56;
const int panHeading_y_ADDR = 58;
const int panMavBeat_en_ADDR = 60;
const int panMavBeat_x_ADDR = 62;
const int panMavBeat_y_ADDR = 64;
const int panHomeDir_en_ADDR = 66;
const int panHomeDir_x_ADDR = 68;
const int panHomeDir_y_ADDR = 70;
const int panHomeDis_en_ADDR = 72;
const int panHomeDis_x_ADDR = 74;
const int panHomeDis_y_ADDR = 76;
const int panWPDir_en_ADDR = 80;
const int panWPDir_x_ADDR = 82;
const int panWPDir_y_ADDR = 84;
const int panWPDis_en_ADDR = 86;
const int panWPDis_x_ADDR = 88;
const int panWPDis_y_ADDR = 90;
const int panRSSI_en_ADDR = 92;
const int panRSSI_x_ADDR = 94;
const int panRSSI_y_ADDR = 96;
 
 
// Third set of 8 panels
const int panCurA_en_ADDR = 98;
const int panCurA_x_ADDR = 100;
const int panCurA_y_ADDR = 102;
const int panCurB_en_ADDR = 104;
const int panCurB_x_ADDR = 106;
const int panCurB_y_ADDR = 108;
const int panAlt_en_ADDR = 110;
const int panAlt_x_ADDR = 112;
const int panAlt_y_ADDR = 114;
const int panVel_en_ADDR = 116;
const int panVel_x_ADDR = 118;
const int panVel_y_ADDR = 120;
const int panThr_en_ADDR = 122;
const int panThr_x_ADDR = 124;
const int panThr_y_ADDR = 126;
const int panFMod_en_ADDR = 128;
const int panFMod_x_ADDR = 130;
const int panFMod_y_ADDR = 132;
const int panHorizon_en_ADDR = 134;
const int panHorizon_x_ADDR = 136;
const int panHorizon_y_ADDR = 138;
 
const int CHK1 = 1000;
const int CHK2 = 1006;
 
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
osdDraw();
}
 
private void OSD_Resize(object sender, EventArgs e)
{
try
{
osdDraw();
}
catch { }
}
 
private void BUT_ReadOSD_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
this.toolStripStatusLabel1.Text = "";
 
bool fail = false;
ArduinoSTK sp;
 
try
{
if (comPort.IsOpen)
comPort.Close();
 
sp = new ArduinoSTK();
sp.PortName = CMB_ComPort.Text;
sp.BaudRate = 57600;
sp.DtrEnable = true;
 
sp.Open();
}
catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
 
if (sp.connectAP())
{
try
{
eeprom = sp.download(1024);
}
catch (Exception ex) {
fail = true;
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show("Failed to talk to bootloader");
fail = true;
}
 
sp.Close();
 
if (!fail)
{
 
for (int a = 0; a < panelItems.Length; a++)
{
if (panelItems[a] != null)
{
if (panelItems[a].Item5 >= 0)
LIST_items.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked);
 
if (panelItems[a].Item7 >= 0 || panelItems[a].Item6 >= 0)
panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, eeprom[panelItems[a].Item6], eeprom[panelItems[a].Item7], panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7);
}
}
}
 
osdDraw();
 
if (!fail)
MessageBox.Show("Done!");
}
 
 
byte[] readIntelHEXv2(StreamReader sr)
{
byte[] FLASH = new byte[1024 * 1024];
 
int optionoffset = 0;
int total = 0;
bool hitend = false;
 
while (!sr.EndOfStream)
{
toolStripProgressBar1.Value = (int)(((float)sr.BaseStream.Position / (float)sr.BaseStream.Length) * 100);
 
string line = sr.ReadLine();
 
if (line.StartsWith(":"))
{
int length = Convert.ToInt32(line.Substring(1, 2), 16);
int address = Convert.ToInt32(line.Substring(3, 4), 16);
int option = Convert.ToInt32(line.Substring(7, 2), 16);
Console.WriteLine("len {0} add {1} opt {2}", length, address, option);
 
if (option == 0)
{
string data = line.Substring(9, length * 2);
for (int i = 0; i < length; i++)
{
byte byte1 = Convert.ToByte(data.Substring(i * 2, 2), 16);
FLASH[optionoffset + address] = byte1;
address++;
if ((optionoffset + address) > total)
total = optionoffset + address;
}
}
else if (option == 2)
{
optionoffset = (int)Convert.ToUInt16(line.Substring(9, 4), 16) << 4;
}
else if (option == 1)
{
hitend = true;
}
int checksum = Convert.ToInt32(line.Substring(line.Length - 2, 2), 16);
 
byte checksumact = 0;
for (int z = 0; z < ((line.Length - 1 - 2) / 2); z++) // minus 1 for : then mins 2 for checksum itself
{
checksumact += Convert.ToByte(line.Substring(z * 2 + 1, 2), 16);
}
checksumact = (byte)(0x100 - checksumact);
 
if (checksumact != checksum)
{
MessageBox.Show("The hex file loaded is invalid, please try again.");
throw new Exception("Checksum Failed - Invalid Hex");
}
}
//Regex regex = new Regex(@"^:(..)(....)(..)(.*)(..)$"); // length - address - option - data - checksum
}
 
if (!hitend)
{
MessageBox.Show("The hex file did no contain an end flag. aborting");
throw new Exception("No end flag in file");
}
 
Array.Resize<byte>(ref FLASH, total);
 
return FLASH;
}
 
void sp_Progress(int progress)
{
toolStripStatusLabel1.Text = "Uploading " + progress + " %";
toolStripProgressBar1.Value = progress;
 
statusStrip1.Refresh();
}
 
private void CHK_pal_CheckedChanged(object sender, EventArgs e)
{
changeToPal(CHK_pal.Checked);
 
osdDraw();
}
 
private void pALToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)
{
nTSCToolStripMenuItem.Checked = !CHK_pal.Checked;
}
 
private void nTSCToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)
{
CHK_pal.Checked = !nTSCToolStripMenuItem.Checked;
}
 
private void saveToFileToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog() { Filter = "*.osd|*.osd" };
 
sfd.ShowDialog();
 
if (sfd.FileName != "")
{
try
{
using (StreamWriter sw = new StreamWriter(sfd.OpenFile()))
{
 
foreach (var item in panelItems)
{
if (item != null)
sw.WriteLine("{0}\t{1}\t{2}\t{3}", item.Item1, item.Item3, item.Item4, LIST_items.GetItemChecked(LIST_items.Items.IndexOf(item.Item1)).ToString());
}
sw.Close();
}
}
catch
{
MessageBox.Show("Error writing file");
}
}
}
 
private void loadFromFileToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog() { Filter = "*.osd|*.osd" };
 
ofd.ShowDialog();
 
if (ofd.FileName != "")
{
try
{
using (StreamReader sr = new StreamReader(ofd.OpenFile()))
{
while (!sr.EndOfStream)
{
string[] strings = sr.ReadLine().Split(new char[] {'\t'},StringSplitOptions.RemoveEmptyEntries);
 
for (int a = 0; a < panelItems.Length; a++)
{
if (panelItems[a] != null && panelItems[a].Item1 == strings[0])
{
// incase there is an invalid line number or to shore
try
{
panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, int.Parse(strings[1]), int.Parse(strings[2]), panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7);
 
LIST_items.SetItemChecked(a, strings[3] == "True");
}
catch { }
}
}
}
}
}
catch
{
MessageBox.Show("Error Reading file");
}
}
 
osdDraw();
}
 
private void loadDefaultsToolStripMenuItem_Click(object sender, EventArgs e)
{
setupFunctions();
}
 
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
 
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
getMouseOverItem(e.X, e.Y);
 
mousedown = false;
}
 
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left && mousedown == true)
{
int ansW, ansH;
getCharLoc(e.X, e.Y, out ansW, out ansH);
if (ansH >= getCenter() && !CHK_pal.Checked)
{
ansH += 3;
}
 
NUM_X.Value = Constrain(ansW, 0, basesize.Width - 1);
NUM_Y.Value = Constrain(ansH, 0, 16 - 1);
 
pictureBox1.Focus();
}
else
{
mousedown = false;
}
}
 
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
currentlyselected = getMouseOverItem(e.X, e.Y);
mousedown = true;
}
 
private void updateFirmwareToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
this.toolStripStatusLabel1.Text = "";
 
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.hex|*.hex";
 
ofd.ShowDialog();
 
if (ofd.FileName != "")
{
byte[] FLASH;
try
{
toolStripStatusLabel1.Text = "Reading Hex File";
 
statusStrip1.Refresh();
 
FLASH = readIntelHEXv2(new StreamReader(ofd.FileName));
}
catch { MessageBox.Show("Bad Hex File"); return; }
 
bool fail = false;
ArduinoSTK sp;
 
try
{
if (comPort.IsOpen)
comPort.Close();
 
sp = new ArduinoSTK();
sp.PortName = CMB_ComPort.Text;
sp.BaudRate = 57600;
sp.DtrEnable = true;
 
sp.Open();
}
catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
 
toolStripStatusLabel1.Text = "Connecting to Board";
 
if (sp.connectAP())
{
sp.Progress += new ArduinoSTK.ProgressEventHandler(sp_Progress);
try
{
if (!sp.uploadflash(FLASH, 0, FLASH.Length, 0))
{
if (sp.IsOpen)
sp.Close();
 
MessageBox.Show("Upload failed. Lost sync. Try using Arduino to upload instead",
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
fail = true;
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
 
}
else
{
MessageBox.Show("Failed to talk to bootloader");
}
 
sp.Close();
 
if (!fail)
{
 
toolStripStatusLabel1.Text = "Done";
 
MessageBox.Show("Done!");
}
else
{
toolStripStatusLabel1.Text = "Failed";
}
}
}
 
private void customBGPictureToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg or bmp|*.jpg;*.bmp";
 
ofd.ShowDialog();
 
if (ofd.FileName != "")
{
try
{
bgpicture = Image.FromFile(ofd.FileName);
 
}
catch { MessageBox.Show("Bad Image"); }
 
osdDraw();
}
}
 
private void sendTLogToolStripMenuItem_Click(object sender, EventArgs e)
{
 
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Tlog|*.tlog";
 
ofd.ShowDialog();
 
if (ofd.FileName != "")
{
if (comPort.IsOpen)
comPort.Close();
 
try
{
 
comPort.PortName = CMB_ComPort.Text;
comPort.BaudRate = 57600;
comPort.Open();
 
}
catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
 
BinaryReader br = new BinaryReader(ofd.OpenFile());
 
this.toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
this.toolStripStatusLabel1.Text = "Sending TLOG data...";
 
while (br.BaseStream.Position < br.BaseStream.Length && !this.IsDisposed)
{
try
{
byte[] bytes = br.ReadBytes(20);
 
comPort.Write(bytes, 0, bytes.Length);
 
System.Threading.Thread.Sleep(5);
 
Console.Write(comPort.ReadExisting());
 
}
catch { break; }
 
Application.DoEvents();
}
 
try
{
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
toolStripStatusLabel1.Text = "";
 
comPort.Close();
}
catch { }
}
}
 
private void OSD_FormClosed(object sender, FormClosedEventArgs e)
{
xmlconfig(true);
 
}
 
private void xmlconfig(bool write)
{
if (write || !File.Exists(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"config.xml"))
{
try
{
XmlTextWriter xmlwriter = new XmlTextWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"config.xml", Encoding.ASCII);
xmlwriter.Formatting = Formatting.Indented;
 
xmlwriter.WriteStartDocument();
 
xmlwriter.WriteStartElement("Config");
 
xmlwriter.WriteElementString("comport", CMB_ComPort.Text);
 
xmlwriter.WriteElementString("Pal", CHK_pal.Checked.ToString());
 
xmlwriter.WriteEndElement();
 
xmlwriter.WriteEndDocument();
xmlwriter.Close();
 
//appconfig.Save();
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
else
{
try
{
using (XmlTextReader xmlreader = new XmlTextReader(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"config.xml"))
{
while (xmlreader.Read())
{
xmlreader.MoveToElement();
try
{
switch (xmlreader.Name)
{
case "comport":
string temp = xmlreader.ReadString();
CMB_ComPort.Text = temp;
break;
case "Pal":
string temp2 = xmlreader.ReadString();
CHK_pal.Checked = (temp2 == "True");
break;
case "Config":
break;
case "xml":
break;
default:
if (xmlreader.Name == "") // line feeds
break;
break;
}
}
catch (Exception ee) { Console.WriteLine(ee.Message); } // silent fail on bad entry
}
}
}
catch (Exception ex) { Console.WriteLine("Bad Config File: " + ex.ToString()); } // bad config file
}
}
 
private void updateFontToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Style = ProgressBarStyle.Continuous;
toolStripStatusLabel1.Text = "";
 
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "mcm|*.mcm";
 
ofd.ShowDialog();
 
if (ofd.FileName != "")
{
if (comPort.IsOpen)
comPort.Close();
 
try
{
 
comPort.PortName = CMB_ComPort.Text;
comPort.BaudRate = 57600;
 
comPort.Open();
 
comPort.DtrEnable = false;
comPort.RtsEnable = false;
 
System.Threading.Thread.Sleep(50);
 
comPort.DtrEnable = true;
comPort.RtsEnable = true;
 
System.Threading.Thread.Sleep(2000);
 
comPort.ReadExisting();
 
comPort.WriteLine("");
comPort.WriteLine("");
comPort.WriteLine("");
comPort.WriteLine("");
comPort.WriteLine("");
 
int timeout = 0;
 
while (comPort.BytesToRead == 0)
{
System.Threading.Thread.Sleep(500);
Console.WriteLine("Waiting...");
timeout++;
 
if (timeout > 6)
{
MessageBox.Show("Error entering font mode - No Data");
comPort.Close();
return;
}
}
 
if (!comPort.ReadLine().Contains("Ready for Font"))
{
MessageBox.Show("Error entering CharSet upload mode - invalid data");
comPort.Close();
return;
}
}
catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
 
using (var stream = ofd.OpenFile())
{
 
BinaryReader br = new BinaryReader(stream);
StreamReader sr2 = new StreamReader(br.BaseStream);
 
string device = sr2.ReadLine();
 
if (device != "MAX7456")
{
MessageBox.Show("Invalid MCM");
comPort.Close();
return;
}
 
br.BaseStream.Seek(0, SeekOrigin.Begin);
 
long length = br.BaseStream.Length;
 
while (br.BaseStream.Position < br.BaseStream.Length && !this.IsDisposed)
{
try
{
toolStripProgressBar1.Value = (int)((br.BaseStream.Position / (float)br.BaseStream.Length) * 100);
toolStripStatusLabel1.Text = "CharSet Uploading";
 
 
int read = 256 * 3;// 163847 / 256 + 1; // 163,847 font file
if ((br.BaseStream.Position + read) > br.BaseStream.Length)
{
read = (int)(br.BaseStream.Length - br.BaseStream.Position);
}
length -= read;
 
byte[] buffer = br.ReadBytes(read);
 
comPort.Write(buffer, 0, buffer.Length);
 
int timeout = 0;
 
while (comPort.BytesToRead == 0 && read == 768)
{
System.Threading.Thread.Sleep(10);
timeout++;
 
if (timeout > 10)
{
MessageBox.Show("CharSet upload failed - no response");
comPort.Close();
return;
}
}
 
Console.WriteLine(comPort.ReadExisting());
 
}
catch { break; }
 
Application.DoEvents();
}
 
comPort.WriteLine("\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
 
comPort.DtrEnable = false;
comPort.RtsEnable = false;
 
System.Threading.Thread.Sleep(50);
 
comPort.DtrEnable = true;
comPort.RtsEnable = true;
 
System.Threading.Thread.Sleep(50);
 
comPort.Close();
 
comPort.DtrEnable = false;
comPort.RtsEnable = false;
 
toolStripProgressBar1.Value = 100;
toolStripStatusLabel1.Text = "CharSet Done";
}
}
}
 
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
System.Diagnostics.Process.Start("https://code.google.com/p/arducam-osd/wiki/arducam_osd?tm=6");
}
catch { MessageBox.Show("Webpage open failed... do you have a virus?"); }
}
}
}
/C-OSD/arducam-osd/Tools/OSD/OSD.csproj
0,0 → 1,162
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E35F835A-8B3E-42D5-8852-A6E0F41823B5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OSD</RootNamespace>
<AssemblyName>OSD_Config</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject>OSD.Program</StartupObject>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>osd.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.XML" />
</ItemGroup>
<ItemGroup>
<Compile Include="ArduinoSTK.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="MavlinkOther.cs" />
<Compile Include="mcm.cs" />
<Compile Include="OSD.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="OSD.Designer.cs">
<DependentUpon>OSD.cs</DependentUpon>
</Compile>
<Compile Include="Panels.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Tools.cs" />
<Compile Include="Tuple.cs" />
<EmbeddedResource Include="OSD.resx">
<DependentUpon>OSD.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="key.snk" />
<None Include="OSD_SA_v5.mcm">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Properties\app.manifest" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="osd.ico" />
<None Include="Resources\saveHS.png" />
<None Include="Resources\openHS.png" />
<Content Include="vlcsnap-2012-01-28-07h46m04s95.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
/C-OSD/arducam-osd/Tools/OSD/OSD.resx
0,0 → 1,580
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAEBAAAAEACABoBQAARgAAACAgAAABAAgAqAgAAK4FAAAwMAAAAQAIAKgOAABWDgAAgIAAAAEA
CAAoTAAA/hwAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAABILAAASCwAAAAEAAAABAAB0SCwAdU42AINR
MQCSWjYAmF45AJ5hOgCfYz0AjGRKAIRpWACGd24Aj3tvAI98bwCCd3AAgHp2AJ99aAChZkIApm5KAKZv
TgCjdFYAoXheAKV4WwCmel0ApnpeAKZ7XwCle2AAp3xgAKh9YQCOhX8AmIl/AKuBZgCsgmcAqYFoAKuF
bQCtg2kArYRqAK6FagCvhmwAr4dtAKeLegCth3AArYlxALKFaQC1hWgAsIhvALWJbgCzjXUAs451ALaS
egC4lH0AwJd+AJGPjgCUjYkAmoyEAJ2NgwCbl5UAo46BAKSOgAChkYcArZeJAKCYkwCjnJcAoZ2bAKGe
mwCknpoAu5iCALyZgwC9m4UAv56IAKiinwCro58AsqGWALGknACopKEAqaWjALCoogCzqKEAtqmhALqv
qACzsK4AubCrALi0sQC8tbEAwJmAAMKfiADCo44AwqOPAMCmlQDEpZIAx6qXAMKqmwDHq5gAyqiTAMup
lADLqZUAyKyZAMismgDJrZoAzKyYAM2umgDNrpsAybSnAM2zowDNtKMAzrSjAMK5tADDurUAxbu1AMW8
tQDQuKgA0bmqANG8rQDTvK0A1L2uANfAsgDWwbQA2MS2ANnEtgDbxLUA2MS4ANvGuADcx7kA28i7ANjJ
vwDdyr4A38u+AMbCwADSy8cA1MjAANXIwADWysIA1M3IANnMxADfzsIA3NDHANzRyADc0ckA4M/DAODP
xADi0scA4NHIAOPTyQDj1MkA4dXNAOHVzgDk1csA5dbMAObXzQDo2c4A5tjQAOja0QDp29IA6tvRAOnc
0wDp3dUA693VAOvf1gDt4NcA6+DZAO7h2QDu4toA7+TcAO/l3QDv5t8A8OTcAPDn4ADz6uQA8+vmAPTs
5wD17ukA9u/qAPbv6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgY+Pj4+P
j4+Pj4+Pj4+PmodfIiIvo1ciJUGbIiUlXaeFFpyjX20dqakuhUCpqSudgx2do3Bmim1fFpFAqalBlIMh
nZ1vZhlve5GWQKmpQJSHE3h8MHUWjZAZli2LiRqih3hTQmapeVRUc6RaWl6IqnmTk5OWpaWlpaWlpaWl
paVkPz8/P0hIST+WgE2AlpaaVjlTU0Y2G4s7dYJ9NHBtcigIBhJLIDJZMwtrTAxKRDUnCAAYDQFIIVE+
ajp1fj00Jwk3AjdHBxMKTlAmW1xdYx9pT09PT01qDiksMFtcXGMDBQUFBQUFBQUFBgYQKjFhBA8PDw8P
Dw8PDw8PDw8PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAASCwAAEgsAAAABAAAAAQAAHh0cACsc
EgA6JBYAJiYmAD8/PwBGLBwATjMhAEU8NwBoQioAcEYrAHZILABxTDYAflc+AFBIRABSTEkAVVFPAFpT
TgBTUlIAXllWAF1aWABjXlsAb11SAHNXRgB0WUcAfltFAHdlWgB3aF8AdHNzAHt7ewCGVDUAjFYzAI9Y
NQCPWjgAkl07AJleOQCUYD8AnmE6AKBkPwCDXkgAg21fAJZjQgCXak4AmGZGAJxrTACeb1AAn3BRAJ5z
WACEbmEAhnFkAI51ZgCOd2kAj3hqAIJ8dwCGfnoAin10AJx+awChZUAAomlFAKVtSgCiclQAo3ZZAKZ5
XQCrd1cAp3xgAKh9YgCWgnUAq4JnAK6GbACig3AAsYFjALaHawCxi3IAtZJ7ALySdwC7ln4Ah4aGAIiG
hACQhoAAk4uGAJ6QiACZlpQAm5ubAK6VhQCil5AArJ+XALGVhACzm4wAupeAALyahAC4mogAtp+QAKGg
nwCooJsAv6CNALOkmgC3qJ8AvKGQAKampgCrq6sAtq6pALOzswC+vr4Awp+JAMOijQDFp5MAxqiVAMSr
mwDKqZQAya2bAM6wngDEr6IAw7GlAM20pADMtqgAzbmsAMG5tADMvLEA0LenANG4pwDTu6sA1b+xAMzC
vADWwbMA1cW7ANjEtwDaxrkA3cq+AMTEwwDJxMEAzczMANTJwQDbzsYA28/IAN/SyQDW1NMA3NjWAN3d
3ADhzcAA4dHHAOTUygDn2M8A6NnPAOXZ0QDq3dUA5uHdAOzg1wDu4dkA8ObfAOTj4gDp5eMA6ujmAOzs
6wDx5+EA8+rkAPbv6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmC
g4ODg4ODhIODg4ODhIODhIODhISEg4ODhIOEhIuPeYyRjo6RkpGPj4+Pj4+Oj4+Pj4+Oj46Pj4+Oj4+P
kpKCjJJ9aEpKSmqMlpOYd1hXV1hskZiOaGhqaGhsfpiZmHuMbCMjOzwrISiLmlghKS49LSE9moMhKCoq
KighWJqago4rPY2SkpOOKkmaKEqampqabSGNfiGLmpqamlghj5p7hyNnkpKSk5pCQpMhbZqampp+IYp+
IYuampqagyF8moKFI2mSkZKTmkc9moySmpqamnAhjX4hipqampqLIXyagoUhaJKSkpOaRz2ak2hDPy0o
ID+afiGLmpqamowhepp7gyNokpKSkppHPZpII0NIZmx8mZqDIYqampqaiyF8mnuKI2iSkpKSmkM9mixI
mpqampJ+mX4hi5qampqKIXqago4oSpKSkpKaPEOaK0qampqacCGTfiKKmpqamnghg5qCjkMjZ3B2bUkh
bJpCKmx6eHU9Kpp+IWl1d3BpLCmZmoKOikMjJCEjI2aZmoo7ICMhITt4moMqKioqKitGi5qae46SkpKN
jI2SmpqampqZk5WZmpqampqampqampqampp7i4+PjY+RkZGTmpqampqampqZmpqZmpmampmampqamnKJ
i4uLi4uKi4uTk5OTk5aZmJiYmJiYmJiYmJiYk5iZbnE2NjY2NjY2Nk1OTk5OTk6Cj4+Rj5OPj4+Sj4+P
kpJggmVlZWVlZWVlZWVlZWVlS1OMi41ONTVOjI2NjIyOj0iEYW94eHh3d140NWOLjpRhT4mJjIB/ZQ6J
iYmJiYmJLnscLkVFQkU3YX9hAxp3hWFBd3eJf1SWFHd3al9qancgchwgOCUlKYhlUnmIAFl+YTJra3tk
L5UUa3VMGxsRMB5yHB4lJCVWfwgkIoYbN31lExQHfGQvlRwUUIGDjntrHnIcHiQkInBRAiIic0sdcJSH
lxB8ZC+Oj4+QUQ4QDUEechwgBgUeRJQNARWVGSJnYTKVEHxkL2lra3yXl5aAVR5yHFaUXB0iY5eGl14i
JWdhJpUOY2Qna2tra2tra21tHnIcCyYMCgoKFzIWCgoKUmEJkGJlZCdra2tra2tra20ecn9RUVFRUVFR
UVFRUVFzYQlpbGx1a2tra2tra2trbR5de3x8fHx8e3t7e3t8e4JrIiQkJCQ+SWtra2tra2ttHiIkJCQk
JCQkJCQkJSQkJCQkJCQkJCQlOkZma2tra20eIiQkJCQlJCQkJCQiJCQkJCQkJCQkJCUkJCQ6RUlnbSAk
KiQlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJTo+IiQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAABILAAASCwAAAAEAAAABAAAIBwYADwwKABwS
DAAUExIAGxgXABsaGQAkGBEAIiAeACskHwA3IxYAMCQbADgkFwA4JRkAKyUhAC4rKQA0LCYAMS4sAD0t
IgAzMS8AOzErADY0NAA8NjIAOzk5AEA0LABdOiQAXj0oAGI8JQBBQD8ATUE6AGNCLQBoQSgAYkMwAGhJ
NQBsTDgAckcrAH1PMQBzUTwAQkJBAEpGQgBJSEcAW0xDAFZRTgBRUVEAW1paAGBPRQBgUEcAaFZLAGhd
VgByZVwAfWhbAGRjYgBzb2wAfGtgAHNzcwCKVTMAjlo4AJJaNgCSXTsAml45AJRgPgCeYToAoGM+AINi
TQCDZlMAhW5fAJVhQQCZZUQAnGtMAJBrUwCeb1EAkXFbAJ9wUgCNdmgAhnlwAIB/fwCQdGIAlHtrAJh9
bACRf3MAomdCAKJpRgClbUsAp3FPAKJyVACjdlgApXlcAKlzUQCue1sAsH5eAKd8YACofWEAlYF0AJ2H
eACYiH4ApYJsAKuBZgCuhmwAr5J/ALSJbQCyjHMAt5J6ALyUewCFhIIAnJCIAJaWlgCcnJsApZOIAKmS
hACplYgApZ+cALadjQC5loAAvJqEAL6eigC1npAAv6COALagkgC9o5MApqWkAKyopgCrq6sAu6yjALiv
qQC8sqwAtbW1AL23swDCnIQAwJ+KAMGijQDIpY8AxKWRAMWplwDHq5gAyaeSAMqokwDMrZoAz7GfAMKv
owDCtq8AzbOiAMm3rADMua0Axb+7AMu+tQDStqUA0rinANK6qgDVvrAAx8C7AM7EvQDVwbQA0sW8ANfI
vgDbxbYA28a4AN3JvADFxcQAyMfHAM7IwwDMzMsA0cfAANXKwwDSzMkA3M3DAN3RygDU09MA2dTRAN7Z
1QDe3dwA4c/DAOPRxgDk1csA59jPAOjZzwDh19EA5NjQAOTe2gDq3dUA5ODdAO3g1wDu4dkA8OXdAOPi
4gDp5eQA6ujmAOvr6wDx5uAA8+rlAPbv6gD28OwA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlZehoaGh
oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGYoaGhoaGYoaGhopiYo6SzlaGkr6+vrK+vra+sr6+vr6+v
r6usrK+vr6+vr6+vr6ynrKSsr6+rp6usr6+ns7S0laOvsbGxsbSwsbGxsbGxsbCxs7GxsbSxsbGxs7Gx
tLCzs7Ozs7Szs7Ozs7OytLW0laSxtLSvm5KLkIuSm7G1tbS1tbSqlouLiIuSm7S0tLWsmJqbm5ubmJuk
s7W1tbW1laSxtIdHQjk5OTk5O0WEvLy8t2VCOTs5OTk5QVWqvL2WO0E7Ozs7OztDR4O1vLy+laSxizk5
OVNXX1pTQTk5i728czs5Q1VgYGBHOzlTvLyROTtDQ0NDQ0M5OTtlvL28laSxXzlUqrWzs7S6tGA5VLu8
QjuAvL29vb29m0E5qryRN1+9vLy8vL21czk5s7y8laSxQTqQtbGztbS7vKk5QbG1OTuqvb28vLy9u0M5
mbyROV+9vLy8vLy8tEM5lru8oKSqOTmZtbGzs7W7vLA5OauzOzurvby8vLy8vEU5lruROVW8vLy8vLy8
u185hL28laSjOUGbsbWztbS7vbRCOaO8mpu4vby8vLy8tEM5mLyROV+8vLy8vLy8vF85hL29l6SqOUGb
tLSzs7W7vLRCOaq8vLy7s62qlpGHYjk5tLyNOV+8vLy8vLy8vF85g728laSkOEGbtLS1s7G7vLRCOZu9
vZBVQjk5Ozc5OTtzvLyROVW8vLy8vLy8vUc5hLy9laSqOTqbtLS0tLS1vLRCOaO8kjs3O0NFVV9jc5u8
vLyRN1+8vLy8vLy8vF85g7y+laSpOUGbtLS0s7S1vLRCOaq8YDtfrbS1u7y8vLy8vLyROVW8vLy8vLy8
vV85hL28laSjOUGbsbW0tLO1vLFCOaq8RzuLvby9vLy8u5aRuLyRO1+8vLy8vLy8u1U5g729l6SxOTiS
tbS0tLS0u6s5ObG8QzmRvby8vLy8sUI5tLyROV+7vL28vLy8u0M7kby8l6SxVDljsbS0tLS0un85Rbq8
WjlwvLy8vb28mzk5tbyROV+8vLu8vLy1ljs7pL29nKqvgjk5VG9/goBvWTk5cLy8fzk5Y4CEh3FvRTlF
vLyRN0Jzc3NzZWRfOztVvL29laqxs2U6OTk5OTk5OTlgury8sVQ5OTk5OTk5OUOavLyNOTk5OTk7Ozs5
O1+tvL29l6SttLObhG9lZGRvgqm7vLy8vLWNf3Bwb2+CkrG8vLytiIiRi4iLiIiWq7i8vL29l6qxsbWz
s7O0tLS0s7q8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vb28nKSvtLOzs7Ozs7Ozs7O8vLy7
vLy8u7u8vLy8vLy8u7y8u7y8vLy8vLy8vLy8vL28j6Grr62tra2tq62tra2zu7u7u7u7u7u7u7u7u7u7
u7u7u7y4u7u7u7y7u7u7u7y7jJOpqaqqqqqqqqqqqqqqtbq6urq6urq6urq6urq6urq1tbW1u7W1tbW1
tbW1tbi1iZKTiYmJiYmJiYmJiYmJjZyXnJeenJePj6CxtLG0sbG0tLS0tLS0tLO0tLOztLW0g4l5Gxsb
GxsbGxsbGxslJRsbGyUlJSUlGw6ksbGxsbGts62tsa2ts62xrbGxsbGxcoS3ubm4ubm5ubm5ubm5ubm5
ubm5u7m5thKhq6urq4kpKSkpKXmrpKurq6urq62ta4C3pW2jo6Ojo6Ojo6mgent9o7CwsLC5thKTqaqq
qq54eHh4J2epqampqamqqaurWmSyfBdlZWVlZWVlZUsmJhYFB0mTmpqwthCMmZqTm7m2trm5Ml2ZmZmZ
mZaZmZqbQ1qwfBFYV1dYV1dXRneyubifKgBAkZGxthCEkZGRk7lpMKO5MluRkYh0dHR0c3OWN0WwfAlP
T09PT09Bn76keY64uSsBcYeuthBxh4eHkLlpKJa5MkmHh3QWFhYWFARuNkKwfAk8PDw8PDpqvncuOjpN
uaUDTISutg00QEBMiLhoKJa5MiFAW7e5ubm4ti9zNkKwfAk8PDw8PEKguBQ3Ojw4fbknPoanuEo1NTIP
kLhoIJa+djU1Xbl2e5ubm5GINkKwfAk8PDw8PFCunwMePDw8arkrIlikubm5uZwPi7hoKJa5ubm5ubkr
ExwcHBx0NkKwfAk8Ojo6OjyUuSUCIjojnLkmNj2Zti+JuJwPkLhoKYeRkpGRlLidfHx8eA50NkKwfAk8
CAYGIjxcvpwUAA1mu5wdOj2Ttg5xt5wPkLhoLYaGhoaCiLW4ubm5t3SENkKwfAyXqLAzIjw4e765nai+
sD88PDyXtg1gt5wPi7hoLYaGhoWGhoeHhoeHh4eINkKwfAyHmJhjOj06OWuisKd9RDo6PDyZtgg6sJ0F
KrdoLYaGhoaGhoWGhoaFh4eINkKwfAYaGhoaGhoaGhoZIB8YGhoaGhqKtg05sLilprlpLoaGhoaFhoaG
hYaFh4eINkKwojU1NTU1NTU1NTU1NTU1NTU1NTWcsA05l6Oko6abhYWGhoWGhoaGhoaFh4eINkKwubm5
ubm5ubm5ubm5ubm5ubm5ubm5tyE6PT09PU9XfoGGhoaGhoaGhoaGhoiINjuDi4uLi4uLi4uLi4uLi4eL
i4uLi4uLh1A8PTw8PDw9PVdlgYaGhYaGhoaGhoiINjg6PDw8PDw8Ojw8PDw8PDw8PDw8PDw8PDw8PDw8
PDw9PTw8UGKAhYaGhoaGhoeINjg6PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PT09VmJ+
gYWGhoeINjg6PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PT09PT09PV9ifoaINjo6PT09
PT09PT1CPT09PT09PT09PT1CPT09PT09PT09PT09PT09PT09PT09PVJfODo9T09PT09PT09PT09PT09P
T09PT09PT09PT09PT089PT1QUD09PT09UT09PVJWODxPUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ
UFA9UFBQUFBQUFBRUT1SUlJSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAA
AAAAQAAAEgsAABILAAAAAQAAAAEAAOrq6gD28OwA0se/AOXl5QCgYz4At45zAKOjowC8nIcAoWVAANC0
ogDx6OIAwZqBAOTRxQDBwcEAuJN8APDl3gDKqZQAklk1AO3g2ADNrpkAtqKXAFc1IQBsQykA4NTLAO7i
2ADm1coA8fHxAHhjVwDiz8IA7N/WAMe9tgDy6uQAPz8/AJhmRQDp2tEAS0lIAMe9tQDb29sA18vDAO/v
7wCLVjMAtYZoAIVxZADXwLEA7uLbAM+wngDj1s8A1r2sAODMvwDm2tEA+vr6AN3KvgDf0soA09PTAOfe
2QDp5uUApWxJAHFrZwD19fUA9eznAK+WhgDp3dQA49nUANnCswDFoYsAvb29AObWzAAVFRUAd3d3AAoH
BQBVRToA5NfQANW+sACVlZUA3si6AO3g1gDm2dEA2c7GAKaJdwCXfW0A9e3oAIiHhwCjaEQA2cW5APHm
4ADo2M0AVVVVAO/k3QDn2M4ApGtGAKp0UgCse1sAz8K5AMvLywDg1MwAq4FmAJpeOQDDppIAsrGxAGhX
TACgaUYAaV9XAPXu6ADq3tYAnJycAMiwoADq3NMAamdlANzMwQDy7ekAxKydAMy5rADTuKYAhVIxAKqf
lwCpfmIA0LioACEdGwD27uoAnmE8AKJnQgCUWzcA3NDJAM+xnwDezsUAnYNzAOTTyAC3qaEAroZsAOfb
0wCncVEAo3hcAOjd1ACeb1AA5d/cAMuvnQApKSkANS0nAIBeSgDm2tAAlY6JAFtNRAD17uoAlXNdAM62
pgCNWjoAo3VYAOTY0AAwIRgA0LKgAJ1gOgDz6+YA7uPcAJ5iOwDh0sgAyberANrMwgDFtKkArZB+AMOw
pADJqJMAyaaRAN/TygBcUUsA18e9ANvQyADs3tUAz87NANvQxwDz7OcAp29NABwSDADi2NIAs56QAHVx
bwDo3tcA1LupANbJwQDLs6UA8+vlAOTa1ACMe3EAgX99AH5sYACOY0gA59fOAO/j2wDOrpsA39HIAKGX
kQDTva4ADg0NAD82MADLqpYAr31dAHlWQABmT0AAnmA6AJ5hOwDu4dgAnmA7AN3RygDq3dYA28/IAMys
mADd0soA3dLJAPLp5ADs3dQA7uLaAJ9hOwDr6+sA4dfQALi3twDm4uAAxLeuAKGNgQDJv7cAq3dXAOPV
zADs4dkA4NXOAJZfPgCcYDsAmGJAAJddOADBqJgA9u/pAKRqRwDs7OsAz7uvANS7qwCPVzQAgFQ4AIda
PQDo3dYAnF85AOrf2ADLrJcA7uLZAO3g2QB4SiwA3tHKAOno5wCka0cA49vWAKNpRACgaUgAy6uXAO7h
2QCeYToAyqiTAOzs7ACSXTsA9u/qAAAAAAAkXFxcXNkkJCQeJB4eJB4eHh4kJCQkHh4kHiQeJCQeHiQk
Hh4eHh4eHh4kHh4eHh4eJB4kHiQeJB4eHiQeHh4kHh4kHiQeHh4eHh4eJB4eHh4eJCQeJCQkHiQeHh4e
Hh4kHiQkHh4eHiQeHiQeHh4kJB4kHh4eHh4e2VwCJjQxXtkCAgImJk16ycnJyc3NzsnNycnJycnJyc7J
ycnOycnJyc3JycnJycnJyc3JycnOycnJzsnNyc3JycnJyc3Jyc3Jzc3Jyc3JycnJzcnJycnOycnNyc7J
yc7JycnJycnNycnJycnOycnJycnJycnJycnJzc7JycnJyaLbTD0Sx7qEHgICsSZNpRcXF15eF14XXl5e
F15eFxdeXl5eXl5eXhdeF14XF15eF14XF15eF14XFxdeFxcXFxcXFxcXXl5eF15eXl5eF15eXl4XXl5e
F14XXl4XFxdeXl5eXl5eF15eXl5eXl4XFxdeF15eXl4XF14XXl4XXhcXLpM9Evnv0YQeXAKxJk2i3S5H
Li4uLi4uLi4uLi4uLkcuLi5HLi4uLi4uLkdHLkcuLi4uLi4uLi4uLi4uLkcuLi4uLi4uLi5HLkcuLi4u
Li4uLi4uLi4uLi5HLi4uLi4uLi4uLi5HLi4uLi4uLi4uLi4uLi4uLi4uLkdHLi4uLi6ThB350bq6hCQC
AiZNel6TTDGLTExMTExMTExMTExMTExMi0xMTExMMTFMTDFMTExMTEwxTExMTExMTItMTExMTExMTEyL
TExMTExMTEyLTExMTExMTExMTExMMUxMTExMTExMTDGLTEwxi0xMTExMi0xMMTFMTExMTEwxTExMTIEd
x+/RurqvHlyxJk00LkyBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGB
gYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGB
gYGBgYGBZ/n577q6uq8kAgJNel6ThMrKysrKysrKyspnysrKysrKysrKymfKymfKZ8pnysrKymdnZ8rK
ymfKZ8rKymfKymfKZ8rKZ8rKymfKymdnysrKysrKyspnysrKysrKymfKymfKymfKZ8rKZ8rKysrKZ8rK
ymdnysrKysrKymdnysrH+e8supgP6yQCsU2iLjHKEhLHx8cSEhLHEhISEhISxxLHEscSEhISEhLHEhIS
EhLHEscSEscSxxISEsfHEscSEhISxxISEhISEhISxxISEscSEscSEhLHEhISEsfHEscSxxISEhLHEscS
EscSEhISxxLHEhISEhISEhLHEscSEvnv0bq6V1ev2QImTaKTgUv5+fn5GPn5GMfv+cf5x/kY+cfvGPnH
x8f5+cf5+RgY+fn5+fnv+RjH+Rj5GPnH+Rjv+e/H+fn5+cf57/n5+Rj5x8fv+fn5x8f5x/n5+e/5+cfH
+Rj5+fnHx8f5+fn5x8f5x8f57+/H7xj5x8f5x/kY+e+6urpXV6/ZAibLokeBHfnHGMf5+cf5GO/5xwwr
KysrKysrKysM+RjH7/nHGMf5x8f57/n5+fkYx8fH+fkY+fnHSisrKysrKysrKysrWMf5xxj5+fn57/nH
GMfv+cf5+fkY+cfH+e/578f5x/nvx+/H+fn57+/Hx/nH+cfH+fnH0Sy6mFdXr9kCJsuiR4Ed78f5+cf5
i4cOc/39/f39/f39/f39/f39/V8HK1dQUFBQZlBmUGZQUFBQUFBQmgdf/f39/f39/f39/f39/f39/SFf
B5pQUFBQUFBQUGZQUAdfX19fX19fX19fX19fX19fX19fX18OYYczUFBmUFBQZlDjduP+Af6pHgImqKJH
gUvvGO/vDAUh/f39/f39/f39/f39/f39/f39/f39IQ5U/v7+/v7+/v7+/v7+PV/9/f39/f39/f39/f39
/f39/f39/f39/V89/v7+/v7+/v7+/f39/f39/f39/f39/f39/f39/f39/f39/f0hDjP+/v7+/v7+AQEB
AW3ZAibLF0eBS/n5GIch/f39/f39/f39/f39/f39/f39/f39/f39/SE//v7+/v7+/v7+/n4h/f39/f39
/f39/f39/f39/f39/f39/f39/SF+/v7+/v7+/v79/f39/f39/f39/f39/f39/f39/f39/f39/f39/V89
/v7+/v4BAQEBbR4CJsuiR4Ed+fmH/f39/f39/f39/f39/f39/f39/f39/f39/f39/f0//v7+/v7+/v5+
If39/f39/f39/f39/f39/f39/f39/f39/f39/SFU/v7+/v7+/v39/f39/f39/f39/f39/f39/f39/f39
/f39/f39/SF+/v4BAQEBAQFt2QImy6JHgR0YDCH9/f39/f39/f39/f39/f39/f39/f39/f39/f39/SE9
/v7+/v7+/l/9/f39/f39/f39/f39/f39/f39/f39/f39/f39/Q7+/v7+/v7+/f39/f39/f39/f39/f39
/f39/f39/f39/f39/f39/YVU/v7+AQEBAW3ZAibLF0eBHdwF/f39/f39/f2SBUAHQCsrKysrQAdABYP9
/f39/f39/Q7+/v7+/v4z/f39/f39/YUFYWFhMzMzMzMzMzNhYV/9/f39/f39/VT+/v7+/v79/f39/SFf
X19fX19fX19fX19fX19fhf39/f39/f39/WH+/v4BAQEBbR4CJsuiR4ESWP39/f39/f2ADMfv+fnH+cf5
x8fv+VQK/j0F/f39/f39/VT+/v7+/g79/f39/f0//v7+/v7+/v7+/v7+/v7+/lRh/f39/f39dP7+/v7+
/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+VD9f/f39/f39IVT+AQEBAQFtHgImpaKTgRKH/f39/f39h8fH
+fnHx/nH+fn5+fn5Ch/+/v6H/f39/f39dP7+/v7+g/39/f39Yf7+/v7+/v7+/v7+/v7+/v7+/v4F/f39
/f0H/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v4H/f39/f39dP7+AQEBAW3ZAibLF0eBSwX9
/f39/XMY+RjHx8fH+e/H7/nHx/nPH/7+/v5f/f39/f0O/v7+/v79/f39/f1U/v7+/v7+/v7+/v7+/v7+
/v7+/j/9/f39/V/+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0F/v4BAQEBbR4C
Jsuik4Edkv39/f39dPnv+e/vx8f5GO/Hx8fH+R+z/v7+/j/9/f39/YP+/v7+Pf39/f39hf7+/v7+/v7+
/v7+/v7+/v7+/v7+fv39/f39X/7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/nT9/f39/YX+
/gEBAQFt2QImy6JHgR39/f39/f2L+fkY+cf5+fnH+fn5+fnHlzv+/v7+Pf39/f39/f7+/v4z/f39/f1f
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39/f1f/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+
Pf39/f39/f7+AQEBAW3ZAiaookeBHf39/f39/e/5+cfv+cfHxxjHx+/HGO87Zv7+/v7+/f39/f39/v7+
/jP9/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/YX+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/f39/f392/4BAQEBbdkCJsuiR4FI/f39/f2S+cfH+cf5x/n5+fn5+cf5GDtm/v7+/v79
/f39/f1+/v7+M/39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/v39/f39/f7+/v7+/v39/f39X/7+/v7+
/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0z/gEBAQFt2QImy6JHgUj9/f39/XP5+e/5x/n5GMfHx8cYGO/5
UI7+/v7+/oX9/f39/TP+/v4z/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39/f2D/v7+/v7+/f39
/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/l/9/f39/TP+AQEBAW3ZAibLokeBSP39/f39c/nHxxj5x/nv
x/n5x/nHGPlQ/v7+/v7+X/39/f39M/7+/lQFX19fX3T+/v7+/v7+/v7+/v7+/v7+/v7+/jP9/f39/V/+
/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v7+X/39/f39M/4BAQEBbR4CJqWiR4FI/f39/f1z
xxjH+fnvGMf5x+/HGPnH+VD+/v7+/v5f/f39/f0z/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
P/39/f39X/7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0z/gEBAQFtHgImy6JH
gUj9/f39/XP57/kYx/n5+Rj5x+/v+cf5UHb+/v7+/l/9/f39/TP+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v4O/f39/f0H/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/l/9/f39/TP+AQEB
AW3ZAibLokeBSP39/f39c8fHx/n5+Rj5+RjH+fn5+RhQjv7+/v7+X/39/f39M/7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v49Yf39/f39/XT+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v7+X/39
/f39M/4BAQEBbdkCJsuiR4FI/f39/f1z7+/5x8f57/n578fv78fH+Ttm/v7+/v5f/f39/f0z/v7+/v7+
/v7+/v7+/v7+/v5+MzOHYWEOX1+D/f39/f39/f39VP7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+
/v7+/v5f/f39/f0z/gEBAQFtHgImy6JHgUj9/f39/XMY+e8Y+RjH+cf5+cf5+RjHO1D+/v7+/l/9/f39
/TP+/v7+/v7+/v7+fmEFX/39/f39/f39/f39/f39/f39/f39/Q7+/v7+/v7+/f39/f1f/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/l/9/f39/TP+AQEBAW3ZAibLF0eBSP39/f39c/n57/n5x8f5x+/5x8f5GPmXO/7+
/v7+X/39/f39M/7+/v7+/v7+dIX9/f39/f39/f39/f39/f39/f39/f39/f0hVP7+/v7+/v79/f39/V/+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+X/39/f39M/4BAQEBbdkCJsuiR4FI/f39/f1z7/n5+fn5+fnHx8fH
+cf5GB+z/v7+/v5f/f39/f0z/v7+/v7+VF/9/f39/f39/f39/f39/f39/f39/f39/f39g37+/v7+/v7+
/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0z/gEBAQFtHgImy6JHgUj9/f39/XP5+fkY
+cf5x/kY+fnH+Rj5zx/+/v7+/l/9/f39/TP+/v7+/v5f/f39/f39/f39/f39/f39/f39/f39/f39hWFU
/v7+/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/l/9/f39/TP+AQEBAW0eAialokeBSP39
/f39c/nHx+/5x8fH78fH+fn578cKz/7+/v7+X/39/f39M/7+/v7+dP39/f39/f39/f39/f39/f39/f0h
X18Hh37+/v7+/v7+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v7+X/39/f39M/4BAQEBbdkC
JsuiR4FI/f39/f1zx/n5x/n5+ccY+e/H+fn5+VQK/v7+/v5f/f39/f0z/v7+/v6D/f39/f39/f1fXwVh
YYczM37+/v7+/v7+/v7+/v7+/v7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0z
/gEBAQFtHgImy6JHgUj9/f39/XPHx+/Hx/n57/nHx/n5+cf5D1T+/v7+/l/9/f39/TP+/v7+Pf39/f39
/YMz/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/l/9/f39/TP+AQEBAW0eAibLokeBSP39/f39c/n57+/H78f5x/nH+cfHx/lXD/7+/v7+X/39/f39M/7+
/v50/f39/f0hVP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+X/39/f39M/4BAQEBbR4CJsuiR4FI/f39/f1z+Rj5GMcY+fnvx/n57/n5x++Yjv7+/v5f
/f39/f0z/v7+/mH9/f39/Q7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v39/f39X/7+/v7+
/v7+/v7+/v7+/v7+/v7+/v5f/f39/f0z/gEBAQFtHgImy6JHgUj9/f39/XMY+e/5+fnvx8cYx8fH7/n5
77o7/v7+/oX9/f39/TP+/v7+B/39/f39h/7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39
/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/l/9/f39/TMBAQEBAW3ZAibLokeBSP39/f39kvnv+e/H7/nH
x/kY+RgYx+/v0bP+/v7+/f39/f39fv7+/v5f/f39/f0z/v7+/v7+/v7+/v7+/v7+/v7+/j/9/f39/TP+
/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v7+g/39/f39M/4BAQEBbdkCJqWiR4Ed/f39/f39
x/n57/nH+fn5+e/H78f57/n5z/7+/v79/f39/f3+/v7+/l/9/f39/TP+/v7+/v7+/v7+/v7+/v7+/v7+
Yf39/f39M/7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f3b/gEBAQFtHgImy6KT
gR39/f39/f0Y+cfvGPkY+e/5+RgY+fnvx8cK/v7+Pf39/f39/f7+/v7+X/39/f39M/7+/v7+/v7+/v7+
/v7+/v7+/v5h/f39/f0z/v7+/v7+/f39/f1f/v7+/v7+/v7+/v7+/v7+/v7+/v7+Pf39/f39/QH+AQEB
AW0eAiaookeBHZL9/f39/XTH+fn5+fnH+e/5+cf57/n5+Vf+/v50/f39/f2D/v7+/v4H/f39/f1h/v7+
/v7+/v7+/v7+/v7+/v7+/g79/f39/TP+/v7+/v79/f39/V/+/v7+/v7+/v7+/v7+/v7+/v7+/v50/f39
/f2F/v4BAQEBbdkCJsuik4EdgP39/f39gPnHxxjvx/nHx/kYx+/H7/nvujv+/l/9/f39/QX+/v7+/mH9
/f39/Q7+/v7+/v7+/v7+/v7+/v7+/v7+X/39/f39M/7+/v7+/v39/f39X/7+/v7+/v7+/v7+/v7+/v7+
/v7+/l/9/f39/QX+AQEBAQFt2QImy6JHgR2H/f39/f39h+/H78fv7/n5x/nH+Rj5+fnRs/50/f39/f39
h/7+/v7+dP39/f39IVT+/v7+/v7+/v7+/v7+/v7+/j39/f39/f0z/v7+/v7+/f39/f1f/v7+/v7+/v7+
/v7+/v7+/v7+/v6H/f39/f39h/7+AQEBAW0eAibLokeBHQz9/f39/f39BQz5GPn5+fnHGPnHx8fv+flC
Dv39/f39/f09/v7+/v5+/f39/f39gz3+/v7+/v7+/v7+/v7+/v5UDv39/f39/f7+/v7+/v79/f39/V/+
/v7+/v7+/v7+/v7+/v7+/v4/X/39/f39/f1UAf4BAQEBbdkCJsuik4Ed+QX9/f39/f39/XNAB4crKysr
Kysrh0AHc/39/f39/f39Bf7+/v7+/v6F/f39/f39/YMHYXQzMzMzMzN0YWEHX/39/f39/f2D/v7+/v7+
/v39/f39hWFhYWFhYWFhYWFhYWEHX1+D/f39/f39/f39Dv4B/gEBAQFt2QImyxdHgR3HDCH9/f39/f39
/f39/f39/f39/f39/f39/f39/f39/f09/v7+/v7+/mH9/f39/f39/f39/f39/f39/f39/f39/f39/f39
/XT+/v7+/v7+/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/SFU/v7+AQEBAW3ZAialokeBEsf5
h/39/f39/f39/f39/f39/f39/f39/f39/f39/f39dP7+/v7+/v7+VIX9/f39/f39/f39/f39/f39/f39
/f39/f39/f2D/v7+/v7+/v79/f39/f39/f39/f39/f39/f39/f39/f39/f39/f0hfv7+/gEBAQEBbdkC
JqWiR4Ed7xjHhyH9/f39/f39/f39/f39/f39/f39/f39/f39/XT+/v7+/v7+/v7+fiH9/f39/f39/f39
/f39/f39/f39/f39/f39g1T+/v7+/v7+/v39/f39/f39/f39/f39/f39/f39/f39/f39/f39g37+/v7+
/gEBAQFt2QImy6JHgR35xxj5DAX9/f39/f39/f39/f39/f39/f39/f39/Q49/v7+/v7+/v7+/v7+foX9
/f39/f39/f39/f39/f39/f39/f39IWH+/v7+/v7+/v7+/f39/f39/f39/f39/f39/f39/f39/f39/f39
BZD+/v7+/v7+AQEBAW0eAibLokeBHfn5x+/H+ViHBZL9/f39/f39/f39/f39/f2FgJA9/v7+/v7+/v7+
/v7+/v7+/nQOhf39/f39/f39/f39/f39/f2DDnT+/v7+/v7+/v7+/v4FX19fX19fX19fX19fX19fX19f
X19fXwdhM1T+/v7+/v7+/v4BAQEBbdkCJssXR4Ed+fnv+fn5+fn5x/lYKysrKysrKysrKytYx/nHVP7+
/v7+/v7+/v7+/v7+/v7+/v7+/v4zMzMzMzMzMzMzMz3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/gEBAQFt2QImy6JHgUv5GMf57xjHx+8Yx/kYx8f5x8fH+e/H
x/n5+e+6UP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4BAQEBAW3ZAibLokeBHfn5+e/5+fn5x/nH+fn5
+fnv+fnHx/nH+Rj5xxgK/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4BAQEBbR4CJsuik4Edx/n578f5
+fnHGPnH+Rj5x+/57/n5x/nH+fnvxw9m/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/gEBAQFt2QImyxdH
gRL5+fnv+e/5+fn5+fn5x/nH+fn5+e/5x/n5+fn50Zf+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4BAQEB
AW0kArFN8i5MyktLS0sdSx0SSx0dSx0dHR1LHUtLSx0dHR1LHR1LD2ZQZmZmUGZQZmZQZlBmUFBQUGZQ
UFBQZmZmUGZQZmZQZmZmZlBQZmZmUGZmZmZmUFBmZlBQZmZmZmZQZmZQZmZQUFBmZlBmUFBmUFBmZlBQ
ZlBQjv7+/gEBqSRcApzLF7lq0NDQ0NDQPdDQ0NDQ0NDQ0NBq0NDQ0NDQ0NDQ0NAdHzs7qTs7O6k7Ozs7
Ozs7Ozs7Ozs7Ozs7Ozs7O6k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7
qTs7Ozs7Ozs7OztQUFBmdv6X11yksZya21giIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiK6l5ez
s5eXs7Ozl5eXs5eXs5ezl5eXs7OXl7Ozl7OXl7OXl5eXs5eXl7OXs7OXl5eXl5eXs7OXs5eXl7OXs5ez
s7OXl7OXl7Ozl5ezs5ezl5ezl5c7Ozs7UB/X2VykM3yaQlW5WFVVVblVVVW5VblYVVVVWFVVVVVYVVVV
WFW5VSIKHx8fHx8fH88fHx8fHx/PHx/PH88fH88fHx8fHx/PHx8fHx8fHx/PHx/PHx8fHx/PHx8fHx8f
zx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fzx8fH7OXs5c7Cp3mXFykbBx+GRkZGRkZGRkZGRkZGRkZGRkZ
GRkZGRkZGRkZGRkZGR0KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCh8fs7MKn28kP1MzMBwMDAwMDH4MDAwM
fgx+DAwMDAwMfgx+DAwMDAwMDAwMQldUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRU
VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVAoKCgoKz1Sfm+ZIXFMzMBwc
HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcIldXVw9XDw8PDw8PD1cPVw8PDw8PDw8PDw8PDw8P
Vw9XDw9XDw9XVw9XVw8PD1dXD1dXD1cPDw8PD1cPDw8PVw8PDw8PDw8PDw8PDw9XDw9XD1RUVAoKV26d
m+ZIP1MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAcHSwsLCwsLCwsLCwsLCwsLCwsLCws
LCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCyY
V1cPD1Qsf5+yb+ZIP1NKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp+x9zw3Nzc3Nzc3Nzc
3Nzc8Nzc3Nzc3Nzc+fn53Nzw3Nzc3Nzc3Nzc8Nzc8Nzc3Nzw3PDw3Nzw3Nzc8Nzc3Nzc3Nzc3Nzw3Nzc
3Nzc3PDc3NHRLLpXV9wUbp+Qb+eQrWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU5OTk5
OTk5OTk5OTk5OTk5OTk5OTk5OTk5a65cHR0dph0dph1nHR0dHR0dph2mHWcdHR0dHR0dph0dHR0dHaYd
HaYdHR0dHR0dph2mZ2cdEhLc8NHR7RTibmmydOIq////////////////////////////////////////
////////////////////////////////////////RXJqampqampqampqampqampqampqampqPWpqampq
ampqampqampqampqampqamo9amo9PWqmph0dEvBnreLibmm+b70gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgwP+/f0wiIiIiIiIiIiIiIiIiIiIiIiIi
IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiImpqatDKZ4EHFOLibqIA8wMDAwMDAwMDAwMDAwMD
AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA/MN/79yWFW5WFhYWFhYWLlY
WFi5uVVVVVVVVVVVVVVVVVVCWFhYWFhYWFhYWFhYuVhYWFhYWFhYWCIiImpqMTytQGHiNPz8/Pz8/Pz8
/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/A3/v3JCGUIZ
QhlCQkJCQkIZQnIjIyMjIyMjIyMjIyMjIL1+GUIZQhlCGUIZQkJCQkIZGRlCQkJCuVhYIiJHPAetQGHL
/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8
Df+/cn5+fn5+fn5+fn5+fn4Xtf//////////////////a35+fn5+fn5+fn5+fn5+fn5+fn5+fhkZQkK5
WNuePAcHQE38/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8
/Pz8/Pz8/PwN/79yDAwMDAwMDAwMDAwMQlhyICAgICAgICAgICAgRf85DAwMDAwMDAwMDAwMDAwMDAwM
DAwMfn4ZGRlCfk4OPAcHnPz8/ABRtn9sMGxsbGxsbGxsbGxsMGxsbGxsbGxsbGxsbGxsbGxsMGzbrzY2
NjY2NjY2NjY2NjY28/z8/A3/v60cHBwcHBwcHBwcHBzW/Pz8/Pz8/Pz8/Pz8/Px1/zkcHBwcHBwcHBwc
HBwcHBwcHBwcHBwcDAx+fhmaTp4ODgex/Pz8AP//Y0BAQEChQEBAQEBAQEBAQEBAQEBAQEBAQEBAG8DA
wMDAwMAgY38wMDAwMDAwMDAwMDA3/Pz8Df+/vTAwMDAwMDAwMDAwMIb8/Pz8/Pz8/Pz8/Pz803X/OTAw
MDAwMDAwMDAwMDAwMDAwMDAwMBwcHAwMDAx9Tk4FDqT8/PwAQ/9jCwsLCwsLCwsLCwsLCwsLCwsLCwsL
CwsOG4lF////////////Q2utSkpKSkpKSkpKSjf8/PwN/7+9SkpKSkpKSkpKSkpKNvz8/Pz8/Pz8/Pz8
/Pz8df9rSkpKSkpKSkpKSkpKSkpKSkpKSkpKSjMwMDAcM4NfX4CAXPz8/ABD/8QFBQUFBQUFBQUFBQUF
BQUFBQUFBQUFgIm/QyBWZWUjIEO//////7+1Pz8/Pz8/Pz9T1vz8/A3/v9g/Pz8/Pz8/Pz8/Pz/1/Pz8
/ADz0/zl/Pz8/NN1/xs/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/U1NTSkpTj4ODc3NI/Pz8AEP/xCkpKSkp
KSkpKSkpKSkpKSkpKSkpKYPAwFFipyUAACVdYrbAv////78qLy8vLy8vLyvW/Pz8Df+/2C8vLy8vLy8v
Ly8vL7T8/PwDa2VyfHw2/Pz8/HX/ZS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8rPz8/Pz8hhYWSkub8/PwA
Q/9GwsLCwsLCwsLCwsLCwsLCwsLCwsKFiVGnGjI6J/z8GjoyJ11EQ////0UqcHBwcHBwsNb8/PwN/7/Y
cHBwcHBwcHBwcHBwrPz8/AP//7dwcLz8/PzTdf9lcHBwcHBwcHBwcHBwcHBwcHBwcHBwsOcvLy8rSLi4
9/eFb/z8/ABD/xZaWlpaWlpaWlpaWlpaWlpaWlpahSNiGjInANPT09PT09MaMvwGiP///0U8lZWVlZVw
1vz8/A3/v32VlZUJlZWVlQmVlQnU/Pz8A7//twmVvPz8/Px1/2WVlZWVlZWVCWG3KioqKioqKioqKioq
Kiq1POfn6t7gISGy/Pz8AEP/Fao4ODg4ODg4ODg4ODg4ODg4OGSjQTIa0/z8Jxo6Ohr8/NP8GjpiiP//
/0a7u7u7u5WG/Pz8Df+/fbu7u7u7u7u7u7u7u938/PwDv/8bLbt8/Pz803X/Y7u7u7u7u7u7Tv//////
/////////////0OjcHAokf393rL8/PwAQ/8VCAgICAgICAgICAgICHgICHh4wGI6J/z8GhrW1VFRQQMa
J/zTJzoGQ///vwfB+Pj4h4b8/PwN/79P+Pj4+Pj4+Pj4+PjuXvz8/AO//xv4+Hz8/Pz8df9j+Pj4+Pj4
zMxORUVFRUVFRUVFRUVFRUX/q6MJCXEo6Hl5afz8/ABD/xWZmZmZd8bSmdKZxtJ3mZnGmZFRGif8/Bol
aEa44HeKowYDGvz8GidrRf//wPv7+xDMhvz8/A3/v0/7EPsQ+xD7EBD7+8Gi/Pz8A7//GxAQbPz8/NN1
/2MQEBAQ+xB88wMlJSUlJSUlJSUlJSUlBkO/o5V7cSjoEXlp/Pz8AEP/Ffr6+sj6xvrGxfrG+vrFxfqZ
jSUn/PwnXSOJYPrGxsX6Fq5dOvzTOl2I//+J+6D7+8yG/Pz8Df+/T/v7+/v7+/v7+/v7EDT8/PwDv/8b
+/ts/Pz8/HX/Y/v7+/v7+8n8/Pz8/Pz8/Pz8/Pz8/PzVQ0ONlS1xKOgReWn8/PwAQ/8VxfrGxsj6+sX6
+sXF+sXGyBaMGvz8GiUjq3HGxsj6xvrG3hsAOtMnGmv//4n7+/v7zIb8/PwN/0XAjUZGRkZGRkZGffsQ
NPz8/AO//xv7+2z8/PzTdf+UjUZGRkZGf/z8/Pz8/Pz8/Pz8/Pz8/F0qt06VLXEo6BF5afz8/ABD/xXF
+vrFxfrF+vr6xvrG+vr6xA0a/CcaUUUVlsb6xsj6+sb6FmgyJ9MyYnX/lKH7+/vMhvz8/EH/////////
//////+3+xA0/Pz8A7//G/v7bPz8/ABD//////////9R/Pz8/Pz8/Pz8/Pz8/Pz8hgm7LXstcSjoEXlp
/Pz8AEP/Ffr6+vrFxsb6+vrI+vr6xvpPNSf8GiWIRRbsxcj6+sbFyPooY/M60zpdwP+UKfv7+8yG/Pz8
pyMjIyMjIyMjIyD/RSr7EDT8/PwDv/8b+/ts/Pz802UjIyMjIyMjIGL8/PxBaGKT1NTU1NTU1Kx8e7st
lS1xKOgReWn8/PwAQ/8V+vr6xvrF+vr6xcbF+sXF+jzW/Pw6aEX/FsX6xcX6xsX6xmAW1Tr8JyUj/6sI
KaD7zIb8/PzTAAAAAAAAAAAAJf//KvsQNPz8/AO//xv7+2z8/Pz8AAAAAAAAAADz0/z8/FZFwBAQEBAQ
EBDB+O67uy17e3Eo6BF5afz8/ABD/xX6yMb6xvr6xvr6+sXF+vr64tP8Jyc5//+U6Pr6xcXGxcXFxZGM
Gif8AFb/lGAEKaHMhvz8/Pz8/Pz8/Pz8/Pw1/0Uq+xA0/Pz8A7//G/v7bPz8/Pz8/Pz8/Pz8/Pz8/Pz8
Vv/Anp6enp6enp6ePDw8QJV7cSjoEXlp/Pz8AEP/Ffr6yMX6yMbFxcbG+sXFxfpu0/wnJzn//0UW+sj6
+sX6xcX6kYwaJ/wAVv+UyMgEKaCG/Pz8/Pz8/Pz8/Pz8/DX//yr7EDT8/PwDv/8b+/ts/Pz8/Pz8/Pz8
/Pz8/Pz8/PxW/0V1dXV1dXV1dXV1Q4lley1xKOgReWn8/PwAQ/8Vxcb6+sj6+sXG+sX6+vrGxTzWJ/wa
aP///5Th+vrF+sb6+mAWYjonJyUj/6v6+sgEKYb8/Pz8/Pz8/Pz8/Pz8Nf9FKvsQNPz8/AO//xv7+3z8
/Pz8/Pz8/Pz8/Pz8/Pz8/CP/////////////////v42Ve3Eo6BF5afz8/ABD/xX6xfr6+vr6+sb6yPr6
+vrFTzUn/Bo1iP///xb6xcj6xvqWeaMDOtM6XcBFFsX6yMXk1Pz8/KcjVhRIK4b8/Pw1//8q+xA0/Pz8
A7//G/v7CUhISEhISEhISEhISOe0/Pz8QWgGaAZoBmgGaAYGRL9Do3t7cSjoEXlp/Pz8AEP/FcX6+vrI
+vrS0tLF+sX6+vrEXRr8Jye2v///Ravxefr6+iiUaDIn/DJidavhxcXF+lI0/Pz8Qf+/T/sQrPz8/DX/
RSr7EDT8/PwDv/8b+/v7+/v7+/v7+/v7+/v7+7z8/Pz8/Pz8/Pz8/Pz8/PxBQ7+Ne3txKOgReWn8/PwA
Q/8VxcbscRYWFhYWFhbx7Pr6+hZJGvzTGjUgRf////+r8fEVRSPWOtMnGq5F8cbF+sbI9jT8/PwN/79P
+8E+/Pz8Nf9FKvsQNPz8/AO//xv7+/v7+/v7+/v7+/v7+/v7vPz8/Pz8/Pz8/Pz8/Pz8/A0gRrd7LXEo
6BF5afz8/ABD/xX6xeGU/////////6t5xcbFxWMlJ/z8Gg0gv////////79WDTr8/Do1iJR5+vrI+vr2
NPz8/A3/v0/7wT78/Pw1//8q+xA0/Pz8A7//G/v7+/v7+/v7+/v7+/v7+/s0/Pz8/Pz8/Pz8/Pz8/Pz8
hgm7LZV7cSjoEXlp/Pz8AEP/FZn0WYlDQ0NDQ0X/q3nFxsjF6UkaJ/wnOjVJiHVFRXUgSdY6/PwnGq6U
4cXFxcb6+vY0/Pz8Df+/T/vBPvz8/DX/RSr7EDT8/PwDv/8b+/v7+/v7+/v7+/v7+/v7+3w3Nzc3Nzc3
Nzc3Nzc3Nze0lbstlS1xKOgReWn8/PwAQ/8VWpysp11dXV1dRP+r4fr6+vr6wEE6J/z8OjolBq6uYiU6
Ovz8JzoGlGD6+sbFyPr69jT8/PwN/0WP+8E+/Pz8Nf9FKvsQNPz8/AO//xv7+/v7+/v7+/v7+/v7+/v7
E5WVlZWVlZWVlZWVlZWVCZW7uy17e3Eo6BF5afz8/ABD/xXahvz8/Pz8/PxR/6t5xcX6+nfoYw0yGtPT
JxoaGhoaGifT/Boy1SB5xcXGxcX6xshSNPz8/A3/RekF+z78/Pw1//8q+6A0/Pz8A7//G/v7+/v7+/v7
+/v7+/v7+/v7+/v7+/v7+/v7+/v7+xDB7hO7LXt7cSjoEXlp/Pz8AEP/FVr1/Pz8/Pz8/L0VFmDGxsXF
+vr9Y9U6MifT/Pz8/PzT/BoyGn/EYPrG+sbGxfrG+vY0/Pz8Df9F8Qgp1Pz8/DX/RbdAByb8/PwDv/8b
+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+8HuE7ste3txKOgReWn8/PwAQ/8V2tb8/Pz8/Pz8
svr6+vr6yPrFxsh5Rr01MjI6Gvz8GjIyGjVRRmDI+sXGxfrGxcXI9jT8/PwN/0Xx+gic/Pz8Nf//dYmJ
Bvz8/AO//xv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/sQwe4Tuy2Ve3Eo6BF5afz8/ABD/xWq
zHSQkJCQkHQOxfr6xsX6+vrG+sZg/RtJ1TWGAPOGp9WMG+r6+vr6xcbIxfrI+sVSNPz8/A3/RfHICKT8
/Pw1//////9R/Pz8A7//G/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vB7hO7LZV7cSjoEXlp
/Pz8AEP/FcYEBAQEBAQEBJnIxfr6xvr6+sbF+vqW3+rDg04LC06Pw+n6yPr6+vr6+vr6+sbF+lI0/Pz8
Df9F8cUIpPz8/NZRUVFRUQ38/PwDv/8b+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7EMHuE7st
lXtxKOgReWn8/PwAQ/8V7BERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
ERER4Hr8/PwN/0Xx+gik/Pz8/Pz8/Pz8/Pz8/AO//xv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7
+/v7we4Tuy17LXEo6BF5afz8/ABD/0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVF
RUVFRUVFRUVFRUVDDfz8/A3/RfH6CKT8/Pz8/Pz8/Pz8/Pz884mUKvv7+/v7+/v7+/v7+/v7+/v7+/v7
+/v7+/v7+/v7+/vB7hO7LZV7cSjoEXlp/Pz8AEX/////////////////////////////////////////
//////////////////////////9B/Pz8Df9F8cgIpPz8/Pz8/Pz8/Pz8/PzTzPv7+/v7+/v7+/v7+/v7
+/v7+/v7+/v7+/v7+/v7+/v7EMHuE7stlS1xKOgReWn8/PzTaElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJ
SUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJaCX8/PwN/0Xx+ghT/AAAAAAAAAAA09PT0/PM+/v7+/v7
+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7wcwTuy17LXEo6BF5afz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8
/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/A3/RRb6mVpbW1tbW1tbW1tbXwvB
CRD7+/v7+/v7+/v7+6D7+/v7+/v7+/v7+/v7+/v7+/v7+xDB7hO7LZV7cSjoEXlp/Pz8/Pz8/Pz8/Pz8
/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8DUWr8cbGyMX6xfr6
+vr6+vrGxvQpQPv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7EMHuE7ste3txKOgRebL8/Pz8
/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pzd+sX6
xcX6lsb6+vr6xsXFxfrFxvo4KQf7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/sQwe4Tuy17e3Eo
6BF5b/z8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8
/Pz8/IbGxfrF+vr6yMb6+vrG+vr6xcb6+sbFOCkL+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vB
7hO7LXt7cSjoEXlhNvX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1
9fX19fX19fX19fX1pMXGxcbFyMb6xcj6+vr6xvrFyMX6yPr6xeTCDvv7+/v7+/v7+/v7+/v7+/v7+/v7
+/v7+/v7EMHME7stlS1xKOgReeFg7Mb6+vr6xfr6+vr6xsX6+vr6+vrFxvrFyPrF+vr6xcXG+vr6+sj6
xvrFxvr6xcX6+vrF+sjG+sXGxvr6xvr6xcX6+vr6+vr6yPr6xsX6+sb6+sj6+sZ4WgVA+/v7+/v7+/v7
+/v7+/v7+/v7+/v7+/sQwe4Tuy2VLXEo6BF54WCWxfrG+vr6yMXF+sX6+sXF+sj6xvrF+sXGxsbF+sXG
xfr6yPr6xcb6xcbIxcbI+sj6+sXFxsXIxfrG+vrF+vr6xfr6+vrI+sX6xfrF+sjFxfrF+vr6xcX6BKop
C6H7+/v7+/v7+/v7+/v7+/v7+/v7+xDB7hO7LXt7cSjoEXnhYJbI+sj6yMXFxsX6yPr6xfr6xfr6xvrF
xvr6yMb6+sbF+sb6xvrG+vr6+sb6xsj6xsb6xsX6+vrI+sb6yMXG+vr6xvr6+sX6+vrFxsj6xvrI+vr6
+sX6xsjF+sUI2gVAofv7+/v7+/v7+/v7+/v7+/v7+8HuE7stlS1xKOgReeFg7MXF+sb6xfr6xcbG+sXF
+sbFxsXGxvrF+vrG+vrGyPr6+vrI+sX6+sXGyPrI+sXGxcXFxvrF+sb6xfr6+vrF+vrF+sX6+vr6xvrF
+sb6+vrGxfrGxvrF+sX6+vr6xTjCBUD7+/v7+/v7+/v7+/v7+/sQwe4Tuy2Ve3Eo6BF54WDsxsb6xcbG
+sX6xsX6xcbFxsjF+sjIxfrFxcb6+sbFxcb6+vr6+sb6xsX6xfrFyMX6+sbGxfrF+sjFxsj6xsXI+sbG
xvrFyMXG+sXFxsX6xsb6yMXIxcXG+sb6xcbGyMWZOMIFB/v7+/v7+/v7+/v7+xDB7hO7LXstcSjoEXnh
YOz6+sjG+sXF+sXGxcbG+vrF+sbF+sX6xvr6+sjFxcXGxfr6+sj6+vrFxsbIxfrFxsXGxfr6+vrI+sbF
+sb6yMX6+vrIxfr6+sX6+vr6yPr6+sj6+sXG+sjG+vrFxfr6+vr6+gRZ2ikLofv7+/v7+/v7+8HuE7st
lXtxKOgReeFg7PrF+vrGxvr6+sX6xcX6+vrGxsX6xvrF+sX6+vr6xcbF+vr6xsb6+vr6xvr6xvr6xcb6
+sb6+sb6yPr6+sb6xvrI+vrF+vr6+sX6xvrFxsX6+vr6+vr6xvr6xsb6xfr6+sj6+sX6mQiCwgVAofv7
+/v7we4Tuy2Ve3Eo6BF54WCW+vrF+sX6xcXF+sbF+sbFxfr6xvr6xcXG+sj6+vr6+vr6xsbG+sjI+vr6
+sXFyPr6lvrF+vrIxcb6+vrFxvrFyPrF+sX6+vr6yPrG+sX6+vrGxcX6xvr6yPr6+sX6+vrF+sbG+sjI
yPr6yAhawgULQKHB7hO7LZV7cSjoEXnhYMjGxcXGxfr6+vr6yPrIxcb6yPr6+sb6lsb6xsX6+sbFxvr6
xfrG+vr6xvrI+vr6+sb6+sX6+vrGxcXFxvr6yPrGyPr6+vr6+vr6xcb6+sXF+vrG+sbG+sXF+sj6xvrI
yMjF+vrGxfrF+sXG+sb6+giqWykLQKATey1xKOh5eeHslpmZmZnGmcZ3xneZmZmZmXeZxpmZmZl3d8aZ
mZl3xpmZxneZxpmZmXfGxsZ3mZmZxneZmXeZmZnGmcbGxsaZmcaZmXfGmcZ3mcbGxneZmZmZd5nGmZl3
mZl3mXfGmcaZmXd3mZmZmXfGmZmZmXeZd5kECPaqWykFDnEoEXl5YJbGBAQEBAQEBAQEBAQEBAQEBAQE
BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE
BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAh45DiqglqCKOgReeHs+gQICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFJZOKqCWoIoEXnhYMiZCHgI
eHh4eHh4eHh4eHh4eHh4eHh4eHgIeHh4eAh4CHgIeAh4eAh4eHh4eHgIeHh4eHh4CHh4eAh4CHgIeHh4
eHh4eHh4eHh4eHh4CHh4eAgIeHh4eHh4CHgIeHh4CHgIeHh4eHh4CHh4CAh4CHh4eAh45DiqqoJagih5
eWCWxgR4Unh4eHhSeHh4Unh4eHh4eHh4eHhSeHh4eHh4UnhSeHh4eHh4eHh4eHh4eHh4Unh4eHhSeHh4
eHh4eHh4eHh4eHh4eFJ4eHh4Unh4UlJ4eHh4eFJ4eFJ4eHh4eHh4eHhSeHh4Unh4eFJ4Unh4eHh4eFL0
OKqCglqC6Hnh7PoECFJS9vZS9lL2UlL29lJSUlL2UvZSUlL2Uvb29vb2UvZSUvb2Uvb29vb2Uvb29lL2
UvZSUlL29lL29vZSUvb29lJS9vZSUlJS9lJSUvZS9lJS9vZS9lJSUlL2UlJS9lJS9vZSUvZS9vb2UlJS
9lL2UvZS5DiqqoKCWoIRYGD6BAh49llZ5ORZWVlZWeT0WeRZWeRZ5FlZWeRZWfRZ9ORZWfTk5Fnk5OT0
WeTkWeRZ5OT0WVlZWeTkWeT0WeTkWeT0WfRZWVlZWeRZWfRZ5PRZ5PTkWVnkWVlZWVlZWVlZWVnk5PT0
WfTk5FnkWVnkWeRZ9OT0OKqqgoJaghHhYN93CHhkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk
ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk
ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZPf3ODiFqqqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
</root>
/C-OSD/arducam-osd/Tools/OSD/OSD.sln
0,0 → 1,20

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSD", "OSD.csproj", "{E35F835A-8B3E-42D5-8852-A6E0F41823B5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E35F835A-8B3E-42D5-8852-A6E0F41823B5}.Debug|x86.ActiveCfg = Debug|x86
{E35F835A-8B3E-42D5-8852-A6E0F41823B5}.Debug|x86.Build.0 = Debug|x86
{E35F835A-8B3E-42D5-8852-A6E0F41823B5}.Release|x86.ActiveCfg = Release|x86
{E35F835A-8B3E-42D5-8852-A6E0F41823B5}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
/C-OSD/arducam-osd/Tools/OSD/OSD_SA_v5.mcm
0,0 → 1,16385
MAX7456
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00001010
10100000
00010101
00101000
00101000
00010101
00100000
00101000
00010101
00000000
10100000
00010101
00000010
10000000
00010101
00001010
00000000
00010101
00101010
10101000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00101010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00001010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00101010
10100000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01001010
01010101
01010100
00101010
01010101
01010010
10101010
01010101
01001010
10000000
01010101
00101000
00010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010100
01010010
10000101
01010010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10100001
01010101
01010101
10101000
00010101
01010101
10101010
10000101
01010101
00000010
10100001
01010101
01010100
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010010
10000101
00010101
01010010
10000101
10000101
01010010
10000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
00101010
10101010
10101000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
00000101
01000001
10000000
10100001
00101000
10000000
00001000
00101000
10000000
00000010
10000001
10100000
00000010
10000101
10100000
00001000
00100001
00101000
00100000
00001000
01001010
10000000
00001000
01001010
10000000
00000010
01001010
10100000
00000010
01010000
10101010
00000010
01010100
10001010
10101000
01010100
10000000
00000001
01010100
10000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
00101010
10101010
00000101
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
00100001
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
00010101
01001000
01010100
10000101
01001010
00010100
10100001
01001010
10000010
00000101
01001010
10101000
01010101
01001010
10101000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00101010
10100001
01010100
10000000
00000101
01010010
10000101
01010101
01001000
10000101
01010101
00100000
10000101
01010101
00000000
00000000
00010101
00101010
10101010
10000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010010
10000101
01010010
01010010
10000101
01010100
01010010
10000101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
00010101
01010101
01001010
10000000
01010101
01010010
10101010
01010101
01010100
00101010
01010101
01010101
01001010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10000101
01010010
10000101
00010101
01010010
10000101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01001010
00010101
01010100
00101000
01010101
00000010
10100001
01010101
10101010
10000101
01010101
10101000
00010101
01010101
10100001
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010100
01010100
10000101
01010101
01010100
10000101
01010101
01010100
10000101
01010100
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010010
00010100
10000101
01010000
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00000000
01010000
10101010
10101010
01000010
10101010
10101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01000010
10101010
10101010
01010000
10101010
10101010
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
10000000
00000010
10101000
10100000
00001010
10101000
10101010
10101010
10100000
10101010
10101010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00001010
10100000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
10001010
10100010
10100000
10100000
00001010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00001010
10101010
10000001
00000000
00001010
00000001
00000000
00101000
00000001
00000010
10100000
00000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10001010
10000001
00001010
00100010
10000001
00001010
00000010
10000001
00001010
00000010
10000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010000
01010101
01010101
01000010
01010101
01010101
00001010
01010101
01010100
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010000
01001010
10101010
01010001
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010101
01010101
10101000
00010101
01010101
10101010
00000101
01010101
10101010
10000001
01010101
00000000
10100000
01010101
00000000
10100000
00010101
00000000
10100001
00000101
10101010
10100001
01000101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010100
00101000
00010101
01010000
10101010
00000101
01000010
10101010
10000001
00001010
10101010
10100000
00000000
00000000
00000000
00101010
10101010
10101000
00101010
10101000
00001000
00101010
10101000
00001000
00100000
00001000
00001000
00100000
00001010
10101000
00100000
00001010
10101000
00100000
00001010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
00010101
01010010
00010100
10000101
01001010
10000010
10100001
01010010
10000100
10100001
01010100
10000101
00100001
01010100
10000101
00100001
01010010
00010100
10000101
01010100
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010100
00010101
01010010
10000010
10000101
01010010
10000010
10000101
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
00000101
01001010
10101010
00010101
01010010
10101010
10000101
01010000
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
00000101
01001010
10000100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010010
10000010
00010101
01010010
00010010
00010101
01010010
00010010
00010101
01010010
00001000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
00001000
00000101
01001000
01010010
00100001
01001000
01010100
10000101
01001000
00000010
00100001
01010010
10101000
01001000
01010100
00000001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01001000
01010101
01010101
00101010
00010101
01010101
01001010
00010101
01010101
01010010
00010101
01010101
01010010
00010101
01010101
01001000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010001
00100001
01010101
01001000
00101000
01010101
00101000
01001010
00010100
10100001
01010010
10000010
10000101
01000000
10101010
00000001
00101010
10101010
10101000
01000000
10101010
00000001
01010010
10000010
10000101
01001010
00010100
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010101
00000000
10100001
01010100
10101010
10000101
01010100
10101010
10000101
01010101
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
00101010
10000101
01010100
10100010
10000101
01010010
10000010
10000101
01001010
00000010
10000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010000
01010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01000010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01010010
10101010
10000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
01010101
00101000
01000001
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
00000000
10000101
01001000
00000100
00100001
00100000
10100010
00001000
00100010
00001010
00001000
00100010
00000010
00001000
00100010
00001010
00001000
00100000
10100010
00100001
00100001
00000100
10000101
01001000
01010101
00000101
01010010
00000000
00100001
01010100
10101010
10000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010010
10101010
00010101
01001010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010100
10101010
10100001
01010100
10101010
10100001
01010101
00001010
00000101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010000
01001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
10101010
00010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10100001
01010101
01001010
10000101
01010101
01001010
10100001
01010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101010
10100001
01001010
10001010
10000101
01010010
10101010
10100001
01010100
10101000
10100001
01010101
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010100
10101010
10000101
01010010
10101010
10100001
01001010
10000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
10000000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00000010
10100001
01010101
01010100
10100001
01010000
01010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01010010
10101010
00010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010100
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01010010
00010100
10000101
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000000
10100001
01001010
00000000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
10100001
01001010
10000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101010
10100001
01010101
01000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010100
00010010
10000101
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10101000
01010101
01001010
10101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010000
10100001
01001010
00001010
10100001
01001010
00001010
10000101
01001010
10101010
10100001
01010010
10101000
10100001
01010100
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01010010
10101010
10100001
01010000
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010001
01010100
10100001
01001000
01010010
10101000
00101000
01001010
00001010
10100001
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
01001000
10000101
01010101
01001000
10100001
01010101
01001000
10101000
01010101
01001000
10101010
00010101
01001000
10101010
10000101
01001000
10101010
00010101
01001000
10101000
01010101
01001000
10100001
01010101
01001000
10000101
01010101
01001000
00010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
00001000
00010101
01010101
00101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101000
00101000
01010101
00101000
10100000
01010101
00101010
00000000
01010101
00101000
10100000
01010101
00101000
00101000
01010101
01000000
00000000
00000001
00101000
10001010
10101000
00101000
10000000
10000001
00100010
10000000
10000101
00100010
10000000
10000101
01000000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
10100001
01010101
00101010
00000101
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000000
00000000
00000101
01010010
10100010
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010010
10000000
10100001
01010100
00000000
00000001
01010101
00101001
01101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
00001010
00010101
01000000
00000000
00010101
01010101
00101010
10000101
01010101
00100000
10000101
01010100
10101010
10100001
01010100
10100000
10100001
01010100
10100000
10100001
01010101
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010100
00000000
00000000
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
00000000
00000001
01010100
10101000
00101000
01010100
10101010
00101000
01010100
10101010
10101000
01010100
10100010
10101000
01010100
10100000
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000000
00000000
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10101010
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000001
01010101
01001010
10101000
01010101
01001010
10101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00000100
00010101
01010100
10100010
10000101
01010100
10101010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00001000
01010101
01001000
00101000
01010101
01001010
10100000
01010101
01001010
00101000
01010101
01010000
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00100000
00000001
01010101
00101010
10101000
01010101
01000000
00001000
01010101
00101010
10101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000001
01010101
01001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000001
00000000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000001
01010101
00101010
10101000
01010101
00100000
00101000
01010101
00101010
10000001
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01000000
01010101
00101010
00101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010000
00000000
01001000
01010000
10100000
01001000
01010010
00001000
00000000
00010010
00001000
00101010
00010010
00001000
00000000
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
00101010
00010000
00000000
00101010
00010010
00001000
00101010
00010010
00001000
01000000
01010010
00100000
01001000
01010010
10000000
01001000
01010010
00100000
01001000
01010010
00001000
01001000
01010010
00001000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010010
00000000
01001000
01010010
00000000
01001000
01010010
00000000
00000000
00010010
10101000
00101010
00010000
00000000
00000000
00010000
10100000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
01000000
01010010
10101000
01001000
01010010
00000000
01001000
01010010
10101000
01001000
01010000
00001000
01001000
01010010
10101000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010100
00010101
00101000
01010010
10000101
00101010
00001010
10000101
00101010
10101010
10000101
00101000
10100010
10000101
00101000
10100010
10000101
00101000
00000010
10000101
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010000
01010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
01001010
00101000
01010101
01001010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
01001000
00001000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
00101000
01001010
00010101
01000001
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01000000
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00000000
10101010
01010000
00000000
10101010
01010000
00000000
10101010
01010100
00000000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10000000
00010101
01010101
10101010
00000001
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10101000
00000000
00000101
10101000
00000000
00010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010100
00000000
01010101
00000000
00101010
01010101
00000000
00001010
01010101
00000000
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010100
00000000
00101010
01010100
00000000
00000000
01010100
00000000
00000000
01010101
01010100
00000000
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101000
00000101
01010101
10101010
00000001
01010101
10101010
10000000
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10100000
00000000
00000101
10100000
00000000
00000101
10000000
01010101
00000101
00000000
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010100
00000010
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010000
00000010
10100000
01010100
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010000
00000001
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
00000001
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101000
00101000
00010101
10000000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000001
01000000
00010101
00010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
00000000
00000010
01010000
00001010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10000000
01010100
00000000
00000000
01010100
00000000
00000000
01010101
00000000
00000001
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010101
00101010
00000000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
10101010
10101000
00010101
10000000
10100000
00010101
00000000
00100000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01010100
00000001
01010101
01010101
00000001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010100
00101010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
00101010
10101010
01010000
00000000
00000000
01010000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
01000000
00010101
01010101
00001010
00000001
01010101
10101010
10100000
00000101
10101010
10101010
10000000
10101010
10101010
00000000
10101010
10101000
00000000
00000010
10000000
00000001
00000010
00000000
00000101
00000000
00000000
01010101
01000000
00000001
01010101
01000000
00000101
01010101
01000000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01000010
00000000
01010100
00001010
10101010
01010000
00101010
10101010
01010000
00000010
10101010
01010000
00000000
00000010
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
00000000
00000001
01010101
10000000
10000000
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
10000000
00101010
10101010
00000000
00101010
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010000
10100000
01010101
00000010
10101010
01010100
00001010
10101010
01010100
00000010
10101010
01010100
00000000
00101010
01010101
01000000
00000010
01010101
01010000
00000010
01010101
01010100
00001010
01010101
01000000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000001
01000001
01010101
10100000
00000000
01010101
10101010
10100000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
00000101
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010000
00000000
01010101
01000010
10101010
01010101
01000000
10101010
01010101
01010000
00101010
01010101
01010000
00101010
01010101
01010000
00001010
01010100
00000000
00101010
01010000
00000000
10101010
01010000
00000000
00000010
01010100
00000000
00000000
01010101
01010000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010100
00010101
10101000
00000000
00010101
10101010
00101000
00010101
10101010
10100000
00010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
00000010
10000000
01010101
00000000
00000001
01010101
00000000
00000001
01010101
00000000
00000001
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010100
00101010
01010101
01010100
00101010
01010101
01010100
00101010
01010000
00000000
00101010
01010000
00000000
10101010
01010000
00001010
10101010
01010100
00000000
10101010
01010101
00000000
00101010
01010101
01000000
00001010
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00000000
00000101
10101010
00000000
00000101
10101010
10100000
00000101
10101000
00000000
00010101
10100000
00000000
01010101
10000000
00000001
01010101
00000000
00000101
01010101
00000000
00010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010000
01010101
01010101
01000010
01010100
00010101
00001010
01010100
00000000
00101010
01010100
00101000
10101010
01010100
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00000010
10000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000000
00000101
01010101
10101010
10000001
01010101
10101010
00000001
01010101
10101000
00000101
01010101
10101000
00000101
01010101
10100000
00000101
01010101
10101000
00000000
00010101
10101010
00000000
00000101
10000000
00000000
00000101
00000000
00000000
00010101
00000000
00000101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01000001
01000000
01010101
00000000
00001010
01010101
00001010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
10101010
10101010
01000000
00000000
00000000
01000000
00000000
00000000
01000000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00001010
00000101
01010101
10101010
10000000
01010101
10101010
10100000
00010101
10101010
10000000
00010101
10101000
00000000
00010101
10000000
00000001
01010101
10000000
00000101
01010101
10100000
00010101
01010101
00000000
00000001
01010101
00000000
00000000
01010101
00000000
00000000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01000000
00000000
01010101
00000010
00000010
01010100
00101010
10101010
01010000
10101010
10101010
00000010
10101010
10101010
00000000
10101010
10101000
00000000
00000000
10101000
00000000
00000000
00000000
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
00000000
10000001
01010101
10101010
10100000
00010101
10101010
10101000
00000101
10101010
10000000
00000101
10000000
00000000
00000101
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010100
00000001
01010101
01000000
10100000
01010000
00001010
10101010
00000010
10101010
10101010
00000000
10101010
10101010
00000000
00101010
10101010
01000000
00000010
10000000
01010000
00000000
10000000
01010101
00000000
00000000
01010101
01000000
00000001
01010101
01010000
00000001
01010101
01010101
00000001
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010000
00000000
10101000
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10101010
01010100
00001010
00000010
01010101
00001000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00010101
01010101
01000000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
10000000
00000000
01010101
10101010
10100000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
00000010
10101000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
01000000
00000000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
01000000
00000000
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010100
00101000
00101010
01010100
00000000
00000010
01010100
00000000
00000000
01010100
00000000
00000000
01010100
00000001
01000000
01010100
00010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10000000
00010101
01010101
10100000
00010101
01010101
10101010
10000001
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101000
00000101
00001010
10000000
00000101
00000000
00000000
00010101
00000000
00000000
01010101
00000000
00000001
01010101
01000000
00000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010000
00101010
01010101
01000000
10101010
01010101
00000010
10101010
01010100
00000000
00101010
01010000
00000000
00101010
01010000
00000000
00001010
01010000
00000000
00001010
01010000
01010101
00000010
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000000
00010101
01010101
10101000
00000000
01010101
10100000
00000000
01010101
10101000
00000000
01010101
10101010
00000101
01010101
10101010
10000001
01010101
10101010
10100000
01010101
10101010
10100000
00010101
10101000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000000
00010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001000
00100001
01010101
01001000
00100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01001010
00000101
01010101
00101010
10100000
01010101
00101010
10101010
00010101
01001010
00001010
00010101
01010010
00010010
10000101
01010100
01010010
10000101
01010100
01010010
10000101
01010010
01010010
10000101
01001010
00001010
00010101
00101010
10101010
00010101
00101010
10100000
01010101
01001010
00000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01001010
00000000
00000000
01001010
00000000
00000001
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
00000001
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
01001010
00000000
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00000000
00000000
00001010
00001010
10101010
01001010
00001010
10101010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
10101010
00001010
01001010
10101010
00001010
01001010
00000000
00001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010100
00000000
00010101
01010100
10101010
00000000
00000000
10101010
00001010
10101010
10100000
00001010
10101010
10100000
00001010
00000000
10101010
00001010
00010100
10101010
00001010
00010100
00000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
00000001
00100001
00000000
10101000
00100000
10101010
00000001
00100001
00000000
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000000
10100001
01001010
10100000
10100001
00001010
00101000
10100000
10001010
00101000
10100010
00001010
00001010
10100000
01001010
00000010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10000000
10000101
01010010
10000101
01010101
00000010
10101010
00000000
10101000
10101010
10001010
00000000
00000010
10000000
01010010
00000010
10000101
01010010
10101010
10000101
01010000
10101010
00000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10000101
01010101
00000010
10101000
00000000
10100010
10101000
10101010
00000010
10000000
00000000
01010010
10000000
01010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
00001010
00101000
10100000
10100010
00101000
10001010
00000010
10101010
10000000
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
10101000
01010100
10101010
00001010
00010010
10000000
01010010
10001010
00010101
01010100
10101000
01010101
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01000001
01001010
10100001
00101000
01001010
10100001
00101000
01010000
00000101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100000
01010101
01010101
00101010
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00101010
01010101
01010101
00100000
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
10101000
01010101
01010101
00001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
00001000
01010101
01010101
10101000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010010
10000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010100
10000101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010100
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
00000000
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000001
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01000101
01001010
10100001
00100001
01000000
00000001
00100001
00101010
10100001
00100001
00101000
00101000
01000101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10100001
01010101
01000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01000000
00100000
00000101
00101010
10101010
10100001
00100000
00100000
00100001
00100010
00100010
00000001
00100000
00100000
00101000
00101010
10101010
00100001
00101000
00000000
00100001
01000000
00000010
00100001
01010101
00100010
00100001
01010100
00100010
00100001
01010010
00100010
00100001
01000010
00100010
00100001
00100010
00100010
00100001
00100010
00100010
00101000
01000100
01000100
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000001
01000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000000
00000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000000
00100001
01001010
10100000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101010
10101000
01000101
00101000
00101000
00100001
01000001
01000000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000001
10101010
10101010
10101000
00100000
00000000
00001000
00100010
00010100
10001000
00100010
10000100
10001000
00100010
10100000
10001000
00100010
10101000
10001000
00100010
10101010
10001000
00100010
10101010
10001000
00100010
10101000
10001000
00100010
10100000
10001000
00100010
10000100
10001000
00100010
00010100
10001000
00100000
00000000
00001000
10101010
10101010
10101000
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010000
01010010
01010101
01001010
00010000
01010101
01001010
00001010
01010101
01010000
00101010
01010101
01010100
10100000
01010101
00000010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000010
10000101
01010101
01010100
10100000
01010101
01010000
00101010
01010101
01001010
00001010
01010101
01001010
00010000
01010101
01010000
01010010
01010101
01010101
01010010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
00000101
01010101
00000100
10100001
01010101
10100000
10100001
01010101
10101000
00000101
01010101
00001010
00010101
01010101
01010010
10000000
01010101
01010010
10001010
00010101
01010010
10001010
00010101
01010010
10000000
01010101
00001010
00010101
01010101
10101000
00000101
01010101
10100000
10100001
01010101
00000100
10100001
01010101
10000101
00000101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
00001010
01010101
01010100
10101010
01010101
01010010
10100000
01010101
01001010
00000100
01010101
01001010
00010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
01001010
00010100
01010101
01001010
00000100
01010101
01010010
10100000
01010101
01010100
10101010
01010101
01010101
00001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100000
01010101
01010101
10101010
00010101
01010101
10101010
10000101
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10000101
01010101
10101010
00010101
01010101
10100000
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10001000
01000000
00001010
00001000
00101010
10101000
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00101010
10101000
01001000
01000000
00001010
00001000
01010101
01010010
10001000
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01101000
01010101
01010101
01011010
00010101
01010100
00010010
00010101
01010010
10000010
00010101
01000100
10000010
10000101
00100000
10100000
10000101
00101000
00100000
10000101
01001000
00100000
10000101
00101000
00100000
10000101
00100000
10100000
10000101
01000100
10000010
10000101
01010010
10000010
00010101
01010100
00010010
00010101
01010101
01011010
00010101
01010101
01101000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10100001
01010010
10101010
10101000
01010010
10101010
00000000
01010010
10101010
00000101
01010010
00001010
10000101
01010000
00001010
10000001
01010101
01010010
10100001
01010101
01010010
10100001
01010101
01010000
10000001
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010001
01010001
01001010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
10001000
00001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
01000101
00010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010001
01010001
00101010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
00001000
00001000
00100000
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
01000101
01010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
/C-OSD/arducam-osd/Tools/OSD/Panels.cs
0,0 → 1,670
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace OSD
{
// this is mainly copied from osd_panels.pde
 
 
using uint16_t = System.UInt16;
using uint8_t = System.Byte;
using int8_t = System.SByte;
using boolean = System.Byte;
 
class Panels
{
OSD osd;
 
public Panels(OSD os)
{
osd = os;
}
 
string PSTR(string input)
{
return input;
}
 
double abs(double input)
{
return Math.Abs(input);
}
 
int round(double input)
{
return (int)Math.Round(input, 0);
}
 
double tan(double input)
{
return Math.Tan(input);
}
 
/*Panels variables*/
//Will come from APM telem port
 
 
static float osd_vbat = 11.61f; // voltage in milivolt
static uint16_t osd_battery_remaining = 50; // 0 to 100 <=> 0 to 1000
static uint8_t osd_battery_pic = 0xb4; // picture to show battery remaining
 
static uint16_t osd_mode = 100; // Navigation mode from RC AC2 = CH5, APM = CH8
static uint8_t osd_nav_mode = 4; // Navigation mode from RC AC2 = CH5, APM = CH8
 
static float osd_lat = -35.020938f; // latidude
static float osd_lon = 117.883419f; // longitude
static uint8_t osd_satellites_visible = 7; // number of satelites
static uint8_t osd_fix_type = 3; // GPS lock 0-1=no fix, 2=2D, 3=3D
 
//static uint8_t osd_got_home = 0; // tels if got home position or not
//static float osd_home_lat = 0; // home latidude
//static float osd_home_lon = 0; // home longitude
//static float osd_home_alt = 0;
static long osd_home_distance = 0; // distance from home
static uint8_t osd_home_direction = 0; // Arrow direction pointing to home (1-16 to CW loop)
 
static int8_t osd_pitch = 0; // pitch form DCM
static int8_t osd_roll = 0; // roll form DCM
//static uint8_t osd_yaw = 0; // relative heading form DCM
static float osd_heading = 0; // ground course heading from GPS
static float osd_alt = 200; // altitude
static float osd_groundspeed = 12; // ground speed
static uint16_t osd_throttle = 52; // throtle
 
//MAVLink session control
static boolean mavbeat = 1;
//static float lastMAVBeat = 0;
//static boolean waitingMAVBeats = 1;
static uint8_t apm_mav_type = 2;
//static uint8_t apm_mav_system = 7;
//static uint8_t apm_mav_component = 0;
//static boolean enable_mav_request = 0;
 
/******* PANELS - DEFINITION *******/
 
 
/* **************************************************************** */
// Panel : panAlt
// Needs : X, Y locations
// Output : Alt symbol and altitude value in meters from MAVLink
// Size : 1 x 7Hea (rows x chars)
// Staus : done
 
public int panAlt(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
//osd.printf("%c%5.0f%c",0x85, (double)(osd_alt - osd_home_alt), 0x8D);
osd.printf("%c%5.0f%c", 0x85, (double)(osd_alt), 0x8D);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panVel
// Needs : X, Y locations
// Output : Velocity value from MAVlink with symbols
// Size : 1 x 7 (rows x chars)
// Staus : done
 
public int panVel(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%3.0f%c", 0x86, (double)osd_groundspeed, 0x88);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panThr
// Needs : X, Y locations
// Output : Throttle value from MAVlink with symbols
// Size : 1 x 7 (rows x chars)
// Staus : done
 
public int panThr(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%3.0i%c", 0x87, osd_throttle, 0x25);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panHomeDis
// Needs : X, Y locations
// Output : Home Symbol with distance to home in meters
// Size : 1 x 7 (rows x chars)
// Staus : done
 
public int panHomeDis(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%5.0f%c", 0x1F, (double)osd_home_distance, 0x8D);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panCenter
// Needs : X, Y locations
// Output : 2 row croshair symbol created by 2 x 4 chars
// Size : 2 x 4 (rows x chars)
// Staus : done
 
public int panCenter(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\x05\x03\x04\x05|\x15\x13\x14\x15"));
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panHorizon
// Needs : X, Y locations
// Output : 12 x 4 Horizon line surrounded by 2 cols (left/right rules)
// Size : 14 x 4 (rows x chars)
// Staus : done
 
public int panHorizon(int first_col, int first_line)
{
showHorizon((first_col + 1), first_line);
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xd8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xd9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9|"));
osd.printf_P(PSTR("\xc8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xc9"));
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panPitch
// Needs : X, Y locations
// Output : -+ value of current Pitch from vehicle with degree symbols and pitch symbol
// Size : 1 x 6 (rows x chars)
// Staus : done
 
public int panPitch(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4i%c%c", osd_pitch, 0xb0, 0xb1);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panRoll
// Needs : X, Y locations
// Output : -+ value of current Roll from vehicle with degree symbols and roll symbol
// Size : 1 x 6 (rows x chars)
// Staus : done
 
public int panRoll(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4i%c%c", osd_roll, 0xb0, 0xb2);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panBattery A (Voltage 1)
// Needs : X, Y locations
// Output : Voltage value as in XX.X and symbol of over all battery status
// Size : 1 x 8 (rows x chars)
// Staus : done
 
public int panBatt_A(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%5.2f%c%c", 0xE2,(double)osd_vbat, 0x8E, osd_battery_pic);
osd.closePanel();
return 0;
}
 
//------------------ Panel: Startup ArduCam OSD LOGO -------------------------------
 
public int panLogo(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("\x20\x20\x20\x20\xba\xbb\xbc\xbd\xbe|\x20\x20\x20\x20\xca\xcb\xcc\xcd\xce|ArduCam OSD"));
osd.closePanel();
return 0;
}
 
//------------------ Panel: Waiting for MAVLink HeartBeats -------------------------------
 
public int panWaitMAVBeats(int first_col, int first_line)
{
panLogo(10, 5);
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("Waiting for|MAVLink heartbeats..."));
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panGPL
// Needs : X, Y locations
// Output : 1 static symbol with changing FIX symbol
// Size : 1 x 2 (rows x chars)
// Staus : done
 
public int panGPL(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
switch (osd_fix_type)
{
case 0:
osd.printf_P(PSTR("\x10\x20"));
break;
case 1:
osd.printf_P(PSTR("\x10\x20"));
break;
case 2:
osd.printf_P(PSTR("\x11\x20"));//If not APM, x01 would show 2D fix
break;
case 3:
osd.printf_P(PSTR("\x11\x20"));//If not APM, x02 would show 3D fix
break;
}
 
/* if(osd_fix_type <= 1) {
osd.printf_P(PSTR("\x10"));
} else {
osd.printf_P(PSTR("\x11"));
} */
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panGPSats
// Needs : X, Y locations
// Output : 1 symbol and number of locked satellites
// Size : 1 x 5 (rows x chars)
// Staus : done
 
public int panGPSats(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%2i", 0x0f, osd_satellites_visible);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panGPS
// Needs : X, Y locations
// Output : two row numeric value of current GPS location with LAT/LON symbols as on first char
// Size : 2 x 12 (rows x chars)
// Staus : done
 
public int panGPS(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%c%11.6f|%c%11.6f", 0x83, (double)osd_lat, 0x84, (double)osd_lon);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panHeading
// Needs : X, Y locations
// Output : Symbols with numeric compass heading value
// Size : 1 x 5 (rows x chars)
// Staus : not ready
 
public int panHeading(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf("%4.0f%c", (double)osd_heading, 0xb0);
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panRose
// Needs : X, Y locations
// Output : a dynamic compass rose that changes along the heading information
// Size : 2 x 13 (rows x chars)
// Staus : done
 
public int panRose(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
//osd_heading = osd_yaw;
//if(osd_yaw < 0) osd_heading = 360 + osd_yaw;
osd.printf("%s|%c%s%c", "\x20\xc0\xc0\xc0\xc0\xc0\xc7\xc0\xc0\xc0\xc0\xc0\x20", 0xd0, Encoding.Default.GetString(buf_show), 0xd1);
osd.closePanel();
return 0;
}
 
 
/* **************************************************************** */
// Panel : panBoot
// Needs : X, Y locations
// Output : Booting up text and empty bar after that
// Size : 1 x 21 (rows x chars)
// Staus : done
 
public int panBoot(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
osd.printf_P(PSTR("Booting up:\xed\xf2\xf2\xf2\xf2\xf2\xf2\xf2\xf3"));
osd.closePanel();
return 0;
 
}
 
/* **************************************************************** */
// Panel : panMavBeat
// Needs : X, Y locations
// Output : 2 symbols, one static and one that blinks on every 50th received
// mavlink packet.
// Size : 1 x 2 (rows x chars)
// Staus : done
 
public int panMavBeat(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
if (mavbeat == 1)
{
osd.printf_P(PSTR("\xEA\xEC"));
mavbeat = 0;
}
else
{
osd.printf_P(PSTR("\xEA\xEB"));
}
osd.closePanel();
return 0;
}
 
 
/* **************************************************************** */
// Panel : panWPDir
// Needs : X, Y locations
// Output : 2 symbols that are combined as one arrow, shows direction to next waypoint
// Size : 1 x 2 (rows x chars)
// Staus : not ready
 
public int panWPDir(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
showArrow();
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panHomeDir
// Needs : X, Y locations
// Output : 2 symbols that are combined as one arrow, shows direction to home
// Size : 1 x 2 (rows x chars)
// Status : not tested
 
public int panHomeDir(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
showArrow();
osd.closePanel();
return 0;
}
 
/* **************************************************************** */
// Panel : panFlightMode
// Needs : X, Y locations
// Output : 2 symbols, one static name symbol and another that changes by flight modes
// Size : 1 x 2 (rows x chars)
// Status : done
 
public int panFlightMode(int first_col, int first_line)
{
osd.setPanel(first_col, first_line);
osd.openPanel();
if (apm_mav_type == 2)//ArduCopter
{
 
if (osd_mode == 100) osd.printf_P(PSTR("\xE0stab"));//Stabilize
if (osd_mode == 101) osd.printf_P(PSTR("\xE0acro"));//Acrobatic
if (osd_mode == 102) osd.printf_P(PSTR("\xE0alth"));//Alt Hold
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0auto"));//Auto
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_GUIDED && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0guid"));//Guided
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_HOLD) osd.printf_P(PSTR("\xE0loit"));//Loiter
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_RETURNING) osd.printf_P(PSTR("\xE0retl"));//Return to Launch
if (osd_mode == 107) osd.printf_P(PSTR("\xE0circ")); // Circle
if (osd_mode == 108) osd.printf_P(PSTR("\xE0posi")); // Position
if (osd_mode == 109) osd.printf_P(PSTR("\xE0land")); // Land
if (osd_mode == 110) osd.printf_P(PSTR("\xE0oflo")); // OF_Loiter
}
else if (apm_mav_type == 1) // arduplane
{
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_TEST1 && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_VECTOR) osd.printf_P(PSTR("\xE0\xE2"));//Stabilize
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_MANUAL && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_VECTOR) osd.printf_P(PSTR("\xE0\xE3"));//Manual
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_LOITER) osd.printf_P(PSTR("\xE0\xE4"));//Loiter
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_RETURNING) osd.printf_P(PSTR("\xE0\xE5"));//Return to Launch
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_TEST2 && osd_nav_mode == 1) osd.printf_P(PSTR("\xE0\xE6"));//FLY_BY_WIRE_A
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_TEST2 && osd_nav_mode == 2) osd.printf_P(PSTR("\xE0\xE7"));//FLY_BY_WIRE_B
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_GUIDED) osd.printf_P(PSTR("\xE0\xE7"));//GUIDED
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_WAYPOINT) osd.printf_P(PSTR("\xE0\xE7"));//AUTO
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_RETURNING) osd.printf_P(PSTR("\xE0\xE7"));//RTL
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_AUTO && osd_nav_mode == (byte)ArdupilotMega.MAVLink.MAV_NAV.MAV_NAV_LOITER) osd.printf_P(PSTR("\xE0\xE7"));//LOITER
if (osd_mode == (byte)ArdupilotMega.MAVLink.MAV_MODE.MAV_MODE_TEST3) osd.printf_P(PSTR("\xE0\xE7"));//CIRCLE
}
// if(osd_mode == 3 && osd_nav_mode == 4) osd.printf_P(PSTR("\xD0\xD2"));
osd.closePanel();
return 0;
}
 
 
// ---------------- EXTRA FUNCTIONS ----------------------
// Show those fancy 2 char arrows
public int showArrow()
{
switch (osd_home_direction)
{
case 0:
osd.printf_P(PSTR("\x90\x91"));
break;
case 1:
osd.printf_P(PSTR("\x90\x91"));
break;
case 2:
osd.printf_P(PSTR("\x92\x93"));
break;
case 3:
osd.printf_P(PSTR("\x94\x95"));
break;
case 4:
osd.printf_P(PSTR("\x96\x97"));
break;
case 5:
osd.printf_P(PSTR("\x98\x99"));
break;
case 6:
osd.printf_P(PSTR("\x9A\x9B"));
break;
case 7:
osd.printf_P(PSTR("\x9C\x9D"));
break;
case 8:
osd.printf_P(PSTR("\x9E\x9F"));
break;
case 9:
osd.printf_P(PSTR("\xA0\xA1"));
break;
case 10:
osd.printf_P(PSTR("\xA2\xA3"));
break;
case 11:
osd.printf_P(PSTR("\xA4\xA5"));
break;
case 12:
osd.printf_P(PSTR("\xA6\xA7"));
break;
case 13:
osd.printf_P(PSTR("\xA8\xA9"));
break;
case 14:
osd.printf_P(PSTR("\xAA\xAB"));
break;
case 15:
osd.printf_P(PSTR("\xAC\xAD"));
break;
case 16:
osd.printf_P(PSTR("\xAE\xAF"));
break;
}
return 0;
}
 
// Calculate and shows Artificial Horizon
public int showHorizon(int start_col, int start_row)
{
 
int x, nose, row, minval, hit, subval = 0;
int cols = 12;
int rows = 5;
int[] col_hit = new int[cols];
double pitch, roll;
 
if (abs(osd_pitch) == 90) { pitch = 89.99 * (90 / osd_pitch) * -0.017453293; } else { pitch = osd_pitch * -0.017453293; }
if (abs(osd_roll) == 90) { roll = 89.99 * (90 / osd_roll) * 0.017453293; } else { roll = osd_roll * 0.017453293; }
 
nose = round(tan(pitch) * (rows * 9));
for (int col = 1; col <= cols; col++)
{
x = (col * 12) - (cols * 6) - 6;//center X point at middle of each col
col_hit[col - 1] = (int)(tan(roll) * x) + nose + (rows * 9) - 1;//calculating hit point on Y plus offset to eliminate negative values
//col_hit[(col-1)] = nose + (rows * 9);
}
 
for (int col = 0; col < cols; col++)
{
hit = col_hit[col];
if (hit > 0 && hit < (rows * 18))
{
row = rows - ((hit - 1) / 18);
minval = rows * 18 - row * 18 + 1;
subval = hit - minval;
subval = round((subval * 9) / 18);
if (subval == 0) subval = 1;
printHit((byte)(start_col + col), (byte)(start_row + row - 1), (byte)subval);
}
}
return 0;
}
 
public int printHit(byte col, byte row, byte subval)
{
osd.openSingle(col, row);
switch (subval)
{
case 1:
osd.printf_P(PSTR("\x06"));
break;
case 2:
osd.printf_P(PSTR("\x07"));
break;
case 3:
osd.printf_P(PSTR("\x08"));
break;
case 4:
osd.printf_P(PSTR("\x09"));
break;
case 5:
osd.printf_P(PSTR("\x0a"));
break;
case 6:
osd.printf_P(PSTR("\x0b"));
break;
case 7:
osd.printf_P(PSTR("\x0c"));
break;
case 8:
osd.printf_P(PSTR("\x0d"));
break;
case 9:
osd.printf_P(PSTR("\x0e"));
break;
}
return 0;
}
 
 
 
//------------------ Heading and Compass ----------------------------------------
 
byte[] buf_show = new byte[11];
byte[] buf_Rule = {0xc2,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc4,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc3,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0,
0xc5,0xc0,0xc0,0xc1,0xc0,0xc0,0xc1,0xc0,0xc0};
public void setHeadingPatern()
{
int start;
start = round((osd_heading * 36) / 360);
start -= 5;
if (start < 0) start += 36;
for (int x = 0; x <= 10; x++)
{
buf_show[x] = buf_Rule[start];
if (++start > 35) start = 0;
}
// buf_show[11] = (byte)'\0';
}
 
//------------------ Battery Remaining Picture ----------------------------------
 
public void setBatteryPic()
{
if (osd_battery_remaining <= 270)
{
osd_battery_pic = 0xb4;
}
else if (osd_battery_remaining <= 300)
{
osd_battery_pic = 0xb5;
}
else if (osd_battery_remaining <= 400)
{
osd_battery_pic = 0xb6;
}
else if (osd_battery_remaining <= 500)
{
osd_battery_pic = 0xb7;
}
else if (osd_battery_remaining <= 800)
{
osd_battery_pic = 0xb8;
}
else osd_battery_pic = 0xb9;
}
 
}
}
/C-OSD/arducam-osd/Tools/OSD/Program.cs
0,0 → 1,21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace OSD
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new OSD());
}
}
}
/C-OSD/arducam-osd/Tools/OSD/Properties/AssemblyInfo.cs
0,0 → 1,36
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OSD")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Michael Oborne")]
[assembly: AssemblyProduct("OSD")]
[assembly: AssemblyCopyright("Copyright © 2012 Michael Oborne")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
 
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c3689927-f47d-487b-ae83-0742b945033b")]
 
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]
/C-OSD/arducam-osd/Tools/OSD/Properties/Resources.Designer.cs
0,0 → 1,77
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace OSD.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OSD.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap openHS {
get {
object obj = ResourceManager.GetObject("openHS", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap saveHS {
get {
object obj = ResourceManager.GetObject("saveHS", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
/C-OSD/arducam-osd/Tools/OSD/Properties/Resources.resx
0,0 → 1,127
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="openHS" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\openHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="saveHS" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\saveHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
/C-OSD/arducam-osd/Tools/OSD/Properties/Settings.Designer.cs
0,0 → 1,26
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace OSD.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
/C-OSD/arducam-osd/Tools/OSD/Properties/Settings.settings
0,0 → 1,7
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
/C-OSD/arducam-osd/Tools/OSD/Properties/app.manifest
0,0 → 1,47
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
 
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
 
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>
/C-OSD/arducam-osd/Tools/OSD/Resources/openHS.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/Resources/saveHS.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/Tools.cs
0,0 → 1,690
#region Usings
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
#endregion
 
namespace AT.MIN
{
public static class Tools
{
#region Public Methods
#region IsNumericType
/// <summary>
/// Determines whether the specified value is of numeric type.
/// </summary>
/// <param name="o">The object to check.</param>
/// <returns>
/// <c>true</c> if o is a numeric type; otherwise, <c>false</c>.
/// </returns>
public static bool IsNumericType(object o)
{
return (o is byte ||
o is sbyte ||
o is short ||
o is ushort ||
o is int ||
o is uint ||
o is long ||
o is ulong ||
o is float ||
o is double ||
o is decimal);
}
#endregion
#region IsPositive
/// <summary>
/// Determines whether the specified value is positive.
/// </summary>
/// <param name="Value">The value.</param>
/// <param name="ZeroIsPositive">if set to <c>true</c> treats 0 as positive.</param>
/// <returns>
/// <c>true</c> if the specified value is positive; otherwise, <c>false</c>.
/// </returns>
public static bool IsPositive(object Value, bool ZeroIsPositive)
{
switch (Type.GetTypeCode(Value.GetType()))
{
case TypeCode.SByte:
return (ZeroIsPositive ? (sbyte)Value >= 0 : (sbyte)Value > 0);
case TypeCode.Int16:
return (ZeroIsPositive ? (short)Value >= 0 : (short)Value > 0);
case TypeCode.Int32:
return (ZeroIsPositive ? (int)Value >= 0 : (int)Value > 0);
case TypeCode.Int64:
return (ZeroIsPositive ? (long)Value >= 0 : (long)Value > 0);
case TypeCode.Single:
return (ZeroIsPositive ? (float)Value >= 0 : (float)Value > 0);
case TypeCode.Double:
return (ZeroIsPositive ? (double)Value >= 0 : (double)Value > 0);
case TypeCode.Decimal:
return (ZeroIsPositive ? (decimal)Value >= 0 : (decimal)Value > 0);
case TypeCode.Byte:
return (ZeroIsPositive ? true : (byte)Value > 0);
case TypeCode.UInt16:
return (ZeroIsPositive ? true : (ushort)Value > 0);
case TypeCode.UInt32:
return (ZeroIsPositive ? true : (uint)Value > 0);
case TypeCode.UInt64:
return (ZeroIsPositive ? true : (ulong)Value > 0);
case TypeCode.Char:
return (ZeroIsPositive ? true : (char)Value != '\0');
default:
return false;
}
}
#endregion
#region ToUnsigned
/// <summary>
/// Converts the specified values boxed type to its correpsonding unsigned
/// type.
/// </summary>
/// <param name="Value">The value.</param>
/// <returns>A boxed numeric object whos type is unsigned.</returns>
public static object ToUnsigned(object Value)
{
switch (Type.GetTypeCode(Value.GetType()))
{
case TypeCode.SByte:
return (byte)((sbyte)Value);
case TypeCode.Int16:
return (ushort)((short)Value);
case TypeCode.Int32:
return (uint)((int)Value);
case TypeCode.Int64:
return (ulong)((long)Value);
 
case TypeCode.Byte:
return Value;
case TypeCode.UInt16:
return Value;
case TypeCode.UInt32:
return Value;
case TypeCode.UInt64:
return Value;
 
case TypeCode.Single:
return (UInt32)((float)Value);
case TypeCode.Double:
return (ulong)((double)Value);
case TypeCode.Decimal:
return (ulong)((decimal)Value);
 
default:
return null;
}
}
#endregion
#region ToInteger
/// <summary>
/// Converts the specified values boxed type to its correpsonding integer
/// type.
/// </summary>
/// <param name="Value">The value.</param>
/// <returns>A boxed numeric object whos type is an integer type.</returns>
public static object ToInteger(object Value, bool Round)
{
switch (Type.GetTypeCode(Value.GetType()))
{
case TypeCode.SByte:
return Value;
case TypeCode.Int16:
return Value;
case TypeCode.Int32:
return Value;
case TypeCode.Int64:
return Value;
 
case TypeCode.Byte:
return Value;
case TypeCode.UInt16:
return Value;
case TypeCode.UInt32:
return Value;
case TypeCode.UInt64:
return Value;
 
case TypeCode.Single:
return (Round ? (int)Math.Round((float)Value) : (int)((float)Value));
case TypeCode.Double:
return (Round ? (long)Math.Round((double)Value) : (long)((double)Value));
case TypeCode.Decimal:
return (Round ? Math.Round((decimal)Value) : (decimal)Value);
 
default:
return null;
}
}
#endregion
#region UnboxToLong
public static long UnboxToLong(object Value, bool Round)
{
switch (Type.GetTypeCode(Value.GetType()))
{
case TypeCode.SByte:
return (long)((sbyte)Value);
case TypeCode.Int16:
return (long)((short)Value);
case TypeCode.Int32:
return (long)((int)Value);
case TypeCode.Int64:
return (long)Value;
 
case TypeCode.Byte:
return (long)((byte)Value);
case TypeCode.UInt16:
return (long)((ushort)Value);
case TypeCode.UInt32:
return (long)((uint)Value);
case TypeCode.UInt64:
return (long)((ulong)Value);
 
case TypeCode.Single:
return (Round ? (long)Math.Round((float)Value) : (long)((float)Value));
case TypeCode.Double:
return (Round ? (long)Math.Round((double)Value) : (long)((double)Value));
case TypeCode.Decimal:
return (Round ? (long)Math.Round((decimal)Value) : (long)((decimal)Value));
 
default:
return 0;
}
}
#endregion
#region ReplaceMetaChars
/// <summary>
/// Replaces the string representations of meta chars with their corresponding
/// character values.
/// </summary>
/// <param name="input">The input.</param>
/// <returns>A string with all string meta chars are replaced</returns>
public static string ReplaceMetaChars(string input)
{
return Regex.Replace(input, @"(\\)(\d{3}|[^\d])?", new MatchEvaluator(ReplaceMetaCharsMatch));
}
private static string ReplaceMetaCharsMatch(Match m)
{
// convert octal quotes (like \040)
if (m.Groups[2].Length == 3)
return Convert.ToChar(Convert.ToByte(m.Groups[2].Value, 8)).ToString();
else
{
// convert all other special meta characters
//TODO: \xhhh hex and possible dec !!
switch (m.Groups[2].Value)
{
case "0": // null
return "\0";
case "a": // alert (beep)
return "\a";
case "b": // BS
return "\b";
case "f": // FF
return "\f";
case "v": // vertical tab
return "\v";
case "r": // CR
return "\r";
case "n": // LF
return "\n";
case "t": // Tab
return "\t";
default:
// if neither an octal quote nor a special meta character
// so just remove the backslash
return m.Groups[2].Value;
}
}
}
#endregion
#region printf
public static void printf(string Format, params object[] Parameters)
{
Console.Write(Tools.sprintf(Format, Parameters));
}
#endregion
#region fprintf
public static void fprintf(TextWriter Destination, string Format, params object[] Parameters)
{
Destination.Write(Tools.sprintf(Format, Parameters));
}
#endregion
#region sprintf
public static string sprintf(string Format, params object[] Parameters)
{
#region Variables
StringBuilder f = new StringBuilder();
Regex r = new Regex(@"\%(\d*\$)?([\'\#\-\+ ]*)(\d*)(?:\.(\d+))?([hl])?([dioxXucsfeEgGpn%])");
//"%[parameter][flags][width][.precision][length]type"
Match m = null;
string w = String.Empty;
int defaultParamIx = 0;
int paramIx;
object o = null;
 
bool flagLeft2Right = false;
bool flagAlternate = false;
bool flagPositiveSign = false;
bool flagPositiveSpace = false;
bool flagZeroPadding = false;
bool flagGroupThousands = false;
 
int fieldLength = 0;
int fieldPrecision = 0;
char shortLongIndicator = '\0';
char formatSpecifier = '\0';
char paddingCharacter = ' ';
#endregion
 
// find all format parameters in format string
f.Append(Format);
m = r.Match(f.ToString());
while (m.Success)
{
#region parameter index
paramIx = defaultParamIx;
if (m.Groups[1] != null && m.Groups[1].Value.Length > 0)
{
string val = m.Groups[1].Value.Substring(0, m.Groups[1].Value.Length - 1);
paramIx = Convert.ToInt32(val) - 1;
};
#endregion
 
#region format flags
// extract format flags
flagAlternate = false;
flagLeft2Right = false;
flagPositiveSign = false;
flagPositiveSpace = false;
flagZeroPadding = false;
flagGroupThousands = false;
if (m.Groups[2] != null && m.Groups[2].Value.Length > 0)
{
string flags = m.Groups[2].Value;
 
flagAlternate = (flags.IndexOf('#') >= 0);
flagLeft2Right = (flags.IndexOf('-') >= 0);
flagPositiveSign = (flags.IndexOf('+') >= 0);
flagPositiveSpace = (flags.IndexOf(' ') >= 0);
flagGroupThousands = (flags.IndexOf('\'') >= 0);
 
// positive + indicator overrides a
// positive space character
if (flagPositiveSign && flagPositiveSpace)
flagPositiveSpace = false;
}
#endregion
 
#region field length
// extract field length and
// pading character
paddingCharacter = ' ';
fieldLength = int.MinValue;
if (m.Groups[3] != null && m.Groups[3].Value.Length > 0)
{
fieldLength = Convert.ToInt32(m.Groups[3].Value);
flagZeroPadding = (m.Groups[3].Value[0] == '0');
}
#endregion
 
if (flagZeroPadding)
paddingCharacter = '0';
 
// left2right allignment overrides zero padding
if (flagLeft2Right && flagZeroPadding)
{
flagZeroPadding = false;
paddingCharacter = ' ';
}
 
#region field precision
// extract field precision
fieldPrecision = int.MinValue;
if (m.Groups[4] != null && m.Groups[4].Value.Length > 0)
fieldPrecision = Convert.ToInt32(m.Groups[4].Value);
#endregion
 
#region short / long indicator
// extract short / long indicator
shortLongIndicator = Char.MinValue;
if (m.Groups[5] != null && m.Groups[5].Value.Length > 0)
shortLongIndicator = m.Groups[5].Value[0];
#endregion
 
#region format specifier
// extract format
formatSpecifier = Char.MinValue;
if (m.Groups[6] != null && m.Groups[6].Value.Length > 0)
formatSpecifier = m.Groups[6].Value[0];
#endregion
 
// default precision is 6 digits if none is specified except
if (fieldPrecision == int.MinValue &&
formatSpecifier != 's' &&
formatSpecifier != 'c' &&
Char.ToUpper(formatSpecifier) != 'X' &&
formatSpecifier != 'o')
fieldPrecision = 6;
 
#region get next value parameter
// get next value parameter and convert value parameter depending on short / long indicator
if (Parameters == null || paramIx >= Parameters.Length)
o = null;
else
{
o = Parameters[paramIx];
 
if (shortLongIndicator == 'h')
{
if (o is int)
o = (short)((int)o);
else if (o is long)
o = (short)((long)o);
else if (o is uint)
o = (ushort)((uint)o);
else if (o is ulong)
o = (ushort)((ulong)o);
}
else if (shortLongIndicator == 'l')
{
if (o is short)
o = (long)((short)o);
else if (o is int)
o = (long)((int)o);
else if (o is ushort)
o = (ulong)((ushort)o);
else if (o is uint)
o = (ulong)((uint)o);
}
}
#endregion
 
// convert value parameters to a string depending on the formatSpecifier
w = String.Empty;
switch (formatSpecifier)
{
#region % - character
case '%': // % character
w = "%";
break;
#endregion
#region d - integer
case 'd': // integer
w = FormatNumber((flagGroupThousands ? "n" : "d"), flagAlternate,
fieldLength, int.MinValue, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region i - integer
case 'i': // integer
goto case 'd';
#endregion
#region o - octal integer
case 'o': // octal integer - no leading zero
w = FormatOct("o", flagAlternate,
fieldLength, int.MinValue, flagLeft2Right,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region x - hex integer
case 'x': // hex integer - no leading zero
w = FormatHex("x", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region X - hex integer
case 'X': // same as x but with capital hex characters
w = FormatHex("X", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region u - unsigned integer
case 'u': // unsigned integer
w = FormatNumber((flagGroupThousands ? "n" : "d"), flagAlternate,
fieldLength, int.MinValue, flagLeft2Right,
false, false,
paddingCharacter, ToUnsigned(o));
defaultParamIx++;
break;
#endregion
#region c - character
case 'c': // character
if (IsNumericType(o))
w = Convert.ToChar(o).ToString();
else if (o is char)
w = ((char)o).ToString();
else if (o is string && ((string)o).Length > 0)
w = ((string)o)[0].ToString();
defaultParamIx++;
break;
#endregion
#region s - string
case 's': // string
string t = "{0" + (fieldLength != int.MinValue ? "," + (flagLeft2Right ? "-" : String.Empty) + fieldLength.ToString() : String.Empty) + ":s}";
w = o.ToString();
if (fieldPrecision >= 0)
w = w.Substring(0, fieldPrecision);
 
if (fieldLength != int.MinValue)
if (flagLeft2Right)
w = w.PadRight(fieldLength, paddingCharacter);
else
w = w.PadLeft(fieldLength, paddingCharacter);
defaultParamIx++;
break;
#endregion
#region f - double number
case 'f': // double
w = FormatNumber((flagGroupThousands ? "n" : "f"), flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region e - exponent number
case 'e': // double / exponent
w = FormatNumber("e", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region E - exponent number
case 'E': // double / exponent
w = FormatNumber("E", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region g - general number
case 'g': // double / exponent
w = FormatNumber("g", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region G - general number
case 'G': // double / exponent
w = FormatNumber("G", flagAlternate,
fieldLength, fieldPrecision, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, o);
defaultParamIx++;
break;
#endregion
#region p - pointer
case 'p': // pointer
if (o is IntPtr)
w = "0x" + ((IntPtr)o).ToString("x");
defaultParamIx++;
break;
#endregion
#region n - number of processed chars so far
case 'n': // number of characters so far
w = FormatNumber("d", flagAlternate,
fieldLength, int.MinValue, flagLeft2Right,
flagPositiveSign, flagPositiveSpace,
paddingCharacter, m.Index);
break;
#endregion
default:
w = String.Empty;
defaultParamIx++;
break;
}
 
// replace format parameter with parameter value
// and start searching for the next format parameter
// AFTER the position of the current inserted value
// to prohibit recursive matches if the value also
// includes a format specifier
f.Remove(m.Index, m.Length);
f.Insert(m.Index, w);
m = r.Match(f.ToString(), m.Index + w.Length);
}
 
return f.ToString();
}
#endregion
#endregion
 
#region Private Methods
#region FormatOCT
private static string FormatOct(string NativeFormat, bool Alternate,
int FieldLength, int FieldPrecision,
bool Left2Right,
char Padding, object Value)
{
string w = String.Empty;
string lengthFormat = "{0" + (FieldLength != int.MinValue ?
"," + (Left2Right ?
"-" :
String.Empty) + FieldLength.ToString() :
String.Empty) + "}";
 
if (IsNumericType(Value))
{
w = Convert.ToString(UnboxToLong(Value, true), 8);
 
if (Left2Right || Padding == ' ')
{
if (Alternate && w != "0")
w = "0" + w;
w = String.Format(lengthFormat, w);
}
else
{
if (FieldLength != int.MinValue)
w = w.PadLeft(FieldLength - (Alternate && w != "0" ? 1 : 0), Padding);
if (Alternate && w != "0")
w = "0" + w;
}
}
 
return w;
}
#endregion
#region FormatHEX
private static string FormatHex(string NativeFormat, bool Alternate,
int FieldLength, int FieldPrecision,
bool Left2Right,
char Padding, object Value)
{
string w = String.Empty;
string lengthFormat = "{0" + (FieldLength != int.MinValue ?
"," + (Left2Right ?
"-" :
String.Empty) + FieldLength.ToString() :
String.Empty) + "}";
string numberFormat = "{0:" + NativeFormat + (FieldPrecision != int.MinValue ?
FieldPrecision.ToString() :
String.Empty) + "}";
 
if (IsNumericType(Value))
{
w = String.Format(numberFormat, Value);
 
if (Left2Right || Padding == ' ')
{
if (Alternate)
w = (NativeFormat == "x" ? "0x" : "0X") + w;
w = String.Format(lengthFormat, w);
}
else
{
if (FieldLength != int.MinValue)
w = w.PadLeft(FieldLength - (Alternate ? 2 : 0), Padding);
if (Alternate)
w = (NativeFormat == "x" ? "0x" : "0X") + w;
}
}
 
return w;
}
#endregion
#region FormatNumber
private static string FormatNumber(string NativeFormat, bool Alternate,
int FieldLength, int FieldPrecision,
bool Left2Right,
bool PositiveSign, bool PositiveSpace,
char Padding, object Value)
{
string w = String.Empty;
string lengthFormat = "{0" + (FieldLength != int.MinValue ?
"," + (Left2Right ?
"-" :
String.Empty) + FieldLength.ToString() :
String.Empty) + "}";
string numberFormat = "{0:" + NativeFormat + (FieldPrecision != int.MinValue ?
FieldPrecision.ToString() :
"0") + "}";
 
if (IsNumericType(Value))
{
w = String.Format(numberFormat, Value);
 
if (Left2Right || Padding == ' ')
{
if (IsPositive(Value, true))
w = (PositiveSign ?
"+" : (PositiveSpace ? " " : String.Empty)) + w;
w = String.Format(lengthFormat, w);
}
else
{
if (w.StartsWith("-"))
w = w.Substring(1);
if (FieldLength != int.MinValue)
w = w.PadLeft(FieldLength - 1, Padding);
if (IsPositive(Value, true))
w = (PositiveSign ?
"+" : (PositiveSpace ?
" " : (FieldLength != int.MinValue ?
Padding.ToString() : String.Empty))) + w;
else
w = "-" + w;
}
}
 
return w;
}
#endregion
#endregion
}
}
 
 
/C-OSD/arducam-osd/Tools/OSD/Tuple.cs
0,0 → 1,279
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
 
namespace System
{
internal interface ITuple
{
// Methods
int GetHashCode(IEqualityComparer comparer);
string ToString(StringBuilder sb);
 
// Properties
int Size { get; }
}
 
 
public interface IStructuralEquatable
{
// Methods
bool Equals(object other, IEqualityComparer comparer);
int GetHashCode(IEqualityComparer comparer);
}
 
public interface IStructuralComparable
{
// Methods
int CompareTo(object other, IComparer comparer);
}
 
public static class Tuple
{
// Methods
internal static int CombineHashCodes(int h1, int h2)
{
return (((h1 << 5) + h1) ^ h2);
}
 
internal static int CombineHashCodes(int h1, int h2, int h3)
{
return CombineHashCodes(CombineHashCodes(h1, h2), h3);
}
 
internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
{
return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4));
}
 
internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
{
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5);
}
 
internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6)
{
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6));
}
 
internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7)
{
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7));
}
 
internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8)
{
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8));
}
 
public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
{
return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
}
 
}
 
 
[Serializable]
public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
{
// Fields
private readonly T1 m_Item1;
private readonly T2 m_Item2;
private readonly T3 m_Item3;
private readonly T4 m_Item4;
private readonly T5 m_Item5;
private readonly T6 m_Item6;
private readonly T7 m_Item7;
 
// Methods
public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
{
this.m_Item1 = item1;
this.m_Item2 = item2;
this.m_Item3 = item3;
this.m_Item4 = item4;
this.m_Item5 = item5;
this.m_Item6 = item6;
this.m_Item7 = item7;
}
 
public override bool Equals(object obj)
{
return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<object>.Default);
}
 
public override int GetHashCode()
{
return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<object>.Default);
}
 
int IStructuralComparable.CompareTo(object other, IComparer comparer)
{
if (other == null)
{
return 1;
}
Tuple<T1, T2, T3, T4, T5, T6, T7> tuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
if (tuple == null)
{
throw new ArgumentException("ArgumentException_TupleIncorrectType");
}
int num = 0;
num = comparer.Compare(this.m_Item1, tuple.m_Item1);
if (num != 0)
{
return num;
}
num = comparer.Compare(this.m_Item2, tuple.m_Item2);
if (num != 0)
{
return num;
}
num = comparer.Compare(this.m_Item3, tuple.m_Item3);
if (num != 0)
{
return num;
}
num = comparer.Compare(this.m_Item4, tuple.m_Item4);
if (num != 0)
{
return num;
}
num = comparer.Compare(this.m_Item5, tuple.m_Item5);
if (num != 0)
{
return num;
}
num = comparer.Compare(this.m_Item6, tuple.m_Item6);
if (num != 0)
{
return num;
}
return comparer.Compare(this.m_Item7, tuple.m_Item7);
}
 
bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
{
if (other == null)
{
return false;
}
Tuple<T1, T2, T3, T4, T5, T6, T7> tuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
if (tuple == null)
{
return false;
}
return ((((comparer.Equals(this.m_Item1, tuple.m_Item1) && comparer.Equals(this.m_Item2, tuple.m_Item2)) && (comparer.Equals(this.m_Item3, tuple.m_Item3) && comparer.Equals(this.m_Item4, tuple.m_Item4))) && (comparer.Equals(this.m_Item5, tuple.m_Item5) && comparer.Equals(this.m_Item6, tuple.m_Item6))) && comparer.Equals(this.m_Item7, tuple.m_Item7));
}
 
int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
{
return Tuple.CombineHashCodes(comparer.GetHashCode(this.m_Item1), comparer.GetHashCode(this.m_Item2), comparer.GetHashCode(this.m_Item3), comparer.GetHashCode(this.m_Item4), comparer.GetHashCode(this.m_Item5), comparer.GetHashCode(this.m_Item6), comparer.GetHashCode(this.m_Item7));
}
 
int IComparable.CompareTo(object obj)
{
return ((IStructuralComparable) this).CompareTo(obj, Comparer<object>.Default);
}
 
int ITuple.GetHashCode(IEqualityComparer comparer)
{
return ((IStructuralEquatable) this).GetHashCode(comparer);
}
 
string ITuple.ToString(StringBuilder sb)
{
sb.Append(this.m_Item1);
sb.Append(", ");
sb.Append(this.m_Item2);
sb.Append(", ");
sb.Append(this.m_Item3);
sb.Append(", ");
sb.Append(this.m_Item4);
sb.Append(", ");
sb.Append(this.m_Item5);
sb.Append(", ");
sb.Append(this.m_Item6);
sb.Append(", ");
sb.Append(this.m_Item7);
sb.Append(")");
return sb.ToString();
}
 
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("(");
return ((ITuple) this).ToString(sb);
}
 
// Properties
public T1 Item1
{
get
{
return this.m_Item1;
}
}
 
public T2 Item2
{
get
{
return this.m_Item2;
}
}
 
public T3 Item3
{
get
{
return this.m_Item3;
}
}
 
public T4 Item4
{
get
{
return this.m_Item4;
}
}
 
public T5 Item5
{
get
{
return this.m_Item5;
}
}
 
public T6 Item6
{
get
{
return this.m_Item6;
}
}
 
public T7 Item7
{
get
{
return this.m_Item7;
}
}
 
int ITuple.Size
{
get
{
return 7;
}
}
}
 
}
/C-OSD/arducam-osd/Tools/OSD/app.config
0,0 → 1,3
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
/C-OSD/arducam-osd/Tools/OSD/bin/Release/OSD_Config.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/bin/Release/OSD_Config.exe.config
0,0 → 1,3
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
/C-OSD/arducam-osd/Tools/OSD/bin/Release/OSD_Config.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/bin/Release/OSD_SA_v5.mcm
0,0 → 1,16385
MAX7456
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00001010
10100000
00010101
00101000
00101000
00010101
00100000
00101000
00010101
00000000
10100000
00010101
00000010
10000000
00010101
00001010
00000000
00010101
00101010
10101000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00101010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00001010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00101010
10100000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01001010
01010101
01010100
00101010
01010101
01010010
10101010
01010101
01001010
10000000
01010101
00101000
00010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010100
01010010
10000101
01010010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10100001
01010101
01010101
10101000
00010101
01010101
10101010
10000101
01010101
00000010
10100001
01010101
01010100
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010010
10000101
00010101
01010010
10000101
10000101
01010010
10000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
00101010
10101010
10101000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
00000101
01000001
10000000
10100001
00101000
10000000
00001000
00101000
10000000
00000010
10000001
10100000
00000010
10000101
10100000
00001000
00100001
00101000
00100000
00001000
01001010
10000000
00001000
01001010
10000000
00000010
01001010
10100000
00000010
01010000
10101010
00000010
01010100
10001010
10101000
01010100
10000000
00000001
01010100
10000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
00101010
10101010
00000101
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
00100001
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
00010101
01001000
01010100
10000101
01001010
00010100
10100001
01001010
10000010
00000101
01001010
10101000
01010101
01001010
10101000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00101010
10100001
01010100
10000000
00000101
01010010
10000101
01010101
01001000
10000101
01010101
00100000
10000101
01010101
00000000
00000000
00010101
00101010
10101010
10000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010010
10000101
01010010
01010010
10000101
01010100
01010010
10000101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
00010101
01010101
01001010
10000000
01010101
01010010
10101010
01010101
01010100
00101010
01010101
01010101
01001010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10000101
01010010
10000101
00010101
01010010
10000101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01001010
00010101
01010100
00101000
01010101
00000010
10100001
01010101
10101010
10000101
01010101
10101000
00010101
01010101
10100001
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010100
01010100
10000101
01010101
01010100
10000101
01010101
01010100
10000101
01010100
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010010
00010100
10000101
01010000
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00000000
01010000
10101010
10101010
01000010
10101010
10101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01000010
10101010
10101010
01010000
10101010
10101010
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
10000000
00000010
10101000
10100000
00001010
10101000
10101010
10101010
10100000
10101010
10101010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00001010
10100000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
10001010
10100010
10100000
10100000
00001010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00001010
10101010
10000001
00000000
00001010
00000001
00000000
00101000
00000001
00000010
10100000
00000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10001010
10000001
00001010
00100010
10000001
00001010
00000010
10000001
00001010
00000010
10000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010000
01010101
01010101
01000010
01010101
01010101
00001010
01010101
01010100
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010000
01001010
10101010
01010001
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010101
01010101
10101000
00010101
01010101
10101010
00000101
01010101
10101010
10000001
01010101
00000000
10100000
01010101
00000000
10100000
00010101
00000000
10100001
00000101
10101010
10100001
01000101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010100
00101000
00010101
01010000
10101010
00000101
01000010
10101010
10000001
00001010
10101010
10100000
00000000
00000000
00000000
00101010
10101010
10101000
00101010
10101000
00001000
00101010
10101000
00001000
00100000
00001000
00001000
00100000
00001010
10101000
00100000
00001010
10101000
00100000
00001010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
00010101
01010010
00010100
10000101
01001010
10000010
10100001
01010010
10000100
10100001
01010100
10000101
00100001
01010100
10000101
00100001
01010010
00010100
10000101
01010100
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010100
00010101
01010010
10000010
10000101
01010010
10000010
10000101
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
00000101
01001010
10101010
00010101
01010010
10101010
10000101
01010000
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
00000101
01001010
10000100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010010
10000010
00010101
01010010
00010010
00010101
01010010
00010010
00010101
01010010
00001000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
00001000
00000101
01001000
01010010
00100001
01001000
01010100
10000101
01001000
00000010
00100001
01010010
10101000
01001000
01010100
00000001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01001000
01010101
01010101
00101010
00010101
01010101
01001010
00010101
01010101
01010010
00010101
01010101
01010010
00010101
01010101
01001000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010001
00100001
01010101
01001000
00101000
01010101
00101000
01001010
00010100
10100001
01010010
10000010
10000101
01000000
10101010
00000001
00101010
10101010
10101000
01000000
10101010
00000001
01010010
10000010
10000101
01001010
00010100
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010101
00000000
10100001
01010100
10101010
10000101
01010100
10101010
10000101
01010101
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
00101010
10000101
01010100
10100010
10000101
01010010
10000010
10000101
01001010
00000010
10000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010000
01010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01000010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01010010
10101010
10000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
01010101
00101000
01000001
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
00000000
10000101
01001000
00000100
00100001
00100000
10100010
00001000
00100010
00001010
00001000
00100010
00000010
00001000
00100010
00001010
00001000
00100000
10100010
00100001
00100001
00000100
10000101
01001000
01010101
00000101
01010010
00000000
00100001
01010100
10101010
10000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010010
10101010
00010101
01001010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010100
10101010
10100001
01010100
10101010
10100001
01010101
00001010
00000101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010000
01001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
10101010
00010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10100001
01010101
01001010
10000101
01010101
01001010
10100001
01010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101010
10100001
01001010
10001010
10000101
01010010
10101010
10100001
01010100
10101000
10100001
01010101
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010100
10101010
10000101
01010010
10101010
10100001
01001010
10000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
10000000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00000010
10100001
01010101
01010100
10100001
01010000
01010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01010010
10101010
00010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010100
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01010010
00010100
10000101
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000000
10100001
01001010
00000000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
10100001
01001010
10000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101010
10100001
01010101
01000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010100
00010010
10000101
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10101000
01010101
01001010
10101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010000
10100001
01001010
00001010
10100001
01001010
00001010
10000101
01001010
10101010
10100001
01010010
10101000
10100001
01010100
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01010010
10101010
10100001
01010000
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010001
01010100
10100001
01001000
01010010
10101000
00101000
01001010
00001010
10100001
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
01001000
10000101
01010101
01001000
10100001
01010101
01001000
10101000
01010101
01001000
10101010
00010101
01001000
10101010
10000101
01001000
10101010
00010101
01001000
10101000
01010101
01001000
10100001
01010101
01001000
10000101
01010101
01001000
00010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
00001000
00010101
01010101
00101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101000
00101000
01010101
00101000
10100000
01010101
00101010
00000000
01010101
00101000
10100000
01010101
00101000
00101000
01010101
01000000
00000000
00000001
00101000
10001010
10101000
00101000
10000000
10000001
00100010
10000000
10000101
00100010
10000000
10000101
01000000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
10100001
01010101
00101010
00000101
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000000
00000000
00000101
01010010
10100010
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010010
10000000
10100001
01010100
00000000
00000001
01010101
00101001
01101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
00001010
00010101
01000000
00000000
00010101
01010101
00101010
10000101
01010101
00100000
10000101
01010100
10101010
10100001
01010100
10100000
10100001
01010100
10100000
10100001
01010101
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010100
00000000
00000000
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
00000000
00000001
01010100
10101000
00101000
01010100
10101010
00101000
01010100
10101010
10101000
01010100
10100010
10101000
01010100
10100000
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000000
00000000
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10101010
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000001
01010101
01001010
10101000
01010101
01001010
10101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00000100
00010101
01010100
10100010
10000101
01010100
10101010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00001000
01010101
01001000
00101000
01010101
01001010
10100000
01010101
01001010
00101000
01010101
01010000
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00100000
00000001
01010101
00101010
10101000
01010101
01000000
00001000
01010101
00101010
10101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000001
01010101
01001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000001
00000000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000001
01010101
00101010
10101000
01010101
00100000
00101000
01010101
00101010
10000001
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01000000
01010101
00101010
00101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010000
00000000
01001000
01010000
10100000
01001000
01010010
00001000
00000000
00010010
00001000
00101010
00010010
00001000
00000000
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
00101010
00010000
00000000
00101010
00010010
00001000
00101010
00010010
00001000
01000000
01010010
00100000
01001000
01010010
10000000
01001000
01010010
00100000
01001000
01010010
00001000
01001000
01010010
00001000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010010
00000000
01001000
01010010
00000000
01001000
01010010
00000000
00000000
00010010
10101000
00101010
00010000
00000000
00000000
00010000
10100000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
01000000
01010010
10101000
01001000
01010010
00000000
01001000
01010010
10101000
01001000
01010000
00001000
01001000
01010010
10101000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010100
00010101
00101000
01010010
10000101
00101010
00001010
10000101
00101010
10101010
10000101
00101000
10100010
10000101
00101000
10100010
10000101
00101000
00000010
10000101
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010000
01010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
01001010
00101000
01010101
01001010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
01001000
00001000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
00101000
01001010
00010101
01000001
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01000000
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00000000
10101010
01010000
00000000
10101010
01010000
00000000
10101010
01010100
00000000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10000000
00010101
01010101
10101010
00000001
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10101000
00000000
00000101
10101000
00000000
00010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010100
00000000
01010101
00000000
00101010
01010101
00000000
00001010
01010101
00000000
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010100
00000000
00101010
01010100
00000000
00000000
01010100
00000000
00000000
01010101
01010100
00000000
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101000
00000101
01010101
10101010
00000001
01010101
10101010
10000000
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10100000
00000000
00000101
10100000
00000000
00000101
10000000
01010101
00000101
00000000
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010100
00000010
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010000
00000010
10100000
01010100
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010000
00000001
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
00000001
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101000
00101000
00010101
10000000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000001
01000000
00010101
00010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
00000000
00000010
01010000
00001010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10000000
01010100
00000000
00000000
01010100
00000000
00000000
01010101
00000000
00000001
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010101
00101010
00000000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
10101010
10101000
00010101
10000000
10100000
00010101
00000000
00100000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01010100
00000001
01010101
01010101
00000001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010100
00101010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
00101010
10101010
01010000
00000000
00000000
01010000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
01000000
00010101
01010101
00001010
00000001
01010101
10101010
10100000
00000101
10101010
10101010
10000000
10101010
10101010
00000000
10101010
10101000
00000000
00000010
10000000
00000001
00000010
00000000
00000101
00000000
00000000
01010101
01000000
00000001
01010101
01000000
00000101
01010101
01000000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01000010
00000000
01010100
00001010
10101010
01010000
00101010
10101010
01010000
00000010
10101010
01010000
00000000
00000010
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
00000000
00000001
01010101
10000000
10000000
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
10000000
00101010
10101010
00000000
00101010
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010000
10100000
01010101
00000010
10101010
01010100
00001010
10101010
01010100
00000010
10101010
01010100
00000000
00101010
01010101
01000000
00000010
01010101
01010000
00000010
01010101
01010100
00001010
01010101
01000000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000001
01000001
01010101
10100000
00000000
01010101
10101010
10100000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
00000101
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010000
00000000
01010101
01000010
10101010
01010101
01000000
10101010
01010101
01010000
00101010
01010101
01010000
00101010
01010101
01010000
00001010
01010100
00000000
00101010
01010000
00000000
10101010
01010000
00000000
00000010
01010100
00000000
00000000
01010101
01010000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010100
00010101
10101000
00000000
00010101
10101010
00101000
00010101
10101010
10100000
00010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
00000010
10000000
01010101
00000000
00000001
01010101
00000000
00000001
01010101
00000000
00000001
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010100
00101010
01010101
01010100
00101010
01010101
01010100
00101010
01010000
00000000
00101010
01010000
00000000
10101010
01010000
00001010
10101010
01010100
00000000
10101010
01010101
00000000
00101010
01010101
01000000
00001010
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00000000
00000101
10101010
00000000
00000101
10101010
10100000
00000101
10101000
00000000
00010101
10100000
00000000
01010101
10000000
00000001
01010101
00000000
00000101
01010101
00000000
00010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010000
01010101
01010101
01000010
01010100
00010101
00001010
01010100
00000000
00101010
01010100
00101000
10101010
01010100
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00000010
10000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000000
00000101
01010101
10101010
10000001
01010101
10101010
00000001
01010101
10101000
00000101
01010101
10101000
00000101
01010101
10100000
00000101
01010101
10101000
00000000
00010101
10101010
00000000
00000101
10000000
00000000
00000101
00000000
00000000
00010101
00000000
00000101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01000001
01000000
01010101
00000000
00001010
01010101
00001010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
10101010
10101010
01000000
00000000
00000000
01000000
00000000
00000000
01000000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00001010
00000101
01010101
10101010
10000000
01010101
10101010
10100000
00010101
10101010
10000000
00010101
10101000
00000000
00010101
10000000
00000001
01010101
10000000
00000101
01010101
10100000
00010101
01010101
00000000
00000001
01010101
00000000
00000000
01010101
00000000
00000000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01000000
00000000
01010101
00000010
00000010
01010100
00101010
10101010
01010000
10101010
10101010
00000010
10101010
10101010
00000000
10101010
10101000
00000000
00000000
10101000
00000000
00000000
00000000
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
00000000
10000001
01010101
10101010
10100000
00010101
10101010
10101000
00000101
10101010
10000000
00000101
10000000
00000000
00000101
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010100
00000001
01010101
01000000
10100000
01010000
00001010
10101010
00000010
10101010
10101010
00000000
10101010
10101010
00000000
00101010
10101010
01000000
00000010
10000000
01010000
00000000
10000000
01010101
00000000
00000000
01010101
01000000
00000001
01010101
01010000
00000001
01010101
01010101
00000001
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010000
00000000
10101000
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10101010
01010100
00001010
00000010
01010101
00001000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00010101
01010101
01000000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
10000000
00000000
01010101
10101010
10100000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
00000010
10101000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
01000000
00000000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
01000000
00000000
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010100
00101000
00101010
01010100
00000000
00000010
01010100
00000000
00000000
01010100
00000000
00000000
01010100
00000001
01000000
01010100
00010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10000000
00010101
01010101
10100000
00010101
01010101
10101010
10000001
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101000
00000101
00001010
10000000
00000101
00000000
00000000
00010101
00000000
00000000
01010101
00000000
00000001
01010101
01000000
00000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010000
00101010
01010101
01000000
10101010
01010101
00000010
10101010
01010100
00000000
00101010
01010000
00000000
00101010
01010000
00000000
00001010
01010000
00000000
00001010
01010000
01010101
00000010
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000000
00010101
01010101
10101000
00000000
01010101
10100000
00000000
01010101
10101000
00000000
01010101
10101010
00000101
01010101
10101010
10000001
01010101
10101010
10100000
01010101
10101010
10100000
00010101
10101000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000000
00010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001000
00100001
01010101
01001000
00100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01001010
00000101
01010101
00101010
10100000
01010101
00101010
10101010
00010101
01001010
00001010
00010101
01010010
00010010
10000101
01010100
01010010
10000101
01010100
01010010
10000101
01010010
01010010
10000101
01001010
00001010
00010101
00101010
10101010
00010101
00101010
10100000
01010101
01001010
00000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01001010
00000000
00000000
01001010
00000000
00000001
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
00000001
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
01001010
00000000
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00000000
00000000
00001010
00001010
10101010
01001010
00001010
10101010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
10101010
00001010
01001010
10101010
00001010
01001010
00000000
00001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010100
00000000
00010101
01010100
10101010
00000000
00000000
10101010
00001010
10101010
10100000
00001010
10101010
10100000
00001010
00000000
10101010
00001010
00010100
10101010
00001010
00010100
00000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
00000001
00100001
00000000
10101000
00100000
10101010
00000001
00100001
00000000
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000000
10100001
01001010
10100000
10100001
00001010
00101000
10100000
10001010
00101000
10100010
00001010
00001010
10100000
01001010
00000010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10000000
10000101
01010010
10000101
01010101
00000010
10101010
00000000
10101000
10101010
10001010
00000000
00000010
10000000
01010010
00000010
10000101
01010010
10101010
10000101
01010000
10101010
00000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10000101
01010101
00000010
10101000
00000000
10100010
10101000
10101010
00000010
10000000
00000000
01010010
10000000
01010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
00001010
00101000
10100000
10100010
00101000
10001010
00000010
10101010
10000000
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
10101000
01010100
10101010
00001010
00010010
10000000
01010010
10001010
00010101
01010100
10101000
01010101
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01000001
01001010
10100001
00101000
01001010
10100001
00101000
01010000
00000101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100000
01010101
01010101
00101010
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00101010
01010101
01010101
00100000
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
10101000
01010101
01010101
00001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
00001000
01010101
01010101
10101000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010010
10000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010100
10000101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010100
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
00000000
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000001
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01000101
01001010
10100001
00100001
01000000
00000001
00100001
00101010
10100001
00100001
00101000
00101000
01000101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10100001
01010101
01000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01000000
00100000
00000101
00101010
10101010
10100001
00100000
00100000
00100001
00100010
00100010
00000001
00100000
00100000
00101000
00101010
10101010
00100001
00101000
00000000
00100001
01000000
00000010
00100001
01010101
00100010
00100001
01010100
00100010
00100001
01010010
00100010
00100001
01000010
00100010
00100001
00100010
00100010
00100001
00100010
00100010
00101000
01000100
01000100
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000001
01000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000000
00000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000000
00100001
01001010
10100000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101010
10101000
01000101
00101000
00101000
00100001
01000001
01000000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000001
10101010
10101010
10101000
00100000
00000000
00001000
00100010
00010100
10001000
00100010
10000100
10001000
00100010
10100000
10001000
00100010
10101000
10001000
00100010
10101010
10001000
00100010
10101010
10001000
00100010
10101000
10001000
00100010
10100000
10001000
00100010
10000100
10001000
00100010
00010100
10001000
00100000
00000000
00001000
10101010
10101010
10101000
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010000
01010010
01010101
01001010
00010000
01010101
01001010
00001010
01010101
01010000
00101010
01010101
01010100
10100000
01010101
00000010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000010
10000101
01010101
01010100
10100000
01010101
01010000
00101010
01010101
01001010
00001010
01010101
01001010
00010000
01010101
01010000
01010010
01010101
01010101
01010010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
00000101
01010101
00000100
10100001
01010101
10100000
10100001
01010101
10101000
00000101
01010101
00001010
00010101
01010101
01010010
10000000
01010101
01010010
10001010
00010101
01010010
10001010
00010101
01010010
10000000
01010101
00001010
00010101
01010101
10101000
00000101
01010101
10100000
10100001
01010101
00000100
10100001
01010101
10000101
00000101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
00001010
01010101
01010100
10101010
01010101
01010010
10100000
01010101
01001010
00000100
01010101
01001010
00010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
01001010
00010100
01010101
01001010
00000100
01010101
01010010
10100000
01010101
01010100
10101010
01010101
01010101
00001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100000
01010101
01010101
10101010
00010101
01010101
10101010
10000101
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10000101
01010101
10101010
00010101
01010101
10100000
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10001000
01000000
00001010
00001000
00101010
10101000
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00101010
10101000
01001000
01000000
00001010
00001000
01010101
01010010
10001000
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01101000
01010101
01010101
01011010
00010101
01010100
00010010
00010101
01010010
10000010
00010101
01000100
10000010
10000101
00100000
10100000
10000101
00101000
00100000
10000101
01001000
00100000
10000101
00101000
00100000
10000101
00100000
10100000
10000101
01000100
10000010
10000101
01010010
10000010
00010101
01010100
00010010
00010101
01010101
01011010
00010101
01010101
01101000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10100001
01010010
10101010
10101000
01010010
10101010
00000000
01010010
10101010
00000101
01010010
00001010
10000101
01010000
00001010
10000001
01010101
01010010
10100001
01010101
01010010
10100001
01010101
01010000
10000001
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010001
01010001
01001010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
10001000
00001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
01000101
00010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010001
01010001
00101010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
00001000
00001000
00100000
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
01000101
01010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
/C-OSD/arducam-osd/Tools/OSD/bin/Release/vlcsnap-2012-01-28-07h46m04s95.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/key.snk
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/mcm.cs
0,0 → 1,91
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
 
namespace OSD
{
class mcm
{
 
public static Bitmap[] readMCM(string file)
{
Bitmap[] imagearray = new Bitmap[256];
 
if (!File.Exists(file))
{
System.Windows.Forms.MessageBox.Show("Font file does not exist : " + file);
return imagearray;
}
 
for (int a = 0; a < imagearray.Length; a++)
{
imagearray[a] = new Bitmap(12, 18);
}
 
StreamReader sr = new StreamReader(file);
 
string device = sr.ReadLine();
 
// 00 black 10 white x1 = trans/grey
 
int x = 0, y = 0;
 
int image = 0;
 
while (!sr.EndOfStream)
{
string line = "";
y = 0;
while (y < 18)
{
x = 0;
while (x < 12)
{
if (x == 0 || x == 4 || x == 8)
{
//Console.WriteLine("line");
line = sr.ReadLine();
if (line == null)
return imagearray;
}
 
string i1 = line.Substring((x % 4) * 2, 2);
 
//Console.WriteLine(image + " " + line + " " + i1 + " " + x + " " + y);
 
if (i1 == "01" || i1 == "11")
{
imagearray[image].SetPixel(x, y, Color.Transparent);
}
else if (i1 == "00")
{
imagearray[image].SetPixel(x, y, Color.Black);
}
else if (i1 == "10")
{
imagearray[image].SetPixel(x, y, Color.White);
}
 
x++;
}
y++;
}
 
// left
int left = 256 - 216;
while ((left / 4) > 0)
{
sr.ReadLine(); // 1
left -= 4;
}
 
image++;
}
 
return imagearray;
}
}
}
/C-OSD/arducam-osd/Tools/OSD/osd.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD/vlcsnap-2012-01-28-07h46m04s95.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/C-OSD/arducam-osd/Tools/OSD_SA_v5.mcm
0,0 → 1,16385
MAX7456
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00001010
10100000
00010101
00101000
00101000
00010101
00100000
00101000
00010101
00000000
10100000
00010101
00000010
10000000
00010101
00001010
00000000
00010101
00101010
10101000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00101010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00001010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00101010
10100000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01001010
01010101
01010100
00101010
01010101
01010010
10101010
01010101
01001010
10000000
01010101
00101000
00010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010100
01010010
10000101
01010010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10100001
01010101
01010101
10101000
00010101
01010101
10101010
10000101
01010101
00000010
10100001
01010101
01010100
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010010
10000101
00010101
01010010
10000101
10000101
01010010
10000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
00101010
10101010
10101000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
00000101
01000001
10000000
10100001
00101000
10000000
00001000
00101000
10000000
00000010
10000001
10100000
00000010
10000101
10100000
00001000
00100001
00101000
00100000
00001000
01001010
10000000
00001000
01001010
10000000
00000010
01001010
10100000
00000010
01010000
10101010
00000010
01010100
10001010
10101000
01010100
10000000
00000001
01010100
10000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
00101010
10101010
00000101
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
00100001
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
00010101
01001000
01010100
10000101
01001010
00010100
10100001
01001010
10000010
00000101
01001010
10101000
01010101
01001010
10101000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00101010
10100001
01010100
10000000
00000101
01010010
10000101
01010101
01001000
10000101
01010101
00100000
10000101
01010101
00000000
00000000
00010101
00101010
10101010
10000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010010
10000101
01010010
01010010
10000101
01010100
01010010
10000101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
00010101
01010101
01001010
10000000
01010101
01010010
10101010
01010101
01010100
00101010
01010101
01010101
01001010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10000101
01010010
10000101
00010101
01010010
10000101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01001010
00010101
01010100
00101000
01010101
00000010
10100001
01010101
10101010
10000101
01010101
10101000
00010101
01010101
10100001
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010100
01010100
10000101
01010101
01010100
10000101
01010101
01010100
10000101
01010100
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010010
00010100
10000101
01010000
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00000000
01010000
10101010
10101010
01000010
10101010
10101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01000010
10101010
10101010
01010000
10101010
10101010
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
10000000
00000010
10101000
10100000
00001010
10101000
10101010
10101010
10100000
10101010
10101010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00001010
10100000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
10001010
10100010
10100000
10100000
00001010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00001010
10101010
10000001
00000000
00001010
00000001
00000000
00101000
00000001
00000010
10100000
00000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10001010
10000001
00001010
00100010
10000001
00001010
00000010
10000001
00001010
00000010
10000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010000
01010101
01010101
01000010
01010101
01010101
00001010
01010101
01010100
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010000
01001010
10101010
01010001
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010101
01010101
10101000
00010101
01010101
10101010
00000101
01010101
10101010
10000001
01010101
00000000
10100000
01010101
00000000
10100000
00010101
00000000
10100001
00000101
10101010
10100001
01000101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010100
00101000
00010101
01010000
10101010
00000101
01000010
10101010
10000001
00001010
10101010
10100000
00000000
00000000
00000000
00101010
10101010
10101000
00101010
10101000
00001000
00101010
10101000
00001000
00100000
00001000
00001000
00100000
00001010
10101000
00100000
00001010
10101000
00100000
00001010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
00010101
01010010
00010100
10000101
01001010
10000010
10100001
01010010
10000100
10100001
01010100
10000101
00100001
01010100
10000101
00100001
01010010
00010100
10000101
01010100
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010100
00010101
01010010
10000010
10000101
01010010
10000010
10000101
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
00000101
01001010
10101010
00010101
01010010
10101010
10000101
01010000
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
00000101
01001010
10000100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010010
10000010
00010101
01010010
00010010
00010101
01010010
00010010
00010101
01010010
00001000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
00001000
00000101
01001000
01010010
00100001
01001000
01010100
10000101
01001000
00000010
00100001
01010010
10101000
01001000
01010100
00000001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01001000
01010101
01010101
00101010
00010101
01010101
01001010
00010101
01010101
01010010
00010101
01010101
01010010
00010101
01010101
01001000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010001
00100001
01010101
01001000
00101000
01010101
00101000
01001010
00010100
10100001
01010010
10000010
10000101
01000000
10101010
00000001
00101010
10101010
10101000
01000000
10101010
00000001
01010010
10000010
10000101
01001010
00010100
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010101
00000000
10100001
01010100
10101010
10000101
01010100
10101010
10000101
01010101
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
00101010
10000101
01010100
10100010
10000101
01010010
10000010
10000101
01001010
00000010
10000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010000
01010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01000010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01010010
10101010
10000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
01010101
00101000
01000001
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
00000000
10000101
01001000
00000100
00100001
00100000
10100010
00001000
00100010
00001010
00001000
00100010
00000010
00001000
00100010
00001010
00001000
00100000
10100010
00100001
00100001
00000100
10000101
01001000
01010101
00000101
01010010
00000000
00100001
01010100
10101010
10000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010010
10101010
00010101
01001010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010100
10101010
10100001
01010100
10101010
10100001
01010101
00001010
00000101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010000
01001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
10101010
00010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10100001
01010101
01001010
10000101
01010101
01001010
10100001
01010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101010
10100001
01001010
10001010
10000101
01010010
10101010
10100001
01010100
10101000
10100001
01010101
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010100
10101010
10000101
01010010
10101010
10100001
01001010
10000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
10000000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00000010
10100001
01010101
01010100
10100001
01010000
01010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01010010
10101010
00010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010100
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01010010
00010100
10000101
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000000
10100001
01001010
00000000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
10100001
01001010
10000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101010
10100001
01010101
01000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010100
00010010
10000101
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10101000
01010101
01001010
10101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010000
10100001
01001010
00001010
10100001
01001010
00001010
10000101
01001010
10101010
10100001
01010010
10101000
10100001
01010100
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01010010
10101010
10100001
01010000
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010001
01010100
10100001
01001000
01010010
10101000
00101000
01001010
00001010
10100001
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
01001000
10000101
01010101
01001000
10100001
01010101
01001000
10101000
01010101
01001000
10101010
00010101
01001000
10101010
10000101
01001000
10101010
00010101
01001000
10101000
01010101
01001000
10100001
01010101
01001000
10000101
01010101
01001000
00010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
00001000
00010101
01010101
00101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101000
00101000
01010101
00101000
10100000
01010101
00101010
00000000
01010101
00101000
10100000
01010101
00101000
00101000
01010101
01000000
00000000
00000001
00101000
10001010
10101000
00101000
10000000
10000001
00100010
10000000
10000101
00100010
10000000
10000101
01000000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
10100001
01010101
00101010
00000101
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000000
00000000
00000101
01010010
10100010
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010010
10000000
10100001
01010100
00000000
00000001
01010101
00101001
01101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
00001010
00010101
01000000
00000000
00010101
01010101
00101010
10000101
01010101
00100000
10000101
01010100
10101010
10100001
01010100
10100000
10100001
01010100
10100000
10100001
01010101
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010100
00000000
00000000
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
00000000
00000001
01010100
10101000
00101000
01010100
10101010
00101000
01010100
10101010
10101000
01010100
10100010
10101000
01010100
10100000
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000000
00000000
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10101010
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000001
01010101
01001010
10101000
01010101
01001010
10101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00000100
00010101
01010100
10100010
10000101
01010100
10101010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00001000
01010101
01001000
00101000
01010101
01001010
10100000
01010101
01001010
00101000
01010101
01010000
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00100000
00000001
01010101
00101010
10101000
01010101
01000000
00001000
01010101
00101010
10101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000001
01010101
01001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000001
00000000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000001
01010101
00101010
10101000
01010101
00100000
00101000
01010101
00101010
10000001
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01000000
01010101
00101010
00101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010000
00000000
01001000
01010000
10100000
01001000
01010010
00001000
00000000
00010010
00001000
00101010
00010010
00001000
00000000
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
00101010
00010000
00000000
00101010
00010010
00001000
00101010
00010010
00001000
01000000
01010010
00100000
01001000
01010010
10000000
01001000
01010010
00100000
01001000
01010010
00001000
01001000
01010010
00001000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010010
00000000
01001000
01010010
00000000
01001000
01010010
00000000
00000000
00010010
10101000
00101010
00010000
00000000
00000000
00010000
10100000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
01000000
01010010
10101000
01001000
01010010
00000000
01001000
01010010
10101000
01001000
01010000
00001000
01001000
01010010
10101000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010100
00010101
00101000
01010010
10000101
00101010
00001010
10000101
00101010
10101010
10000101
00101000
10100010
10000101
00101000
10100010
10000101
00101000
00000010
10000101
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010000
01010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
01001010
00101000
01010101
01001010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
01001000
00001000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
00101000
01001010
00010101
01000001
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01000000
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00000000
10101010
01010000
00000000
10101010
01010000
00000000
10101010
01010100
00000000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10000000
00010101
01010101
10101010
00000001
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10101000
00000000
00000101
10101000
00000000
00010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010100
00000000
01010101
00000000
00101010
01010101
00000000
00001010
01010101
00000000
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010100
00000000
00101010
01010100
00000000
00000000
01010100
00000000
00000000
01010101
01010100
00000000
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101000
00000101
01010101
10101010
00000001
01010101
10101010
10000000
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10100000
00000000
00000101
10100000
00000000
00000101
10000000
01010101
00000101
00000000
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010100
00000010
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010000
00000010
10100000
01010100
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010000
00000001
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
00000001
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101000
00101000
00010101
10000000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000001
01000000
00010101
00010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
00000000
00000010
01010000
00001010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10000000
01010100
00000000
00000000
01010100
00000000
00000000
01010101
00000000
00000001
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010101
00101010
00000000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
10101010
10101000
00010101
10000000
10100000
00010101
00000000
00100000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01010100
00000001
01010101
01010101
00000001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010100
00101010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
00101010
10101010
01010000
00000000
00000000
01010000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
01000000
00010101
01010101
00001010
00000001
01010101
10101010
10100000
00000101
10101010
10101010
10000000
10101010
10101010
00000000
10101010
10101000
00000000
00000010
10000000
00000001
00000010
00000000
00000101
00000000
00000000
01010101
01000000
00000001
01010101
01000000
00000101
01010101
01000000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01000010
00000000
01010100
00001010
10101010
01010000
00101010
10101010
01010000
00000010
10101010
01010000
00000000
00000010
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
00000000
00000001
01010101
10000000
10000000
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
10000000
00101010
10101010
00000000
00101010
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010000
10100000
01010101
00000010
10101010
01010100
00001010
10101010
01010100
00000010
10101010
01010100
00000000
00101010
01010101
01000000
00000010
01010101
01010000
00000010
01010101
01010100
00001010
01010101
01000000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000001
01000001
01010101
10100000
00000000
01010101
10101010
10100000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
00000101
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010000
00000000
01010101
01000010
10101010
01010101
01000000
10101010
01010101
01010000
00101010
01010101
01010000
00101010
01010101
01010000
00001010
01010100
00000000
00101010
01010000
00000000
10101010
01010000
00000000
00000010
01010100
00000000
00000000
01010101
01010000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010100
00010101
10101000
00000000
00010101
10101010
00101000
00010101
10101010
10100000
00010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
00000010
10000000
01010101
00000000
00000001
01010101
00000000
00000001
01010101
00000000
00000001
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010100
00101010
01010101
01010100
00101010
01010101
01010100
00101010
01010000
00000000
00101010
01010000
00000000
10101010
01010000
00001010
10101010
01010100
00000000
10101010
01010101
00000000
00101010
01010101
01000000
00001010
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00000000
00000101
10101010
00000000
00000101
10101010
10100000
00000101
10101000
00000000
00010101
10100000
00000000
01010101
10000000
00000001
01010101
00000000
00000101
01010101
00000000
00010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010000
01010101
01010101
01000010
01010100
00010101
00001010
01010100
00000000
00101010
01010100
00101000
10101010
01010100
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00000010
10000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000000
00000101
01010101
10101010
10000001
01010101
10101010
00000001
01010101
10101000
00000101
01010101
10101000
00000101
01010101
10100000
00000101
01010101
10101000
00000000
00010101
10101010
00000000
00000101
10000000
00000000
00000101
00000000
00000000
00010101
00000000
00000101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01000001
01000000
01010101
00000000
00001010
01010101
00001010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
10101010
10101010
01000000
00000000
00000000
01000000
00000000
00000000
01000000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00001010
00000101
01010101
10101010
10000000
01010101
10101010
10100000
00010101
10101010
10000000
00010101
10101000
00000000
00010101
10000000
00000001
01010101
10000000
00000101
01010101
10100000
00010101
01010101
00000000
00000001
01010101
00000000
00000000
01010101
00000000
00000000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01000000
00000000
01010101
00000010
00000010
01010100
00101010
10101010
01010000
10101010
10101010
00000010
10101010
10101010
00000000
10101010
10101000
00000000
00000000
10101000
00000000
00000000
00000000
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
00000000
10000001
01010101
10101010
10100000
00010101
10101010
10101000
00000101
10101010
10000000
00000101
10000000
00000000
00000101
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010100
00000001
01010101
01000000
10100000
01010000
00001010
10101010
00000010
10101010
10101010
00000000
10101010
10101010
00000000
00101010
10101010
01000000
00000010
10000000
01010000
00000000
10000000
01010101
00000000
00000000
01010101
01000000
00000001
01010101
01010000
00000001
01010101
01010101
00000001
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010000
00000000
10101000
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10101010
01010100
00001010
00000010
01010101
00001000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00010101
01010101
01000000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
10000000
00000000
01010101
10101010
10100000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
00000010
10101000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
01000000
00000000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
01000000
00000000
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010100
00101000
00101010
01010100
00000000
00000010
01010100
00000000
00000000
01010100
00000000
00000000
01010100
00000001
01000000
01010100
00010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10000000
00010101
01010101
10100000
00010101
01010101
10101010
10000001
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101000
00000101
00001010
10000000
00000101
00000000
00000000
00010101
00000000
00000000
01010101
00000000
00000001
01010101
01000000
00000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010000
00101010
01010101
01000000
10101010
01010101
00000010
10101010
01010100
00000000
00101010
01010000
00000000
00101010
01010000
00000000
00001010
01010000
00000000
00001010
01010000
01010101
00000010
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000000
00010101
01010101
10101000
00000000
01010101
10100000
00000000
01010101
10101000
00000000
01010101
10101010
00000101
01010101
10101010
10000001
01010101
10101010
10100000
01010101
10101010
10100000
00010101
10101000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000000
00010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001000
00100001
01010101
01001000
00100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01001010
00000101
01010101
00101010
10100000
01010101
00101010
10101010
00010101
01001010
00001010
00010101
01010010
00010010
10000101
01010100
01010010
10000101
01010100
01010010
10000101
01010010
01010010
10000101
01001010
00001010
00010101
00101010
10101010
00010101
00101010
10100000
01010101
01001010
00000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01001010
00000000
00000000
01001010
00000000
00000001
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
00000001
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
01001010
00000000
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00000000
00000000
00001010
00001010
10101010
01001010
00001010
10101010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
10101010
00001010
01001010
10101010
00001010
01001010
00000000
00001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010100
00000000
00010101
01010100
10101010
00000000
00000000
10101010
00001010
10101010
10100000
00001010
10101010
10100000
00001010
00000000
10101010
00001010
00010100
10101010
00001010
00010100
00000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
00000001
00100001
00000000
10101000
00100000
10101010
00000001
00100001
00000000
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000000
10100001
01001010
10100000
10100001
00001010
00101000
10100000
10001010
00101000
10100010
00001010
00001010
10100000
01001010
00000010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10000000
10000101
01010010
10000101
01010101
00000010
10101010
00000000
10101000
10101010
10001010
00000000
00000010
10000000
01010010
00000010
10000101
01010010
10101010
10000101
01010000
10101010
00000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10000101
01010101
00000010
10101000
00000000
10100010
10101000
10101010
00000010
10000000
00000000
01010010
10000000
01010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
00001010
00101000
10100000
10100010
00101000
10001010
00000010
10101010
10000000
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
10101000
01010100
10101010
00001010
00010010
10000000
01010010
10001010
00010101
01010100
10101000
01010101
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01000001
01001010
10100001
00101000
01001010
10100001
00101000
01010000
00000101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100000
01010101
01010101
00101010
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00101010
01010101
01010101
00100000
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
10101000
01010101
01010101
00001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
00001000
01010101
01010101
10101000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010010
10000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010100
10000101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010100
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
00000000
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000001
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01000101
01001010
10100001
00100001
01000000
00000001
00100001
00101010
10100001
00100001
00101000
00101000
01000101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10100001
01010101
01000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
01001000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000000
00010101
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101000
00000001
01010101
00101010
10100001
01010101
01000000
10100001
01010101
00101010
10100001
01010101
00000000
00000000
00000101
01010010
10101010
10000101
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
01001010
10100001
01010101
00001000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01010010
10000000
00000101
01010010
10000000
00000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
01001010
10101000
01010101
01001010
00001000
01010101
01001010
00101000
01010101
01001010
10100001
01010101
01001010
00101000
01010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000101
01010101
00101010
10100001
01010101
00101010
10100001
01010101
00000000
00000000
00000101
01010010
10101010
10000101
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000001
01010101
01001010
10101000
01010101
01001010
00001000
01010101
01001010
00101000
01010101
01001010
10100000
01010101
01001010
00101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101000
00100001
01010101
00101000
10100001
01010101
00101010
10000001
01010101
00101000
10100001
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000001
01010101
01001010
10101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
01001010
10100001
01010101
00001000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000000
00010101
01010010
10101010
00010101
01010000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101000
00000101
01010101
00101010
10100001
01010101
00000000
10100001
01010101
00101010
10100001
01010101
01000000
00000000
00000101
01010010
10100010
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010000
00000000
00000001
01010101
01010010
10101000
01010101
01010010
00001000
01010101
01010010
10101000
01010101
01010010
10000000
01010101
01010010
10000001
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101000
00000101
01010101
00101010
00010101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
01000000
00000000
00000101
01001010
00100010
10000101
01001010
00100010
10000101
01001010
00100010
10000101
01001010
10001010
10000101
01000000
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101000
00000101
01010101
00101010
00010101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
01000000
00000000
00000101
01001010
00100010
10000101
01001010
00100010
10000101
01001010
00100010
10000101
01001010
10001010
10000101
01000000
00000000
00000101
01010101
00101010
10100001
01010101
00101000
00100001
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000000
00100001
01001010
10100000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101010
10101000
01000101
00101000
00101000
00100001
01000001
01000000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000001
10101010
10101010
10101000
00100000
00000000
00001000
00100010
00010100
10001000
00100010
10000100
10001000
00100010
10100000
10001000
00100010
10101000
10001000
00100010
10101010
10001000
00100010
10101010
10001000
00100010
10101000
10001000
00100010
10100000
10001000
00100010
10000100
10001000
00100010
00010100
10001000
00100000
00000000
00001000
10101010
10101010
10101000
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010000
01010010
01010101
01001010
00010000
01010101
01001010
00001010
01010101
01010000
00101010
01010101
01010100
10100000
01010101
00000010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000010
10000101
01010101
01010100
10100000
01010101
01010000
00101010
01010101
01001010
00001010
01010101
01001010
00010000
01010101
01010000
01010010
01010101
01010101
01010010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
00000101
01010101
00000100
10100001
01010101
10100000
10100001
01010101
10101000
00000101
01010101
00001010
00010101
01010101
01010010
10000000
01010101
01010010
10001010
00010101
01010010
10001010
00010101
01010010
10000000
01010101
00001010
00010101
01010101
10101000
00000101
01010101
10100000
10100001
01010101
00000100
10100001
01010101
10000101
00000101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
00001010
01010101
01010100
10101010
01010101
01010010
10100000
01010101
01001010
00000100
01010101
01001010
00010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
01001010
00010100
01010101
01001010
00000100
01010101
01010010
10100000
01010101
01010100
10101010
01010101
01010101
00001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100000
01010101
01010101
10101010
00010101
01010101
10101010
10000101
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10000101
01010101
10101010
00010101
01010101
10100000
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10001000
01000000
00001010
00001000
00101010
10101000
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00101010
10101000
01001000
01000000
00001010
00001000
01010101
01010010
10001000
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01101000
01010101
01010101
01011010
00010101
01010100
00010010
00010101
01010010
10000010
00010101
01000100
10000010
10000101
00100000
10100000
10000101
00101000
00100000
10000101
01001000
00100000
10000101
00101000
00100000
10000101
00100000
10100000
10000101
01000100
10000010
10000101
01010010
10000010
00010101
01010100
00010010
00010101
01010101
01011010
00010101
01010101
01101000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10100001
01010010
10101010
10101000
01010010
10101010
00000000
01010010
10101010
00000101
01010010
00001010
10000101
01010000
00001010
10000001
01010101
01010010
10100001
01010101
01010010
10100001
01010101
01010000
10000001
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010001
01010001
01001010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
10001000
00001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
01000101
00010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010001
01010001
00101010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
00001000
00001000
00100000
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
01000101
01010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
/C-OSD/arducam-osd/Tools/OSD_SA_v6.mcm
0,0 → 1,16385
MAX7456
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00001010
10100000
00010101
00101000
00101000
00010101
00100000
00101000
00010101
00000000
10100000
00010101
00000010
10000000
00010101
00001010
00000000
00010101
00101010
10101000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00010101
00101010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00001010
10100000
00010101
00000000
00101000
00010101
00000000
00101000
00010101
00101010
10100000
00010101
00000000
00000000
00000000
00000000
00101010
10000000
01010100
00101000
10100000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
00101000
01010100
00101000
10100000
01010100
00101010
10000000
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01001010
01010101
01010100
00101010
01010101
01010010
10101010
01010101
01001010
10000000
01010101
00101000
00010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010100
01010010
10000101
01010010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10100001
01010101
01010101
10101000
00010101
01010101
10101010
10000101
01010101
00000010
10100001
01010101
01010100
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010010
10000101
00010101
01010010
10000101
10000101
01010010
10000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
00101010
10101010
10101000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
00000101
01000001
10000000
10100001
00101000
10000000
00001000
00101000
10000000
00000010
10000001
10100000
00000010
10000101
10100000
00001000
00100001
00101000
00100000
00001000
01001010
10000000
00001000
01001010
10000000
00000010
01001010
10100000
00000010
01010000
10101010
00000010
01010100
10001010
10101000
01010100
10000000
00000001
01010100
10000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
00101010
10101010
00000101
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00100001
01010101
01001000
00100001
01010101
01001000
00000000
00000000
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00101000
10101010
10101000
00101000
10100000
00101000
00101000
10101010
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
00010101
01001000
01010100
10000101
01001010
00010100
10100001
01001010
10000010
00000101
01001010
10101000
01010101
01001010
10101000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00101010
10100001
01010100
10000000
00000101
01010010
10000101
01010101
01001000
10000101
01010101
00100000
10000101
01010101
00000000
00000000
00010101
00101010
10101010
10000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010010
10000101
01010010
01010010
10000101
01010100
01010010
10000101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
00010101
01010101
01001010
10000000
01010101
01010010
10101010
01010101
01010100
00101010
01010101
01010101
01001010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010010
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10000101
01010010
10000101
00010101
01010010
10000101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01001010
00010101
01010100
00101000
01010101
00000010
10100001
01010101
10101010
10000101
01010101
10101000
00010101
01010101
10100001
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010100
01010100
10000101
01010101
01010100
10000101
01010101
01010100
10000101
01010100
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010000
10101010
00000101
01010010
00000000
10000101
01010010
00010100
10000101
01010010
00010100
10000101
01010000
00000000
00000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00000000
10100001
01001010
00101010
10100001
01001010
00101010
10100001
01000010
10101010
10000001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00000000
01010000
10101010
10101010
01000010
10101010
10101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10000000
00101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01001010
10101010
10101010
01000010
10101010
10101010
01010000
10101010
10101010
01010100
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
00000000
00000000
10101000
10000000
00000010
10101000
10100000
00001010
10101000
10101010
10101010
10100000
10101010
10101010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000101
10101010
10101010
10000001
10101010
10101010
10100000
10101010
10101010
00001000
10100000
00001010
00001000
10000000
00000010
10101000
00000000
00000000
10101000
00001010
10100000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
00101010
10101000
10101000
10001010
10100010
10100000
10100000
00001010
10000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00001010
10101010
10000001
00000000
00001010
00000001
00000000
00101000
00000001
00000010
10100000
00000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10101010
10000001
00001010
00000010
10000001
00001010
10101010
10000001
00000000
00000000
00000001
00001010
10001010
10000001
00001010
00100010
10000001
00001010
00000010
10000001
00001010
00000010
10000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010000
01010101
01010101
01000010
01010101
01010101
00001010
01010101
01010100
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010000
01001010
10101010
01010001
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01001010
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010101
01010101
10101000
00010101
01010101
10101010
00000101
01010101
10101010
10000001
01010101
00000000
10100000
01010101
00000000
10100000
00010101
00000000
10100001
00000101
10101010
10100001
01000101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010100
00101000
00010101
01010000
10101010
00000101
01000010
10101010
10000001
00001010
10101010
10100000
00000000
00000000
00000000
00101010
10101010
10101000
00101010
10101000
00001000
00101010
10101000
00001000
00100000
00001000
00001000
00100000
00001010
10101000
00100000
00001010
10101000
00100000
00001010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
00010101
01010010
00010100
10000101
01001010
10000010
10100001
01010010
10000100
10100001
01010100
10000101
00100001
01010100
10000101
00100001
01010010
00010100
10000101
01010100
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010100
00010101
01010010
10000010
10000101
01010010
10000010
10000101
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01000010
10000010
10000001
00101010
10101010
10101000
00101010
10101010
10101000
01000010
10000010
10000001
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
00000101
01001010
10101010
00010101
01010010
10101010
10000101
01010000
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
00000101
01001010
10000100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010010
10000010
00010101
01010010
00010010
00010101
01010010
00010010
00010101
01010010
00001000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010010
00001000
00000101
01001000
01010010
00100001
01001000
01010100
10000101
01001000
00000010
00100001
01010010
10101000
01001000
01010100
00000001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01001000
01010101
01010101
00101010
00010101
01010101
01001010
00010101
01010101
01010010
00010101
01010101
01010010
00010101
01010101
01001000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010001
00100001
01010101
01001000
00101000
01010101
00101000
01001010
00010100
10100001
01010010
10000010
10000101
01000000
10101010
00000001
00101010
10101010
10101000
01000000
10101010
00000001
01010010
10000010
10000101
01001010
00010100
10100001
00101000
01010101
00101000
00100001
01010101
01001000
01000101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010010
10100001
01010000
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010101
00000000
10100001
01010100
10101010
10000101
01010100
10101010
10000101
01010101
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
00101010
10000101
01010100
10100010
10000101
01010010
10000010
10000101
01001010
00000010
10000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01001010
10101010
10100001
01010000
00000000
10100001
01010000
01010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01000010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01010010
10101010
10000101
01010010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
10100001
01010000
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010100
10100001
01010101
01010010
10000101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
01010101
00101000
01000001
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
00000000
10000101
01001000
00000100
00100001
00100000
10100010
00001000
00100010
00001010
00001000
00100010
00000010
00001000
00100010
00001010
00001000
00100000
10100010
00100001
00100001
00000100
10000101
01001000
01010101
00000101
01010010
00000000
00100001
01010100
10101010
10000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010010
10101010
00010101
01001010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010101
00000101
01001010
00010000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10100001
01010100
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010100
10101010
10100001
01010100
10101010
10100001
01010101
00001010
00000101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010000
01001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
00001010
00010101
01001010
10101010
00010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10100001
01010101
01001010
10000101
01010101
01001010
10100001
01010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101010
10100001
01001010
10001010
10000101
01010010
10101010
10100001
01010100
10101000
10100001
01010101
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
10101000
01010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010100
10101010
10000101
01010010
10101010
10100001
01001010
10000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
10000000
01010101
01010010
10101010
00010101
01010100
10101010
10000101
01010101
00000010
10100001
01010101
01010100
10100001
01010000
01010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01010010
10101010
00010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
10100001
01010101
01010100
10100001
01010101
01010010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
00101010
10000101
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101010
00010101
01010101
01001010
10000101
01010101
01010010
10100001
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01010010
00010100
10000101
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01010010
10000101
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01010000
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010101
00000101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
00000101
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010101
01001010
10101010
00010101
01001010
10101010
10000101
01001010
00000010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000010
10100001
01001010
10101010
10000101
01001010
10101010
00010101
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
01010101
01001010
10101010
00010101
01001010
10101010
00010101
01001010
00000000
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
00000101
01001010
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
10000000
10100001
01001010
00000000
00000101
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
10100001
01001010
10000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000101
01010101
00101010
10100001
01010101
00101010
10100001
01010101
01000010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010100
00010010
10000101
01010010
10000010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010010
10100001
01001010
00001010
10000101
01001010
00101010
00010101
01001010
10101000
01010101
01001010
10101000
01010101
01001010
10101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01001010
10101010
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10100000
10100001
01001010
10101000
10100001
01001010
00101010
10100001
01001010
00001010
10100001
01001010
00010010
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01001010
10101010
10000101
01001010
00000000
00010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010000
10100001
01001010
00001010
10100001
01001010
00001010
10000101
01001010
10101010
10100001
01010010
10101000
10100001
01010100
00000001
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00010101
01001010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10000101
01001010
10101000
00010101
01001010
00101010
00010101
01001010
00001010
10000101
01001010
00010010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00000000
00000101
01001010
10101010
10000101
01010010
10101010
10100001
01010000
00000000
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00101000
00000101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
00101000
10100001
01001010
00101000
10100001
01001010
10101010
10100001
01010010
10101010
10000101
01010010
10000010
10000101
01010100
00010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000010
10100001
01010101
01001010
10000101
01010101
00101010
00010101
01010100
10101000
01010101
01010010
10100001
01010101
01001010
10000000
00000101
01001010
10101010
10100001
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00010101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00010101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010100
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
01010101
01010010
10101000
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010001
01010100
10100001
01001000
01010010
10101000
00101000
01001010
00001010
10100001
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
01001000
10000101
01010101
01001000
10100001
01010101
01001000
10101000
01010101
01001000
10101010
00010101
01001000
10101010
10000101
01001000
10101010
00010101
01001000
10101000
01010101
01001000
10100001
01010101
01001000
10000101
01010101
01001000
00010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
00001000
00010101
01010101
00101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101000
00101000
01010101
00101000
10100000
01010101
00101010
00000000
01010101
00101000
10100000
01010101
00101000
00101000
01010101
01000000
00000000
00000001
00101000
10001010
10101000
00101000
10000000
10000001
00100010
10000000
10000101
00100010
10000000
10000101
01000000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
10100001
01010101
00101010
00000101
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000000
00000000
00000101
01010010
10100010
10100001
01010010
10001000
10100001
01010010
10001000
10100001
01010010
10000000
10100001
01010100
00000000
00000001
01010101
00101001
01101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
00001010
00010101
01000000
00000000
00010101
01010101
00101010
10000101
01010101
00100000
10000101
01010100
10101010
10100001
01010100
10100000
10100001
01010100
10100000
10100001
01010101
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010100
00000000
00000000
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000000
00000000
00010101
01010010
10101010
10000101
01001010
10000010
10100001
01001010
10000010
10100001
01010010
10101010
10000101
01010100
00000000
00000001
01010100
10101000
00101000
01010100
10101010
00101000
01010100
10101010
10101000
01010100
10100010
10101000
01010100
10100000
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000000
00000000
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10101010
01010101
01010010
10000000
00010101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000001
01010101
01001010
10101000
01010101
01001010
10101000
01010101
01010000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00101010
10101000
01010101
01000010
10000001
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010100
00000100
00010101
01010100
10100010
10000101
01010100
10101010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000000
00000101
01010101
01001010
10100001
01010101
01001000
00001000
01010101
01001000
00101000
01010101
01001010
10100000
01010101
01001010
00101000
01010101
01010000
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
01000000
00000001
01010101
00101010
10101000
01010101
00100000
00000001
01010101
00101010
10101000
01010101
01000000
00001000
01010101
00101010
10101000
01010101
01000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000001
01010101
01001010
10101000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
01000001
00000000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00000000
00000001
01010101
00101010
10101000
01010101
00100000
00101000
01010101
00101010
10000001
01010101
00101000
10100001
01010101
00101000
00101000
01010101
01000001
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01000000
01010101
00101010
00101010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00101000
10001010
00010101
00000000
00000000
00010101
01010100
10101010
10000101
01010010
10000000
10100001
01010010
10101010
10100001
01010010
10000000
10100001
01010000
00000000
00000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010000
00000000
01001000
01010000
10100000
01001000
01010010
00001000
00000000
00010010
00001000
00101010
00010010
00001000
00000000
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
00101010
00010000
00000000
00101010
00010010
00001000
00101010
00010010
00001000
01000000
01010010
00100000
01001000
01010010
10000000
01001000
01010010
00100000
01001000
01010010
00001000
01001000
01010010
00001000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010000
00000000
01001000
01010010
00000000
01001000
01010010
00000000
01001000
01010010
00000000
00000000
00010010
10101000
00101010
00010000
00000000
00000000
00010000
10100000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010010
00001000
00101010
00010000
10100000
00101010
00010000
00000000
01000000
01010010
10101000
01001000
01010010
00000000
01001000
01010010
10101000
01001000
01010000
00001000
01001000
01010010
10101000
01001000
01010000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010100
00010101
00101000
01010010
10000101
00101010
00001010
10000101
00101010
10101010
10000101
00101000
10100010
10000101
00101000
10100010
10000101
00101000
00000010
10000101
00101000
01010010
10000101
01000001
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010000
01010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
00101000
01001010
00010101
01001010
00101000
01010101
01001010
10101000
01010101
01010010
10100001
01010101
01010100
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000101
01010101
01010010
10100001
01010101
01001010
10101000
01010101
01001000
00001000
01010101
00101000
00001010
00010101
00101010
10101010
00010101
00101000
00001010
00010101
00101000
01001010
00010101
01000001
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01000000
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00000000
10101010
01010000
00000000
10101010
01010000
00000000
10101010
01010100
00000000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
10101010
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10000000
00010101
01010101
10101010
00000001
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10101000
00000000
00000101
10101000
00000000
00010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010100
00000000
01010101
00000000
00101010
01010101
00000000
00001010
01010101
00000000
00101010
01010101
01010000
10101010
01010101
01000010
10101010
01010101
00001010
10101010
01010100
00001010
10101010
01010100
00000000
00101010
01010100
00000000
00000000
01010100
00000000
00000000
01010101
01010100
00000000
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101000
00000101
01010101
10101010
00000001
01010101
10101010
10000000
01010101
10101000
00000000
00010101
10101000
00000000
00000101
10100000
00000000
00000101
10100000
00000000
00000101
10000000
01010101
00000101
00000000
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010100
00000010
01010101
01010100
00001010
01010101
01000010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010000
00000010
10100000
01010100
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010000
00000001
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
00000001
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
10101000
00101000
00010101
10000000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000001
01000000
00010101
00010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
00000000
00000010
01010000
00001010
10101010
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10000000
01010100
00000000
00000000
01010100
00000000
00000000
01010101
00000000
00000001
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000101
01010101
00101010
00000000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
10101010
10101000
00010101
10000000
10100000
00010101
00000000
00100000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01010100
00000001
01010101
01010101
00000001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010100
00101010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
00101010
10101010
01010000
00000000
00000000
01010000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
01000000
00010101
01010101
00001010
00000001
01010101
10101010
10100000
00000101
10101010
10101010
10000000
10101010
10101010
00000000
10101010
10101000
00000000
00000010
10000000
00000001
00000010
00000000
00000101
00000000
00000000
01010101
01000000
00000001
01010101
01000000
00000101
01010101
01000000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01000010
00000000
01010100
00001010
10101010
01010000
00101010
10101010
01010000
00000010
10101010
01010000
00000000
00000010
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
00000000
00000001
01010101
10000000
10000000
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
10000000
00101010
10101010
00000000
00101010
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000001
01010101
01010000
10100000
01010101
00000010
10101010
01010100
00001010
10101010
01010100
00000010
10101010
01010100
00000000
00101010
01010101
01000000
00000010
01010101
01010000
00000010
01010101
01010100
00001010
01010101
01000000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000001
01000001
01010101
10100000
00000000
01010101
10101010
10100000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101010
00000101
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000001
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010000
00000000
01010101
01000010
10101010
01010101
01000000
10101010
01010101
01010000
00101010
01010101
01010000
00101010
01010101
01010000
00001010
01010100
00000000
00101010
01010000
00000000
10101010
01010000
00000000
00000010
01010100
00000000
00000000
01010101
01010000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000101
01010101
01010101
10000001
01010101
01010101
10100000
01010100
00010101
10101000
00000000
00010101
10101010
00101000
00010101
10101010
10100000
00010101
10101010
10100000
01010101
10101010
10100000
01010101
10101010
10100000
01010101
00000010
10000000
01010101
00000000
00000001
01010101
00000000
00000001
01010101
00000000
00000001
01010101
01010100
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010100
00101010
01010101
01010100
00101010
01010101
01010100
00101010
01010000
00000000
00101010
01010000
00000000
10101010
01010000
00001010
10101010
01010100
00000000
10101010
01010101
00000000
00101010
01010101
01000000
00001010
01010101
01010000
00000000
01010101
01010100
00000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00000000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00010101
01010101
10101000
00000000
00000101
10101010
00000000
00000101
10101010
10100000
00000101
10101000
00000000
00010101
10100000
00000000
01010101
10000000
00000001
01010101
00000000
00000101
01010101
00000000
00010101
01010101
00000000
01010101
01010101
00000001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010000
01010101
01010101
01000010
01010100
00010101
00001010
01010100
00000000
00101010
01010100
00101000
10101010
01010100
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00000010
10000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00000000
01010101
01000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000000
00000101
01010101
10101010
10000001
01010101
10101010
00000001
01010101
10101000
00000101
01010101
10101000
00000101
01010101
10100000
00000101
01010101
10101000
00000000
00010101
10101010
00000000
00000101
10000000
00000000
00000101
00000000
00000000
00010101
00000000
00000101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01000001
01000000
01010101
00000000
00001010
01010101
00001010
10101010
01010100
00101010
10101010
01010100
00101010
10101010
01010000
10101010
10101010
01010000
10101010
10101010
01000000
00000000
00000000
01000000
00000000
00000000
01000000
00000000
00000000
01010000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00010101
01010101
00001010
00000101
01010101
10101010
10000000
01010101
10101010
10100000
00010101
10101010
10000000
00010101
10101000
00000000
00010101
10000000
00000001
01010101
10000000
00000101
01010101
10100000
00010101
01010101
00000000
00000001
01010101
00000000
00000000
01010101
00000000
00000000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01000000
00000000
01010101
00000010
00000010
01010100
00101010
10101010
01010000
10101010
10101010
00000010
10101010
10101010
00000000
10101010
10101000
00000000
00000000
10101000
00000000
00000000
00000000
01010000
00000000
00000000
01010101
01000000
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
00000000
10000001
01010101
10101010
10100000
00010101
10101010
10101000
00000101
10101010
10000000
00000101
10000000
00000000
00000101
00000000
00000000
00000101
00000000
00000001
01010101
00000001
01010101
01010101
00000001
01010101
01010101
00000000
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010100
00000001
01010101
01000000
10100000
01010000
00001010
10101010
00000010
10101010
10101010
00000000
10101010
10101010
00000000
00101010
10101010
01000000
00000010
10000000
01010000
00000000
10000000
01010101
00000000
00000000
01010101
01000000
00000001
01010101
01010000
00000001
01010101
01010101
00000001
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
01010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00010101
10101010
10101000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
00000000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
01010000
00000000
10101000
01010000
10101010
10101010
01010000
00101010
10101010
01010100
00101010
10101010
01010100
00001010
00000010
01010101
00001000
00000000
01010101
00000000
00000000
01010101
00000000
00000000
01010101
01000000
00010101
01010101
01000000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
00000001
01010101
01010101
00000001
01010101
01010101
10000000
00000000
01010101
10101010
10100000
00000101
10101010
10101010
00000101
10101010
10101000
00000101
00000010
10101000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
01000000
00000000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
01000000
00000000
01010101
00001010
10101010
01010101
00001010
10101010
01010101
00001010
10101010
01010100
00101000
00101010
01010100
00000000
00000010
01010100
00000000
00000000
01010100
00000000
00000000
01010100
00000001
01000000
01010100
00010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10000000
00010101
01010101
10100000
00010101
01010101
10101010
10000001
01010101
10101010
10101000
00010101
10101010
10101010
00000101
10101010
10101000
00000101
00001010
10000000
00000101
00000000
00000000
00010101
00000000
00000000
01010101
00000000
00000001
01010101
01000000
00000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
01010101
01010000
00101010
01010101
01000000
10101010
01010101
00000010
10101010
01010100
00000000
00101010
01010000
00000000
00101010
01010000
00000000
00001010
01010000
00000000
00001010
01010000
01010101
00000010
01010101
01010101
00000000
01010101
01010101
01000000
01010101
01010101
01000000
01010101
01010101
01010000
01010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00000000
00010101
01010101
10101000
00000000
01010101
10100000
00000000
01010101
10101000
00000000
01010101
10101010
00000101
01010101
10101010
10000001
01010101
10101010
10100000
01010101
10101010
10100000
00010101
10101000
00000000
00010101
00000000
00000000
00010101
00000000
00000000
00010101
00000000
00010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001000
00100001
01010101
01001000
00100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010100
00101000
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
00101000
00010101
01010010
10101010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01001010
00000101
01010101
00101010
10100000
01010101
00101010
10101010
00010101
01001010
00001010
00010101
01010010
00010010
10000101
01010100
01010010
10000101
01010100
01010010
10000101
01010010
01010010
10000101
01001010
00001010
00010101
00101010
10101010
00010101
00101010
10100000
01010101
01001010
00000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101000
00000000
00101000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00100000
00101000
00001000
00100000
00101000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
00000000
10101000
00101000
00000000
00101000
00101000
00000000
00101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
00000000
10101010
00000000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00101010
10101010
10101000
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01001010
00000000
00000000
01001010
00000000
00000001
01001010
00001010
10100001
01001010
00001010
10100001
01001010
00000000
00000001
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01001010
00000000
10100001
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
01001010
00000000
10100001
01010010
10101010
10000101
01010100
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00000000
00000000
00001010
00001010
10101010
01001010
00001010
10101010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
00001010
00001010
01001010
10101010
00001010
01001010
10101010
00001010
01001010
00000000
00001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01001010
00010101
01001010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010101
01010101
00010101
01010100
00000000
00010101
01010100
10101010
00000000
00000000
10101010
00001010
10101010
10100000
00001010
10101010
10100000
00001010
00000000
10101010
00001010
00010100
10101010
00001010
00010100
00000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
00000000
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
00000001
00100001
00000000
10101000
00100000
10101010
00000001
00100001
00000000
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
10000100
10100001
01001010
10000000
10100001
01001010
10100000
10100001
00001010
00101000
10100000
10001010
00101000
10100010
00001010
00001010
10100000
01001010
00000010
10100001
01001010
00010000
10100001
01001010
00010100
10100001
01010000
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010100
10101010
00010101
01010010
10101010
10000101
01010010
10000000
10000101
01010010
10000101
01010101
00000010
10101010
00000000
10101000
10101010
10001010
00000000
00000010
10000000
01010010
00000010
10000101
01010010
10101010
10000101
01010000
10101010
00000101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010010
10000000
00010101
01010010
10000101
01010101
00000010
10101000
00000000
10100010
10101000
10101010
00000010
10000000
00000000
01010010
10000000
01010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
00000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
00001010
00101000
10100000
10100010
00101000
10001010
00000010
10101010
10000000
01010010
10000010
10000101
01010010
10000010
10000101
01010010
10000010
10000101
01010100
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
00000000
10101000
01010100
10101010
00001010
00010010
10000000
01010010
10001010
00010101
01010100
10101000
01010101
01010101
00100001
01010101
01010101
01000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
00101010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10101000
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00000000
00000000
01001010
10101010
10101010
01001010
10101010
10101010
01000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01000000
00001010
00010101
01010101
10101010
00010101
01010101
10101010
00010101
01010101
00000000
00010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00010101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01010101
01010010
10000101
01000001
01001010
10100001
00101000
01001010
10100001
00101000
01010000
00000101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10101001
01010101
01010000
00101000
01010101
00001000
00101000
01010101
00101010
10101000
01010101
01001010
10100001
01010101
01010000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
00000000
00010101
01010010
10101010
10000101
01010010
10101010
10000101
01010100
10101010
00010101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00100001
01010101
01010101
00100000
01010101
01010101
00101010
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
00101010
01010101
01010101
00100000
01010101
01010101
00100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
01010101
01010101
10101000
01010101
01010101
00001000
01010101
01010101
01001000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001000
01010101
01010101
00001000
01010101
01010101
10101000
01010101
01010101
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010101
01010101
00101010
00010101
01010101
01000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10100001
01010101
01010010
10000101
01010101
01010010
00010101
01010101
01010100
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000001
01010101
01010100
10101000
01010101
01010101
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010100
10000101
01010101
01010010
10000101
01010101
01001010
10000101
01010101
00101010
10000101
01010101
01001010
10000101
01010101
01010010
10000101
01010101
01010100
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
01010101
01001010
10101010
01010101
01001010
10101010
01010101
01001010
00000000
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01001010
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
10100001
01010101
01010100
10100001
01010101
01010100
10100001
01010101
00000000
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000001
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01000101
01001010
10100001
00100001
01000000
00000001
00100001
00101010
10100001
00100001
00101000
00101000
01000101
00101000
00101000
01010101
00101000
00101000
01010101
00101010
10100001
01010101
01000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000101
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01000000
00100000
00000101
00101010
10101010
10100001
00100000
00100000
00100001
00100010
00100010
00000001
00100000
00100000
00101000
00101010
10101010
00100001
00101000
00000000
00100001
01000000
00000010
00100001
01010101
00100010
00100001
01010100
00100010
00100001
01010010
00100010
00100001
01000010
00100010
00100001
00100010
00100010
00100001
00100010
00100010
00101000
01000100
01000100
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000001
01000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101000
00101000
01010101
00101000
00101000
01010101
01001010
10100001
01000001
01010010
10000101
00101000
01010100
00010101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01010000
00000101
00100001
01001010
10100001
00100001
00101000
00101000
00100001
00101000
00101000
00100001
00101010
10101000
00100001
00101000
00101000
00100001
01000000
00000001
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000101
01010101
01001010
10100001
01010101
00101000
00000101
01010101
00101000
01010101
01010101
00101000
00000101
01000001
01001010
10100001
00101000
01010000
00000101
00100001
01000000
00000101
00100001
00101010
10100001
00100001
00101000
00101000
00100001
00101010
10000000
00100001
00101000
00101000
00100001
00101010
10100001
00100001
01000000
00000101
00100001
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01000001
01010101
00101000
00101000
01010101
00101010
10101000
01010101
00100010
10001000
01010101
00100000
00001000
01000101
01000000
00000000
00100001
01001010
10100000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101010
10101000
01000101
00101000
00101000
00100001
01000001
01000000
00100001
00101000
00101000
00100001
00101000
00101000
01000101
00101000
00101000
01010101
01001010
10100001
01010101
01010010
10000101
01010101
01010100
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00100000
00000000
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
00000000
00000101
01001010
10101010
10100001
00101010
00000000
10101000
00101000
00000000
00101000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00100000
10101010
00001000
00101000
00000000
00101000
00101010
00000000
10101000
01001010
10101010
10100001
01010000
00000000
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01001010
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001000
01010101
01010101
01001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
10101010
10101010
10000101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10100001
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
10101000
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000000
10101010
10101010
10101010
00000000
00000000
00000000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
00100001
01010101
01010101
10100001
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000000
00000000
00000001
10101010
10101010
10101000
00100000
00000000
00001000
00100010
00010100
10001000
00100010
10000100
10001000
00100010
10100000
10001000
00100010
10101000
10001000
00100010
10101010
10001000
00100010
10101010
10001000
00100010
10101000
10001000
00100010
10100000
10001000
00100010
10000100
10001000
00100010
00010100
10001000
00100000
00000000
00001000
10101010
10101010
10101000
00000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010100
01010101
01010101
01010010
01010101
01010000
01010010
01010101
01001010
00010000
01010101
01001010
00001010
01010101
01010000
00101010
01010101
01010100
10100000
01010101
00000010
10000101
01010100
10100010
10000101
01010100
10100010
10000101
01010101
00000010
10000101
01010101
01010100
10100000
01010101
01010000
00101010
01010101
01001010
00001010
01010101
01001010
00010000
01010101
01010000
01010010
01010101
01010101
01010010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00010101
01010101
01010101
10000101
01010101
01010101
10000101
00000101
01010101
00000100
10100001
01010101
10100000
10100001
01010101
10101000
00000101
01010101
00001010
00010101
01010101
01010010
10000000
01010101
01010010
10001010
00010101
01010010
10001010
00010101
01010010
10000000
01010101
00001010
00010101
01010101
10101000
00000101
01010101
10100000
10100001
01010101
00000100
10100001
01010101
10000101
00000101
01010101
10000101
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
00001010
01010101
01010100
10101010
01010101
01010010
10100000
01010101
01001010
00000100
01010101
01001010
00010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
00101000
01010100
01010101
01001010
00010100
01010101
01001010
00000100
01010101
01010010
10100000
01010101
01010100
10101010
01010101
01010101
00001010
01010101
01010101
01010000
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
00000101
01010101
01010101
10100000
01010101
01010101
10101010
00010101
01010101
10101010
10000101
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10101000
01010101
10101010
10100001
01010101
10101010
10100001
01010101
10101010
10000101
01010101
10101010
00010101
01010101
10100000
01010101
01010101
00000101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000001
01010101
01010101
00101000
01010101
01010100
10101000
01010101
01010010
10001000
01000000
00001010
00001000
00101010
10101000
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00100000
10100001
01001000
00101010
10101000
01001000
01000000
00001010
00001000
01010101
01010010
10001000
01010101
01010100
10101000
01010101
01010101
00101000
01010101
01010101
01000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010001
01010101
01010101
01101000
01010101
01010101
01011010
00010101
01010100
00010010
00010101
01010010
10000010
00010101
01000100
10000010
10000101
00100000
10100000
10000101
00101000
00100000
10000101
01001000
00100000
10000101
00101000
00100000
10000101
00100000
10100000
10000101
01000100
10000010
10000101
01010010
10000010
00010101
01010100
00010010
00010101
01010101
01011010
00010101
01010101
01101000
01010101
01010101
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
00000000
00000001
00101010
10101010
10101000
01001010
10101010
10100001
01001010
00000000
10100001
01001010
00010100
10100001
01001010
00010100
10100001
01010010
10000010
10000101
01010100
10101010
00010101
01010101
00101000
01010101
01010101
00101000
01010101
01010100
10101010
00010101
01010010
10000010
10000101
01001010
00010100
10100001
01001010
00010100
10100001
01001010
00000000
10100001
01001010
10101010
10100001
00101010
10101010
10101000
01000000
00000000
00000001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010101
01010101
01010010
00010101
01010101
01010010
10000101
01010101
01010010
10100001
01010101
01010010
10101000
01010101
01010010
10101010
00010101
01010010
10101010
10000101
01010010
10101010
10100001
01010010
10101010
10101000
01010010
10101010
00000000
01010010
10101010
00000101
01010010
00001010
10000101
01010000
00001010
10000001
01010101
01010010
10100001
01010101
01010010
10100001
01010101
01010000
10000001
01010101
01010101
00010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010000
01010001
01010001
01001010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
10001000
00001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
00100000
10001000
01001000
01000101
00010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01000000
01010001
01010001
00101010
00001000
01001000
00100000
10001010
00101000
00100000
10001000
10001000
00100000
10001000
10001000
00101010
00001000
00001000
00100000
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
00100001
01001000
01001000
01000101
01010001
01010001
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
10101010
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
01010101
/C-OSD/arducam-osd/Tools/TERATERM.INI
0,0 → 1,333
[Tera Term]
; Tera Term version number
Version=
 
; Language (English/Japanese/Russian)
Language=English
 
; Port type (serial/tcpip)
Port=
 
; Window positions
VTPos=-32768,-32768
TEKPos=-32768,-32768
 
; Terminal size
TerminalSize=80,24
; Terminal size=window size (on/off)
TermIsWin=off
; Auto window resizing option (on/off)
AutoWinResize=off
 
; Convert a received new-line (CR) char to CR/CRLF
CRReceive=CR
; New-line code to be transmitted (CR/CRLF)
CRSend=CR
 
; Terminal ID
TerminalID=VT100
 
; Local echo (on/off)
LocalEcho=off
 
; Answerback
Answerback=
 
; Auto window switching (VT<->TEK; on/off)
AutoWinSwitch=off
 
; Kanji code to be received (SJIS/EUC/JIS)
KanjiReceive=SJIS
; JIS Katakana code to be received (7/8)
KatakanaReceive=8
 
; Kanji code to be transmitted (SJIS/EUC/JIS)
KanjiSend=SJIS
; JIS Katakana to be transmitted (7/8)
KatakanaSend=8
; Kanji-in sequence to be transmitted (@/B)
KanjiIn=B
; Kanji-out sequence to be transmitted (J/B)
KanjiOut=J
 
; Russian code set used in host
RussHost=Windows
; Russian code set used in PC
RussClient=Windows
 
; Window title
Title=Tera Term
 
; Cursor shape (block/vertical/horizontal)
CursorShape=block
 
; Hide title & menu bars and enable popup menu (on/off)
HideTitle=off
; Hide menu bar and enable popup menu (on/off)
PopupMenu=off
 
; Full color emulation (on/off)
FullColor=off
 
; Enable scroll buffer (on/off)
EnableScrollBuff=on
; Scroll buffer size
ScrollBuffSize=100
 
; Text and background colors
; for Normal characters
VTColor=0,0,0,255,255,255
; for Bold characters
VTBoldColor=0,0,255,255,255,255
; for Blink characters
VTBlinkColor=255,0,0,255,255,255
; for TEK window
TEKColor=0,0,0,255,255,255
 
; TEK color emulation (on/off)
TEKColorEmulation=off
 
; Font
VTFont=Terminal,0,13,1
; Bold style font (on/off)
EnableBold=off
; Font for TEK window
TEKFont=Terminal,0,8,1
 
; Russian code set of the font
RussFont=Windows
 
; Backspace key (BS/DEL)
BSKey=BS
; transmit DEL by Delete key (on/off)
DeleteKey=off
 
; Russian code set used in the keyboard driver
RussKeyb=Windows
 
; Meta key (on/off)
MetaKey=off
 
; Serial port parameters
; Port number
ComPort=1
; Baud rate
BaudRate=9600
; Parity (even/odd/none)
Parity=none
; Data (7/8)
DataBit=8
; Stop (1/2)
StopBit=1
; Flow control (x/hard/none)
FlowCtrl=none
; Transmit delay per character (in msec)
DelayPerChar=0
; Transmit delay per line (in msec)
DelayPerLine=0
 
; TCP/IP parameters
; TCP port#
TCPPort=23
; Telnet flag (on/off)
Telnet=on
; Telnet terminal type
TermType=vt100
; Auto window closing option (on/off)
AutoWinClose=on
; History list of hosts
HistoryList=off
 
; Binary flag for Send File and Log (on/off)
TransBin=off
; Log append (on/off)
LogAppend=on
 
; XMODEM option (checksum/crc/1k)
XmodemOpt=checksum
; Binary flag for XMODEM Receive and ZMODEM Send (on/off)
XmodemBin=on
 
; Default directory for file transfers
FileDir=
 
;------ special options (see Tera Term help)
 
; C1 (8-bit) control characters
Accept8BitCtrl=on
 
; Wrong kanji-out ^[(H (Japanese only)
AllowWrongSequence=off
 
; Auto file renaming for downloading
AutoFileRename=on
 
; Auto text copying
AutoTextCopy=on
 
; Back wrap
BackWrap=off
 
; Beep by BEL
Beep=on
 
; Beep on connection & disconnection
BeepOnConnect=off
 
; B-Plus auto receive
BPAuto=off
 
; Escape all control characters in B-Plus
BPEscCtl=off
 
; B-Plus log
BPLog=off
 
; "Disconnect?" warning
ConfirmDisconnect=on
 
; Control characters in kanji (Japanese only)
CtrlInKanji=on
 
; Display all characters (debug mode)
Debug=off
 
; Delimters for word selection
; (compatible with earlier versions of Tera Term)
; DelimList=$20
; DelimDBCS=off
DelimList=$20!"#$24%&'()*+,-./:;<=>?@[\]^`{|}~
DelimDBCS=on
 
; Popup menu
EnablePopupMenu=on
 
; "Show menu bar" command
EnableShowMenu=on
 
; Enable the status line
EnableStatusLine=on
 
; Enable IME / inline input (Japanese only)
IME=on
IMEInline=on
 
; Kermit log
KmtLog=off
 
; Language selection
LanguageSelection=on
 
; Max scroll buffer size
MaxBuffSize=
 
; Max serial port number
MaxComPort=12
 
; Nonblinking cursor
NonblinkingCursor=off
 
; Delay for pass-thru printing (in secs)
PassThruDelay=3
 
; Direct pass-thru printing
PassThruPort=
 
; Printer font
PrnFont=
 
; Page margins for printing
; (left, right, top and bottom in 1/100 inches)
PrnMargin=50,50,50,50
 
; Quick-VAN log
QVLog=off
 
; Quick-VAN window size
QVWinSize=8
 
; Russian code set of printer font
RussPrint=Windows
 
; Max lines per one jump scroll
ScrollThreshold=12
 
; Text selection on window activation
SelectOnActivate=on
 
; Startup macro
StartupMacro=
 
; TEK mouse code
TEKGINMouseCode=32
 
; Telnet binary option
TelBin=off
 
; Telnet auto echo
TelEcho=off
 
; Telnet log
TelLog=off
 
; Standard telnet port
TelPort=23
 
; Auto setup for non-telnet
TCPLocalEcho=off
TCPCRSend=
 
; Title format
TitleFormat=5
 
; White & black color conversion
UseTextColor=off
 
; Space between characters (lines)
VTFontSpace=0,0,0,0
 
; Scaling factors for printing (in pixels per inch)
VTPPI=0,0
TEKPPI=0,0
 
; [Window] menu
WindowMenu=on
 
; XMODEM log
XmodemLog=off
 
; ZMODEM auto receive
ZmodemAuto=off
 
; ZMODEM parameters for sending
ZmodemDataLen=1024
ZmodemWinSize=32767
 
; Escape all control characters in ZMODEM
ZmodemEscCtl=off
 
; ZMODEM log
ZmodemLog=off
;------ end of special options
 
;------ Telnet host list
; Max number of hosts is 99.
; You can edit this list in the [Setup] TCP/IP dialog box.
;[Hosts]
; Host name
;Host1=myhost.mydomain
; IP address
;Host2=111.11.1.1
; Host name with option
;Host3=myhost.mydomain /F=myhost.ini
; COM1 port
;Host4=/C=1
; Replay a file
;Host5=/R=readme.txt
 
[Hosts]
Host1=myhost.mydomain
Host2=111.11.1.1
Host3=myhost.mydomain /F=myhost.ini
Host4=/C=1 ;serial port
Host5=/R=readme.txt ;replay a file
/C-OSD/arducam-osd/libraries/AP_Common/AP_Common.cpp
0,0 → 1,17
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_Common.cpp
/// @brief Common utility routines for the ArduPilot libraries.
///
/// @note Exercise restraint adding code here; everything in this
/// library will be linked with any sketch using it.
///
 
#include "AP_Common.h"
 
/C-OSD/arducam-osd/libraries/AP_Common/AP_Common.h
0,0 → 1,255
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
///
/// @file AP_Common.h
/// @brief Common definitions and utility routines for the ArduPilot
/// libraries.
///
 
#ifndef _AP_COMMON_H
#define _AP_COMMON_H
 
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
// ... and remove some of their stupid macros
#undef round
#undef abs
 
// prog_char_t is used as a wrapper type for prog_char, which is
// a character stored in flash. By using this wrapper type we can
// auto-detect at compile time if a call to a string function is using
// a flash-stored string or not
typedef struct {
char c;
} prog_char_t;
 
#include <stdint.h>
#include "include/menu.h" /// simple menu subsystem
#include "c++.h" // c++ additions
//#include "AP_Vector.h"
//#include "AP_Loop.h"
 
// default to AP_Param system, unless USE_AP_VAR is defined
#ifdef USE_AP_VAR
#include "AP_Var.h"
#else
#include "AP_Param.h"
#endif
 
////////////////////////////////////////////////////////////////////////////////
/// @name Warning control
//@{
//
// Turn on/off warnings of interest.
//
// These warnings are normally suppressed by the Arduino IDE,
// but with some minor hacks it's possible to have warnings
// emitted. This helps greatly when diagnosing subtle issues.
//
#pragma GCC diagnostic warning "-Wall"
#pragma GCC diagnostic warning "-Wextra"
#pragma GCC diagnostic warning "-Wlogical-op"
#pragma GCC diagnostic ignored "-Wredundant-decls"
 
// Make some dire warnings into errors
//
// Some warnings indicate questionable code; rather than let
// these slide, we force them to become errors so that the
// developer has to find a safer alternative.
//
//#pragma GCC diagnostic error "-Wfloat-equal"
 
// The following is strictly for type-checking arguments to printf_P calls
// in conjunction with a suitably modified Arduino IDE; never define for
// production as it generates bad code.
//
#if PRINTF_FORMAT_WARNING_DEBUG
# undef PSTR
# define PSTR(_x) _x // help the compiler with printf_P
# define float double // silence spurious format warnings for %f
#else
// This is a workaround for GCC bug c++/34734.
//
// The C++ compiler normally emits many spurious warnings for the use
// of PSTR (even though it generates correct code). This workaround
// has an equivalent effect but avoids the warnings, which otherwise
// make finding real issues difficult.
//
#ifdef DESKTOP_BUILD
# undef PROGMEM
# define PROGMEM __attribute__(())
#else
# undef PROGMEM
# define PROGMEM __attribute__(( section(".progmem.data") ))
#endif
 
# undef PSTR
# define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); \
(prog_char_t *)&__c[0];}))
#endif
 
// a varient of PSTR() for progmem strings passed to %S in printf()
// this gets the gcc __format__ checking right
#define FPSTR(s) (wchar_t *)(s)
 
 
static inline int strcasecmp_P(const char *str1, const prog_char_t *pstr)
{
return strcasecmp_P(str1, (const prog_char *)pstr);
}
 
static inline int strcmp_P(const char *str1, const prog_char_t *pstr)
{
return strcmp_P(str1, (const prog_char *)pstr);
}
 
static inline size_t strlen_P(const prog_char_t *pstr)
{
return strlen_P((const prog_char *)pstr);
}
 
static inline void *memcpy_P(void *dest, const prog_char_t *src, size_t n)
{
return memcpy_P(dest, (const prog_char *)src, n);
}
 
// strlcat_P() in AVR libc seems to be broken
static inline size_t strlcat_P(char *d, const prog_char_t *s, size_t bufsize)
{
size_t len1 = strlen(d);
size_t len2 = strlen_P(s);
size_t ret = len1 + len2;
if (len1+len2 >= bufsize) {
if (bufsize < (len1+1)) {
return ret;
}
len2 = bufsize - (len1+1);
}
if (len2 > 0) {
memcpy_P(d+len1, s, len2);
d[len1+len2] = 0;
}
return ret;
}
 
static inline char *strncpy_P(char *buffer, const prog_char_t *pstr, size_t buffer_size)
{
return strncpy_P(buffer, (const prog_char *)pstr, buffer_size);
}
 
 
// read something the size of a pointer. This makes the menu code more
// portable
static inline uintptr_t pgm_read_pointer(const void *s)
{
if (sizeof(uintptr_t) == sizeof(uint16_t)) {
return (uintptr_t)pgm_read_word(s);
} else {
union {
uintptr_t p;
uint8_t a[sizeof(uintptr_t)];
} u;
uint8_t i;
for (i=0; i< sizeof(uintptr_t); i++) {
u.a[i] = pgm_read_byte(i + (const prog_char *)s);
}
return u.p;
}
}
 
//@}
 
 
///
/// @name Macros
/// @{
 
/// Define a constant string in program memory. This is a little more obvious
/// and less error-prone than typing the declaration out by hand. It's required
/// when passing PROGMEM strings to static object constructors because the PSTR
/// hack can't be used at global scope.
///
#define PROGMEM_STRING(_v, _s) static const char _v[] PROGMEM = _s
 
#define ToRad(x) (x*0.01745329252) // *pi/180
#define ToDeg(x) (x*57.2957795131) // *180/pi
// @}
 
 
////////////////////////////////////////////////////////////////////////////////
/// @name Types
///
/// Data structures and types used throughout the libraries and applications. 0 = default
/// bit 0: Altitude is stored 0: Absolute, 1: Relative
/// bit 1: Chnage Alt between WP 0: Gradually, 1: ASAP
/// bit 2:
/// bit 3: Req.to hit WP.alt to continue 0: No, 1: Yes
/// bit 4: Relative to Home 0: No, 1: Yes
/// bit 5:
/// bit 6:
/// bit 7: Move to next Command 0: YES, 1: Loiter until commanded
 
//@{
 
struct Location {
uint8_t id; ///< command id
uint8_t options; ///< options bitmask (1<<0 = relative altitude)
uint8_t p1; ///< param 1
int32_t alt; ///< param 2 - Altitude in centimeters (meters * 100)
int32_t lat; ///< param 3 - Lattitude * 10**7
int32_t lng; ///< param 4 - Longitude * 10**7
};
 
//@}
 
////////////////////////////////////////////////////////////////////////////////
/// @name Conversions
///
/// Conversion macros and factors.
///
//@{
 
/// XXX this should probably be replaced with radians()/degrees(), but their
/// inclusion in wiring.h makes doing that here difficult.
#define ToDeg(x) (x*57.2957795131) // *180/pi
#define ToRad(x) (x*0.01745329252) // *pi/180
 
//@}
 
#ifdef DESKTOP_BUILD
// used to report serious errors in autotest
# define SITL_debug(fmt, args...) fprintf(stdout, "%s:%u " fmt, __FUNCTION__, __LINE__, ##args)
#else
# define SITL_debug(fmt, args...)
#endif
 
/* Product IDs for all supported products follow */
 
#define AP_PRODUCT_ID_NONE 0x00 // Hardware in the loop
#define AP_PRODUCT_ID_APM1_1280 0x01 // APM1 with 1280 CPUs
#define AP_PRODUCT_ID_APM1_2560 0x02 // APM1 with 2560 CPUs
#define AP_PRODUCT_ID_SITL 0x03 // Software in the loop
#define AP_PRODUCT_ID_APM2ES_REV_C4 0x14 // APM2 with MPU6000ES_REV_C4
#define AP_PRODUCT_ID_APM2ES_REV_C5 0x15 // APM2 with MPU6000ES_REV_C5
#define AP_PRODUCT_ID_APM2ES_REV_D6 0x16 // APM2 with MPU6000ES_REV_D6
#define AP_PRODUCT_ID_APM2ES_REV_D7 0x17 // APM2 with MPU6000ES_REV_D7
#define AP_PRODUCT_ID_APM2ES_REV_D8 0x18 // APM2 with MPU6000ES_REV_D8
#define AP_PRODUCT_ID_APM2_REV_C4 0x54 // APM2 with MPU6000_REV_C4
#define AP_PRODUCT_ID_APM2_REV_C5 0x55 // APM2 with MPU6000_REV_C5
#define AP_PRODUCT_ID_APM2_REV_D6 0x56 // APM2 with MPU6000_REV_D6
#define AP_PRODUCT_ID_APM2_REV_D7 0x57 // APM2 with MPU6000_REV_D7
#define AP_PRODUCT_ID_APM2_REV_D8 0x58 // APM2 with MPU6000_REV_D8
#define AP_PRODUCT_ID_APM2_REV_D9 0x59 // APM2 with MPU6000_REV_D9
 
#endif // _AP_COMMON_H
/C-OSD/arducam-osd/libraries/AP_Common/AP_Loop.cpp
0,0 → 1,52
/*
* AP_Loop.pde
* Copyright (C) James Goppert 2010 <james.goppert@gmail.com>
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include "AP_Loop.h"
 
Loop::Loop(float _frequency, void (*fptr)(void *), void * data) :
_fptr(fptr),
_data(data),
_period(1.0e6/_frequency),
_subLoops(),
_timeStamp(micros()),
_load(0),
_dt(0)
{
}
 
void Loop::update()
{
// quick exit if not ready
if (micros() - _timeStamp < _period) return;
 
// update time stamp
uint32_t timeStamp0 = _timeStamp;
_timeStamp = micros();
_dt = (_timeStamp - timeStamp0)/1.0e6;
 
// update sub loops
for (uint8_t i=0; i<_subLoops.getSize(); i++) _subLoops[i]->update();
 
// callback function
if (_fptr) _fptr(_data);
 
// calculated load with a low pass filter
_load = 0.9*_load + 10*(float(micros()-_timeStamp)/(_timeStamp-timeStamp0));
}
 
// vim:ts=4:sw=4:expandtab
/C-OSD/arducam-osd/libraries/AP_Common/AP_Loop.h
0,0 → 1,60
/*
* AP_Loop.h
* Copyright (C) James Goppert 2010 <james.goppert@gmail.com>
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#ifndef AP_Loop_H
#define AP_Loop_H
 
#include "AP_Vector.h"
 
class Loop
{
public:
Loop() : _fptr(), _data(), _period(), _subLoops(), _timeStamp(), _load(), _dt() {};
Loop(float frequency, void (*fptr)(void *) = NULL, void * data = NULL);
void update();
Vector<Loop *> & subLoops() {
return _subLoops;
}
float frequency() {
return 1.0e6/_period;
}
void frequency(float _frequency) {
_period = 1e6/_frequency;
}
uint32_t timeStamp() {
return _timeStamp;
}
float dt() {
return _dt;
}
uint8_t load() {
return _load;
}
protected:
void (*_fptr)(void *);
void * _data;
uint32_t _period;
Vector<Loop *> _subLoops;
uint32_t _timeStamp;
uint8_t _load;
float _dt;
};
 
#endif
 
// vim:ts=4:sw=4:expandtab
/C-OSD/arducam-osd/libraries/AP_Common/AP_MetaClass.cpp
0,0 → 1,36
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_MetaClass.cpp
/// Abstract meta-class from which other AP classes may inherit.
/// Provides type introspection and some basic protocols that can
/// be implemented by subclasses.
 
#include "AP_MetaClass.h"
 
// Default ctor, currently does nothing
AP_Meta_class::AP_Meta_class(void)
{
}
 
// Default dtor, currently does nothing but must be defined in order to ensure that
// subclasses not overloading the default virtual dtor still have something in their
// vtable.
AP_Meta_class::~AP_Meta_class()
{
}
 
size_t AP_Meta_class::serialize(void *buf, size_t bufSize) const
{
return 0;
}
 
size_t AP_Meta_class::unserialize(void *buf, size_t bufSize)
{
return 0;
}
/C-OSD/arducam-osd/libraries/AP_Common/AP_MetaClass.h
0,0 → 1,259
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_Meta_class.h
/// @brief An abstract base class from which other classes can inherit.
///
/// This abstract base class declares and implements functions that are
/// useful to code that wants to know things about a class, or to operate
/// on the class without knowing precisely what it is.
///
/// All classes that inherit from this class can be assumed to have these
/// basic functions.
///
 
#ifndef AP_META_CLASS_H
#define AP_META_CLASS_H
 
#include <stddef.h> // for size_t
#include <inttypes.h>
 
#include <avr/io.h> // for RAMEND
///
/// Basic meta-class from which other AP_* classes can derive.
///
/// Functions that form the public API to the metaclass are prefixed meta_.
///
/// Note that classes inheriting from AP_Meta_class *must* have a default
/// constructor and destructor in order for meta_cast to work.
///
class AP_Meta_class
{
public:
/// Default constructor does nothing.
AP_Meta_class(void);
 
/// Default destructor is virtual, to ensure that all subclasses'
/// destructors are virtual. This guarantees that all destructors
/// in the inheritance chain are called at destruction time.
///
virtual ~AP_Meta_class();
 
/// Typedef for the ID unique to all instances of a class.
///
/// See ::meta_type_id for a discussion of class type IDs.
///
typedef uint16_t Type_id;
 
/// Obtain a value unique to all instances of a specific subclass.
///
/// The value can be used to determine whether two class pointers
/// refer to the same exact class type. The value can also be cached
/// and then used to detect objects of a given type at a later point.
///
/// This is similar to the basic functionality of the C++ typeid
/// keyword, but does not depend on std::type_info or any compiler-
/// generated RTTI.
///
/// The value is derived from the vtable address, so it is guaranteed
/// to be unique but cannot be known until the program has been compiled
/// and linked. Thus, the only way to know the type ID of a given
/// type is to construct an object at runtime. To cache the type ID
/// of a class Foo, see the templated version below:
///
/// @return A type-unique value for this.
///
Type_id meta_type_id(void) const {
return *(Type_id *)this;
}
 
/// Obtain a value unique to all instances of a named subclass.
///
/// This is similar to ::meta_type_id, but is a template taking a class name.
/// Use this function to cache the Type_id for a class when you don't need
/// or cannot afford the constructor cost associated with meta_cast.
///
/// @tparam T A subclass of AP_Meta_class.
/// @return The Type_id value for T.
///
template<typename T>
static Type_id meta_type_id(void) {
T tmp;
return tmp.meta_type_id();
}
 
/// External handle for an instance of an AP_Meta_class subclass, contains
/// enough information to construct and validate a pointer to the instance
/// when passed back from an untrusted source.
///
/// Handles are useful when passing a reference to an object to a client outside
/// the system, as they can be validated by the system when the client hands
/// them back.
///
typedef uint32_t Meta_handle;
 
/// Return a value that can be used as an external pointer to an instance
/// of a subclass.
///
/// The value can be passed to an untrusted agent, and validated on its return.
///
/// The value contains the 16-bit type ID of the actual class and
/// a pointer to the class instance.
///
/// @return An opaque handle
///
Meta_handle meta_get_handle(void) const {
return ((Meta_handle)meta_type_id() << 16) | (uintptr_t)this;
}
 
/// Validates an AP_Meta_class handle.
///
/// The value of the handle is not required to be valid; in particular the
/// pointer encoded in the handle is validated before being dereferenced.
///
/// The handle is considered good if the pointer is valid and the object
/// it points to has a type ID that matches the ID in the handle.
///
/// @param handle A possible AP_Meta_class handle
/// @return The instance pointer if the handle is good,
/// or NULL if it is bad.
///
static AP_Meta_class *meta_validate_handle(Meta_handle handle) {
AP_Meta_class *candidate = (AP_Meta_class *)(handle & 0xffff); // extract object pointer
uint16_t id = handle >> 16; // and claimed type
 
// Sanity-check the pointer to ensure it lies within the device RAM, so that
// a bad handle won't cause ::meta_type_id to read outside of SRAM.
// Assume that RAM (or addressable storage of some sort, at least) starts at zero.
//
// Note that this implies that we cannot deal with objects in ROM or EEPROM,
// but the constructor wouldn't be able to populate a vtable pointer there anyway...
//
if ((uintptr_t)candidate >= (RAMEND - 2)) { // -2 to account for the type_id
return NULL;
}
 
// Compare the typeid of the object that candidate points to with the typeid
// from the handle. Note that it's safe to call meta_type_id() off the untrusted
// candidate pointer because meta_type_id is non-virtual (and will in fact be
// inlined here).
//
if (candidate->meta_type_id() == id) {
return candidate;
}
 
return NULL;
}
 
/// Tests whether two objects are of precisely the same class.
///
/// Note that in the case where p2 inherits from p1, or vice-versa, this will return
/// false as we cannot detect these inheritance relationships at runtime.
///
/// In the caller's context, p1 and p2 may be pointers to any type, but we require
/// that they be passed as pointers to AP_Meta_class in order to make it clear that
/// they should be pointers to classes derived from AP_Meta_class.
///
/// No attempt is made to validate whether p1 and p2 are actually derived from
/// AP_Meta_class. If p1 and p2 are equal, or if they point to non-class objects with
/// similar contents, or to non-AP_Meta_class derived classes with no virtual functions
/// this function may return true.
///
/// @param p1 The first object to be compared.
/// @param p2 The second object to be compared.
/// @return True if the two objects are of the same class, false
/// if they are not.
///
static bool meta_type_equivalent(AP_Meta_class *p1, AP_Meta_class *p2) {
return p1->meta_type_id() == p2->meta_type_id();
}
 
/// Cast a pointer to an expected class type.
///
/// This function is used when a pointer is expected to be a pointer to a
/// subclass of AP_Meta_class, but the caller is not certain. It will return the pointer
/// if it is, or NULL if it is not a pointer to the expected class.
///
/// This should be used with caution, as T's default constructor and
/// destructor will be run, possibly introducing undesired side-effects.
///
/// @todo Consider whether we should make it difficult to have a default constructor
/// with appreciable side-effects.
///
/// @param p An AP_Meta_class subclass that may be of type T.
/// @tparam T The name of a type to which p is to be cast.
/// @return NULL if p is not of precisely type T, otherwise p cast to T.
///
template<typename T>
static T *meta_cast(AP_Meta_class *p) {
T tmp;
if (meta_type_equivalent(p, &tmp)) {
return (T *)p;
}
return NULL;
}
 
/// Cast this to an expected class type.
///
/// This is equivalent to meta_cast<T>(this)
///
/// @tparam T The name of a type to which this is to be cast.
/// @return NULL if this is not of precisely type T, otherwise this cast to T.
///
template<typename T>
T *meta_cast(void) {
T tmp;
if (meta_type_equivalent(this, &tmp)) {
return (T*)this;
}
return NULL;
}
 
/// Serialize the class.
///
/// Serialization stores the state of the class in an external buffer in such a
/// fashion that it can later be restored by unserialization.
///
/// AP_Meta_class subclasses should only implement these functions if saving and
/// restoring their state makes sense.
///
/// Serialization provides a mechanism for exporting the state of the class to an
/// external consumer, either for external introspection or for subsequent restoration.
///
/// Classes that wrap variables should define the format of their serialiaed data
/// so that external consumers can reliably interpret it.
///
/// @param buf Buffer into which serialised data should be placed.
/// @param bufSize The size of the buffer provided.
/// @return The size of the serialised data, even if that data would
/// have overflowed the buffer. If the return value is zero,
/// the class does not support serialization.
///
virtual size_t serialize(void *buf, size_t bufSize) const;
 
/// Unserialize the class.
///
/// Unserializing a class from a buffer into which the class previously serialized
/// itself restores the instance to an identical state, where "identical" is left
/// up to the class itself to define.
///
/// Classes that wrap variables should define the format of their serialized data so
/// that external providers can reliably encode it.
///
/// @param buf Buffer containing serialized data.
/// @param bufSize The size of the buffer.
/// @return The number of bytes from the buffer that would be consumed
/// unserializing the data. If the value is less than or equal
/// to bufSize, unserialization was successful. If the return
/// value is zero the class does not support unserialisation or
/// the data in the buffer is invalid.
///
virtual size_t unserialize(void *buf, size_t bufSize);
};
 
#endif // AP_Meta_class_H
/C-OSD/arducam-osd/libraries/AP_Common/AP_Param.cpp
0,0 → 1,892
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
// total up and check overflow
// check size of group var_info
 
/// @file AP_Param.cpp
/// @brief The AP variable store.
 
 
#include <FastSerial.h>
#include <AP_Common.h>
#include <AP_Math.h>
 
#include <math.h>
#include <string.h>
 
// #define ENABLE_FASTSERIAL_DEBUG
 
#ifdef ENABLE_FASTSERIAL_DEBUG
# define serialDebug(fmt, args...) if (FastSerial::getInitialized(0)) do {Serial.printf("%s:%d: " fmt "\n", __FUNCTION__, __LINE__ , ##args); delay(0); } while(0)
#else
# define serialDebug(fmt, args...)
#endif
 
// some useful progmem macros
#define PGM_UINT8(addr) pgm_read_byte((const prog_char *)addr)
#define PGM_UINT16(addr) pgm_read_word((const uint16_t *)addr)
#define PGM_POINTER(addr) pgm_read_pointer((const void *)addr)
 
// the 'GROUP_ID' of a element of a group is the 8 bit identifier used
// to distinguish between this element of the group and other elements
// of the same group. It is calculated using a bit shift per level of
// nesting, so the first level of nesting gets 4 bits, and the next
// level gets the next 4 bits. This limits groups to having at most 16
// elements.
#define GROUP_ID(grpinfo, base, i, shift) ((base)+(((uint16_t)PGM_UINT8(&grpinfo[i].idx))<<(shift)))
 
// Note about AP_Vector3f handling.
// The code has special cases for AP_Vector3f to allow it to be viewed
// as both a single 3 element vector and as a set of 3 AP_Float
// variables. This is done to make it possible for MAVLink to see
// vectors as parameters, which allows users to save their compass
// offsets in MAVLink parameter files. The code involves quite a few
// special cases which could be generalised to any vector/matrix type
// if we end up needing this behaviour for other than AP_Vector3f
 
 
// static member variables for AP_Param.
//
 
// max EEPROM write size. This is usually less than the physical
// size as only part of the EEPROM is reserved for parameters
uint16_t AP_Param::_eeprom_size;
 
// number of rows in the _var_info[] table
uint8_t AP_Param::_num_vars;
 
// storage and naming information about all types that can be saved
const AP_Param::Info *AP_Param::_var_info;
 
// write to EEPROM, checking each byte to avoid writing
// bytes that are already correct
void AP_Param::eeprom_write_check(const void *ptr, uint16_t ofs, uint8_t size)
{
const uint8_t *b = (const uint8_t *)ptr;
while (size--) {
uint8_t v = eeprom_read_byte((const uint8_t *)ofs);
if (v != *b) {
eeprom_write_byte((uint8_t *)ofs, *b);
}
b++;
ofs++;
}
}
 
// write a sentinal value at the given offset
void AP_Param::write_sentinal(uint16_t ofs)
{
struct Param_header phdr;
phdr.type = _sentinal_type;
phdr.key = _sentinal_key;
phdr.group_element = _sentinal_group;
eeprom_write_check(&phdr, ofs, sizeof(phdr));
}
 
// erase all EEPROM variables by re-writing the header and adding
// a sentinal
void AP_Param::erase_all(void)
{
struct EEPROM_header hdr;
 
serialDebug("erase_all");
 
// write the header
hdr.magic[0] = k_EEPROM_magic0;
hdr.magic[1] = k_EEPROM_magic1;
hdr.revision = k_EEPROM_revision;
hdr.spare = 0;
eeprom_write_check(&hdr, 0, sizeof(hdr));
 
// add a sentinal directly after the header
write_sentinal(sizeof(struct EEPROM_header));
}
 
// validate a group info table
bool AP_Param::check_group_info(const struct AP_Param::GroupInfo *group_info,
uint16_t *total_size,
uint8_t group_shift)
{
uint8_t type;
int8_t max_idx = -1;
for (uint8_t i=0;
(type=PGM_UINT8(&group_info[i].type)) != AP_PARAM_NONE;
i++) {
#ifdef AP_NESTED_GROUPS_ENABLED
if (type == AP_PARAM_GROUP) {
// a nested group
const struct GroupInfo *ginfo = (const struct GroupInfo *)PGM_POINTER(&group_info[i].group_info);
if (group_shift + _group_level_shift >= _group_bits) {
// double nesting of groups is not allowed
return false;
}
if (ginfo == NULL ||
!check_group_info(ginfo, total_size, group_shift + _group_level_shift)) {
return false;
}
continue;
}
#endif // AP_NESTED_GROUPS_ENABLED
uint8_t idx = PGM_UINT8(&group_info[i].idx);
if (idx >= (1<<_group_level_shift)) {
// passed limit on table size
return false;
}
if ((int8_t)idx <= max_idx) {
// the indexes must be in increasing order
return false;
}
max_idx = (int8_t)idx;
uint8_t size = type_size((enum ap_var_type)type);
if (size == 0) {
// not a valid type
return false;
}
(*total_size) += size + sizeof(struct Param_header);
}
return true;
}
 
// check for duplicate key values
bool AP_Param::duplicate_key(uint8_t vindex, uint8_t key)
{
for (uint8_t i=vindex+1; i<_num_vars; i++) {
uint8_t key2 = PGM_UINT8(&_var_info[i].key);
if (key2 == key) {
// no duplicate keys allowed
return true;
}
}
return false;
}
 
// validate the _var_info[] table
bool AP_Param::check_var_info(void)
{
uint16_t total_size = sizeof(struct EEPROM_header);
 
for (uint8_t i=0; i<_num_vars; i++) {
uint8_t type = PGM_UINT8(&_var_info[i].type);
uint8_t key = PGM_UINT8(&_var_info[i].key);
if (type == AP_PARAM_GROUP) {
if (i == 0) {
// first element can't be a group, for first() call
return false;
}
const struct GroupInfo *group_info = (const struct GroupInfo *)PGM_POINTER(&_var_info[i].group_info);
if (group_info == NULL ||
!check_group_info(group_info, &total_size, 0)) {
return false;
}
} else {
uint8_t size = type_size((enum ap_var_type)type);
if (size == 0) {
// not a valid type - the top level list can't contain
// AP_PARAM_NONE
return false;
}
total_size += size + sizeof(struct Param_header);
}
if (duplicate_key(i, key)) {
return false;
}
}
if (total_size > _eeprom_size) {
serialDebug("total_size %u exceeds _eeprom_size %u",
total_size, _eeprom_size);
return false;
}
return true;
}
 
 
// setup the _var_info[] table
bool AP_Param::setup(const AP_Param::Info *info, uint8_t num_vars, uint16_t eeprom_size)
{
struct EEPROM_header hdr;
 
_eeprom_size = eeprom_size;
_var_info = info;
_num_vars = num_vars;
 
if (!check_var_info()) {
return false;
}
 
serialDebug("setup %u vars", (unsigned)num_vars);
 
// check the header
eeprom_read_block(&hdr, 0, sizeof(hdr));
if (hdr.magic[0] != k_EEPROM_magic0 ||
hdr.magic[1] != k_EEPROM_magic1 ||
hdr.revision != k_EEPROM_revision) {
// header doesn't match. We can't recover any variables. Wipe
// the header and setup the sentinal directly after the header
serialDebug("bad header in setup - erasing");
erase_all();
}
 
return true;
}
 
// check if AP_Param has been initialised
bool AP_Param::initialised(void)
{
return _var_info != NULL;
}
 
// find the info structure given a header and a group_info table
// return the Info structure and a pointer to the variables storage
const struct AP_Param::Info *AP_Param::find_by_header_group(struct Param_header phdr, void **ptr,
uint8_t vindex,
const struct GroupInfo *group_info,
uint8_t group_base,
uint8_t group_shift)
{
uint8_t type;
for (uint8_t i=0;
(type=PGM_UINT8(&group_info[i].type)) != AP_PARAM_NONE;
i++) {
#ifdef AP_NESTED_GROUPS_ENABLED
if (type == AP_PARAM_GROUP) {
// a nested group
if (group_shift + _group_level_shift >= _group_bits) {
// too deeply nested - this should have been caught by
// setup() !
return NULL;
}
const struct GroupInfo *ginfo = (const struct GroupInfo *)PGM_POINTER(&group_info[i].group_info);
const struct AP_Param::Info *ret = find_by_header_group(phdr, ptr, vindex, ginfo,
GROUP_ID(group_info, group_base, i, group_shift),
group_shift + _group_level_shift);
if (ret != NULL) {
return ret;
}
continue;
}
#endif // AP_NESTED_GROUPS_ENABLED
if (GROUP_ID(group_info, group_base, i, group_shift) == phdr.group_element) {
// found a group element
*ptr = (void*)(PGM_POINTER(&_var_info[vindex].ptr) + PGM_UINT16(&group_info[i].offset));
return &_var_info[vindex];
}
}
return NULL;
}
 
// find the info structure given a header
// return the Info structure and a pointer to the variables storage
const struct AP_Param::Info *AP_Param::find_by_header(struct Param_header phdr, void **ptr)
{
// loop over all named variables
for (uint8_t i=0; i<_num_vars; i++) {
uint8_t type = PGM_UINT8(&_var_info[i].type);
uint8_t key = PGM_UINT8(&_var_info[i].key);
if (key != phdr.key) {
// not the right key
continue;
}
if (type != AP_PARAM_GROUP) {
// if its not a group then we are done
*ptr = (void*)PGM_POINTER(&_var_info[i].ptr);
return &_var_info[i];
}
 
const struct GroupInfo *group_info = (const struct GroupInfo *)PGM_POINTER(&_var_info[i].group_info);
return find_by_header_group(phdr, ptr, i, group_info, 0, 0);
}
return NULL;
}
 
// find the info structure for a variable in a group
const struct AP_Param::Info *AP_Param::find_var_info_group(const struct GroupInfo *group_info,
uint8_t vindex,
uint8_t group_base,
uint8_t group_shift,
uint8_t *group_element,
const struct GroupInfo **group_ret,
uint8_t *idx)
{
uintptr_t base = PGM_POINTER(&_var_info[vindex].ptr);
uint8_t type;
for (uint8_t i=0;
(type=PGM_UINT8(&group_info[i].type)) != AP_PARAM_NONE;
i++) {
uintptr_t ofs = PGM_POINTER(&group_info[i].offset);
#ifdef AP_NESTED_GROUPS_ENABLED
if (type == AP_PARAM_GROUP) {
const struct GroupInfo *ginfo = (const struct GroupInfo *)PGM_POINTER(&group_info[i].group_info);
// a nested group
if (group_shift + _group_level_shift >= _group_bits) {
// too deeply nested - this should have been caught by
// setup() !
return NULL;
}
const struct AP_Param::Info *info;
info = find_var_info_group(ginfo, vindex,
GROUP_ID(group_info, group_base, i, group_shift),
group_shift + _group_level_shift,
group_element,
group_ret,
idx);
if (info != NULL) {
return info;
}
} else // Forgive the poor formatting - if continues below.
#endif // AP_NESTED_GROUPS_ENABLED
if ((uintptr_t)this == base + ofs) {
*group_element = GROUP_ID(group_info, group_base, i, group_shift);
*group_ret = &group_info[i];
*idx = 0;
return &_var_info[vindex];
} else if (type == AP_PARAM_VECTOR3F &&
(base+ofs+sizeof(float) == (uintptr_t)this ||
base+ofs+2*sizeof(float) == (uintptr_t)this)) {
// we are inside a Vector3f. We need to work out which
// element of the vector the current object refers to.
*idx = (((uintptr_t)this) - (base+ofs))/sizeof(float);
*group_element = GROUP_ID(group_info, group_base, i, group_shift);
*group_ret = &group_info[i];
return &_var_info[vindex];
}
}
return NULL;
}
 
// find the info structure for a variable
const struct AP_Param::Info *AP_Param::find_var_info(uint8_t *group_element,
const struct GroupInfo **group_ret,
uint8_t *idx)
{
for (uint8_t i=0; i<_num_vars; i++) {
uint8_t type = PGM_UINT8(&_var_info[i].type);
uintptr_t base = PGM_POINTER(&_var_info[i].ptr);
if (type == AP_PARAM_GROUP) {
const struct GroupInfo *group_info = (const struct GroupInfo *)PGM_POINTER(&_var_info[i].group_info);
const struct AP_Param::Info *info;
info = find_var_info_group(group_info, i, 0, 0, group_element, group_ret, idx);
if (info != NULL) {
return info;
}
} else if (base == (uintptr_t)this) {
*group_element = 0;
*group_ret = NULL;
*idx = 0;
return &_var_info[i];
} else if (type == AP_PARAM_VECTOR3F &&
(base+sizeof(float) == (uintptr_t)this ||
base+2*sizeof(float) == (uintptr_t)this)) {
// we are inside a Vector3f. Work out which element we are
// referring to.
*idx = (((uintptr_t)this) - base)/sizeof(float);
*group_element = 0;
*group_ret = NULL;
return &_var_info[i];
}
}
return NULL;
}
 
// return the storage size for a AP_PARAM_* type
const uint8_t AP_Param::type_size(enum ap_var_type type)
{
switch (type) {
case AP_PARAM_NONE:
case AP_PARAM_GROUP:
return 0;
case AP_PARAM_INT8:
return 1;
case AP_PARAM_INT16:
return 2;
case AP_PARAM_INT32:
return 4;
case AP_PARAM_FLOAT:
return 4;
case AP_PARAM_VECTOR3F:
return 3*4;
case AP_PARAM_VECTOR6F:
return 6*4;
case AP_PARAM_MATRIX3F:
return 3*3*4;
}
serialDebug("unknown type %u\n", type);
return 0;
}
 
// scan the EEPROM looking for a given variable by header content
// return true if found, along with the offset in the EEPROM where
// the variable is stored
// if not found return the offset of the sentinal, or
bool AP_Param::scan(const AP_Param::Param_header *target, uint16_t *pofs)
{
struct Param_header phdr;
uint16_t ofs = sizeof(AP_Param::EEPROM_header);
while (ofs < _eeprom_size) {
eeprom_read_block(&phdr, (void *)ofs, sizeof(phdr));
if (phdr.type == target->type &&
phdr.key == target->key &&
phdr.group_element == target->group_element) {
// found it
*pofs = ofs;
return true;
}
// note that this is an ||, not an &&, as this makes us more
// robust to power off while adding a variable to EEPROM
if (phdr.type == _sentinal_type ||
phdr.key == _sentinal_key ||
phdr.group_element == _sentinal_group) {
// we've reached the sentinal
*pofs = ofs;
return false;
}
ofs += type_size((enum ap_var_type)phdr.type) + sizeof(phdr);
}
*pofs = ~0;
serialDebug("scan past end of eeprom");
return false;
}
 
// add a X,Y,Z suffix to the name of a Vector3f element
void AP_Param::add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx)
{
uint8_t len = strnlen(buffer, buffer_size);
if ((size_t)(len+3) >= buffer_size) {
// the suffix doesn't fit
return;
}
buffer[len] = '_';
if (idx == 0) {
buffer[len+1] = 'X';
} else if (idx == 1) {
buffer[len+1] = 'Y';
} else if (idx == 2) {
buffer[len+1] = 'Z';
}
buffer[len+2] = 0;
}
 
// Copy the variable's whole name to the supplied buffer.
//
// If the variable is a group member, prepend the group name.
//
void AP_Param::copy_name(char *buffer, size_t buffer_size, bool force_scalar)
{
uint8_t group_element;
const struct GroupInfo *ginfo;
uint8_t idx;
const struct AP_Param::Info *info = find_var_info(&group_element, &ginfo, &idx);
if (info == NULL) {
*buffer = 0;
serialDebug("no info found");
return;
}
strncpy_P(buffer, info->name, buffer_size);
if (ginfo != NULL) {
uint8_t len = strnlen(buffer, buffer_size);
if (len < buffer_size) {
strncpy_P(&buffer[len], ginfo->name, buffer_size-len);
}
if ((force_scalar || idx != 0) && AP_PARAM_VECTOR3F == PGM_UINT8(&ginfo->type)) {
// the caller wants a specific element in a Vector3f
add_vector3f_suffix(buffer, buffer_size, idx);
}
} else if ((force_scalar || idx != 0) && AP_PARAM_VECTOR3F == PGM_UINT8(&info->type)) {
add_vector3f_suffix(buffer, buffer_size, idx);
}
}
 
// Find a variable by name in a group
AP_Param *
AP_Param::find_group(const char *name, uint8_t vindex, const struct GroupInfo *group_info, enum ap_var_type *ptype)
{
uint8_t type;
for (uint8_t i=0;
(type=PGM_UINT8(&group_info[i].type)) != AP_PARAM_NONE;
i++) {
#ifdef AP_NESTED_GROUPS_ENABLED
if (type == AP_PARAM_GROUP) {
const struct GroupInfo *ginfo = (const struct GroupInfo *)PGM_POINTER(&group_info[i].group_info);
AP_Param *ap = find_group(name, vindex, ginfo, ptype);
if (ap != NULL) {
return ap;
}
} else
#endif // AP_NESTED_GROUPS_ENABLED
if (strcasecmp_P(name, group_info[i].name) == 0) {
uintptr_t p = PGM_POINTER(&_var_info[vindex].ptr);
*ptype = (enum ap_var_type)type;
return (AP_Param *)(p + PGM_POINTER(&group_info[i].offset));
} else if (type == AP_PARAM_VECTOR3F) {
// special case for finding Vector3f elements
uint8_t suffix_len = strlen_P(group_info[i].name);
if (strncmp_P(name, group_info[i].name, suffix_len) == 0 &&
name[suffix_len] == '_' &&
name[suffix_len+1] != 0 &&
name[suffix_len+2] == 0) {
uintptr_t p = PGM_POINTER(&_var_info[vindex].ptr);
AP_Float *v = (AP_Float *)(p + PGM_POINTER(&group_info[i].offset));
*ptype = AP_PARAM_FLOAT;
switch (name[suffix_len+1]) {
case 'X':
return (AP_Float *)&v[0];
case 'Y':
return (AP_Float *)&v[1];
case 'Z':
return (AP_Float *)&v[2];
}
}
}
}
return NULL;
}
 
 
// Find a variable by name.
//
AP_Param *
AP_Param::find(const char *name, enum ap_var_type *ptype)
{
for (uint8_t i=0; i<_num_vars; i++) {
uint8_t type = PGM_UINT8(&_var_info[i].type);
if (type == AP_PARAM_GROUP) {
uint8_t len = strnlen_P(_var_info[i].name, AP_MAX_NAME_SIZE);
if (strncmp_P(name, _var_info[i].name, len) != 0) {
continue;
}
const struct GroupInfo *group_info = (const struct GroupInfo *)PGM_POINTER(&_var_info[i].group_info);
AP_Param *ap = find_group(name + len, i, group_info, ptype);
if (ap != NULL) {
return ap;
}
// we continue looking as we want to allow top level
// parameter to have the same prefix name as group
// parameters, for example CAM_P_G
} else if (strcasecmp_P(name, _var_info[i].name) == 0) {
*ptype = (enum ap_var_type)type;
return (AP_Param *)PGM_POINTER(&_var_info[i].ptr);
}
}
return NULL;
}
 
// Save the variable to EEPROM, if supported
//
bool AP_Param::save(void)
{
uint8_t group_element = 0;
const struct GroupInfo *ginfo;
uint8_t idx;
const struct AP_Param::Info *info = find_var_info(&group_element, &ginfo, &idx);
const AP_Param *ap;
 
if (info == NULL) {
// we don't have any info on how to store it
return false;
}
 
struct Param_header phdr;
 
// create the header we will use to store the variable
if (ginfo != NULL) {
phdr.type = PGM_UINT8(&ginfo->type);
} else {
phdr.type = PGM_UINT8(&info->type);
}
phdr.key = PGM_UINT8(&info->key);
phdr.group_element = group_element;
 
ap = this;
if (phdr.type != AP_PARAM_VECTOR3F && idx != 0) {
// only vector3f can have non-zero idx for now
return false;
}
if (idx != 0) {
ap = (const AP_Param *)((uintptr_t)ap) - (idx*sizeof(float));
}
 
// scan EEPROM to find the right location
uint16_t ofs;
if (scan(&phdr, &ofs)) {
// found an existing copy of the variable
eeprom_write_check(ap, ofs+sizeof(phdr), type_size((enum ap_var_type)phdr.type));
return true;
}
if (ofs == (uint16_t)~0) {
return false;
}
 
// write a new sentinal, then the data, then the header
write_sentinal(ofs + sizeof(phdr) + type_size((enum ap_var_type)phdr.type));
eeprom_write_check(ap, ofs+sizeof(phdr), type_size((enum ap_var_type)phdr.type));
eeprom_write_check(&phdr, ofs, sizeof(phdr));
return true;
}
 
// Load the variable from EEPROM, if supported
//
bool AP_Param::load(void)
{
uint8_t group_element = 0;
const struct GroupInfo *ginfo;
uint8_t idx;
const struct AP_Param::Info *info = find_var_info(&group_element, &ginfo, &idx);
if (info == NULL) {
// we don't have any info on how to load it
return false;
}
 
struct Param_header phdr;
 
// create the header we will use to match the variable
if (ginfo != NULL) {
phdr.type = PGM_UINT8(&ginfo->type);
} else {
phdr.type = PGM_UINT8(&info->type);
}
phdr.key = PGM_UINT8(&info->key);
phdr.group_element = group_element;
 
// scan EEPROM to find the right location
uint16_t ofs;
if (!scan(&phdr, &ofs)) {
return false;
}
 
if (phdr.type != AP_PARAM_VECTOR3F && idx != 0) {
// only vector3f can have non-zero idx for now
return false;
}
 
AP_Param *ap;
ap = this;
if (idx != 0) {
ap = (AP_Param *)((uintptr_t)ap) - (idx*sizeof(float));
}
 
// found it
eeprom_read_block(ap, (void*)(ofs+sizeof(phdr)), type_size((enum ap_var_type)phdr.type));
return true;
}
 
// Load all variables from EEPROM
//
bool AP_Param::load_all(void)
{
struct Param_header phdr;
uint16_t ofs = sizeof(AP_Param::EEPROM_header);
while (ofs < _eeprom_size) {
eeprom_read_block(&phdr, (void *)ofs, sizeof(phdr));
// note that this is an || not an && for robustness
// against power off while adding a variable
if (phdr.type == _sentinal_type ||
phdr.key == _sentinal_key ||
phdr.group_element == _sentinal_group) {
// we've reached the sentinal
return true;
}
 
const struct AP_Param::Info *info;
void *ptr;
 
info = find_by_header(phdr, &ptr);
if (info != NULL) {
eeprom_read_block(ptr, (void*)(ofs+sizeof(phdr)), type_size((enum ap_var_type)phdr.type));
}
 
ofs += type_size((enum ap_var_type)phdr.type) + sizeof(phdr);
}
 
// we didn't find the sentinal
serialDebug("no sentinal in load_all");
return false;
}
 
 
// return the first variable in _var_info
AP_Param *AP_Param::first(ParamToken *token, enum ap_var_type *ptype)
{
token->key = 0;
token->group_element = 0;
token->idx = 0;
if (_num_vars == 0) {
return NULL;
}
if (ptype != NULL) {
*ptype = (enum ap_var_type)PGM_UINT8(&_var_info[0].type);
}
return (AP_Param *)(PGM_POINTER(&_var_info[0].ptr));
}
 
/// Returns the next variable in a group, recursing into groups
/// as needed
AP_Param *AP_Param::next_group(uint8_t vindex, const struct GroupInfo *group_info,
bool *found_current,
uint8_t group_base,
uint8_t group_shift,
ParamToken *token,
enum ap_var_type *ptype)
{
enum ap_var_type type;
for (uint8_t i=0;
(type=(enum ap_var_type)PGM_UINT8(&group_info[i].type)) != AP_PARAM_NONE;
i++) {
#ifdef AP_NESTED_GROUPS_ENABLED
if (type == AP_PARAM_GROUP) {
// a nested group
const struct GroupInfo *ginfo = (const struct GroupInfo *)PGM_POINTER(&group_info[i].group_info);
AP_Param *ap;
ap = next_group(vindex, ginfo, found_current, GROUP_ID(group_info, group_base, i, group_shift),
group_shift + _group_level_shift, token, ptype);
if (ap != NULL) {
return ap;
}
} else
#endif // AP_NESTED_GROUPS_ENABLED
{
if (*found_current) {
// got a new one
token->key = vindex;
token->group_element = GROUP_ID(group_info, group_base, i, group_shift);
token->idx = 0;
if (ptype != NULL) {
*ptype = type;
}
return (AP_Param*)(PGM_POINTER(&_var_info[vindex].ptr) + PGM_UINT16(&group_info[i].offset));
}
if (GROUP_ID(group_info, group_base, i, group_shift) == token->group_element) {
*found_current = true;
if (type == AP_PARAM_VECTOR3F && token->idx < 3) {
// return the next element of the vector as a
// float
token->idx++;
if (ptype != NULL) {
*ptype = AP_PARAM_FLOAT;
}
uintptr_t ofs = (uintptr_t)PGM_POINTER(&_var_info[vindex].ptr) + PGM_UINT16(&group_info[i].offset);
ofs += sizeof(float)*(token->idx-1);
return (AP_Param *)ofs;
}
}
}
}
return NULL;
}
 
/// Returns the next variable in _var_info, recursing into groups
/// as needed
AP_Param *AP_Param::next(ParamToken *token, enum ap_var_type *ptype)
{
uint8_t i = token->key;
bool found_current = false;
if (i >= _num_vars) {
// illegal token
return NULL;
}
enum ap_var_type type = (enum ap_var_type)PGM_UINT8(&_var_info[i].type);
 
// allow Vector3f to be seen as 3 variables. First as a vector,
// then as 3 separate floats
if (type == AP_PARAM_VECTOR3F && token->idx < 3) {
token->idx++;
if (ptype != NULL) {
*ptype = AP_PARAM_FLOAT;
}
return (AP_Param *)(((token->idx-1)*sizeof(float))+(uintptr_t)PGM_POINTER(&_var_info[i].ptr));
}
 
if (type != AP_PARAM_GROUP) {
i++;
found_current = true;
}
for (; i<_num_vars; i++) {
type = (enum ap_var_type)PGM_UINT8(&_var_info[i].type);
if (type == AP_PARAM_GROUP) {
const struct GroupInfo *group_info = (const struct GroupInfo *)PGM_POINTER(&_var_info[i].group_info);
AP_Param *ap = next_group(i, group_info, &found_current, 0, 0, token, ptype);
if (ap != NULL) {
return ap;
}
} else {
// found the next one
token->key = i;
token->group_element = 0;
token->idx = 0;
if (ptype != NULL) {
*ptype = type;
}
return (AP_Param *)(PGM_POINTER(&_var_info[i].ptr));
}
}
return NULL;
}
 
/// Returns the next scalar in _var_info, recursing into groups
/// as needed
AP_Param *AP_Param::next_scalar(ParamToken *token, enum ap_var_type *ptype)
{
AP_Param *ap;
enum ap_var_type type;
while ((ap = next(token, &type)) != NULL && type > AP_PARAM_FLOAT) ;
if (ap != NULL && ptype != NULL) {
*ptype = type;
}
return ap;
}
 
 
/// cast a variable to a float given its type
float AP_Param::cast_to_float(enum ap_var_type type)
{
switch (type) {
case AP_PARAM_INT8:
return ((AP_Int8 *)this)->cast_to_float();
case AP_PARAM_INT16:
return ((AP_Int16 *)this)->cast_to_float();
case AP_PARAM_INT32:
return ((AP_Int32 *)this)->cast_to_float();
case AP_PARAM_FLOAT:
return ((AP_Float *)this)->cast_to_float();
default:
return NAN;
}
}
 
 
// print the value of all variables
void AP_Param::show_all(void)
{
ParamToken token;
AP_Param *ap;
enum ap_var_type type;
 
for (ap=AP_Param::first(&token, &type);
ap;
ap=AP_Param::next_scalar(&token, &type)) {
char s[AP_MAX_NAME_SIZE+1];
ap->copy_name(s, sizeof(s), true);
s[AP_MAX_NAME_SIZE] = 0;
 
switch (type) {
case AP_PARAM_INT8:
Serial.printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int8 *)ap)->get());
break;
case AP_PARAM_INT16:
Serial.printf_P(PSTR("%s: %d\n"), s, (int)((AP_Int16 *)ap)->get());
break;
case AP_PARAM_INT32:
Serial.printf_P(PSTR("%s: %ld\n"), s, (long)((AP_Int32 *)ap)->get());
break;
case AP_PARAM_FLOAT:
Serial.printf_P(PSTR("%s: %f\n"), s, ((AP_Float *)ap)->get());
break;
default:
break;
}
}
}
/C-OSD/arducam-osd/libraries/AP_Common/AP_Param.h
0,0 → 1,473
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_Param.h
/// @brief A system for managing and storing variables that are of
/// general interest to the system.
 
#ifndef AP_PARAM_H
#define AP_PARAM_H
#include <stddef.h>
#include <string.h>
#include <stdint.h>
 
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
 
#define AP_MAX_NAME_SIZE 15
#define AP_NESTED_GROUPS_ENABLED
 
// a variant of offsetof() to work around C++ restrictions.
// this can only be used when the offset of a variable in a object
// is constant and known at compile time
#define AP_VAROFFSET(type, element) (((uintptr_t)(&((const type *)1)->element))-1)
 
// find the type of a variable given the class and element
#define AP_CLASSTYPE(class, element) (((const class *)1)->element.vtype)
 
// declare a group var_info line
#define AP_GROUPINFO(name, idx, class, element) { AP_CLASSTYPE(class, element), idx, name, AP_VAROFFSET(class, element) }
 
// declare a nested group entry in a group var_info
#ifdef AP_NESTED_GROUPS_ENABLED
#define AP_NESTEDGROUPINFO(class, idx) { AP_PARAM_GROUP, idx, "", 0, class::var_info }
#endif
 
#define AP_GROUPEND { AP_PARAM_NONE, 0xFF, "" }
 
enum ap_var_type {
AP_PARAM_NONE = 0,
AP_PARAM_INT8,
AP_PARAM_INT16,
AP_PARAM_INT32,
AP_PARAM_FLOAT,
AP_PARAM_VECTOR3F,
AP_PARAM_VECTOR6F,
AP_PARAM_MATRIX3F,
AP_PARAM_GROUP
};
 
/// Base class for variables.
///
/// Provides naming and lookup services for variables.
///
class AP_Param
{
public:
// the Info and GroupInfo structures are passed by the main
// program in setup() to give information on how variables are
// named and their location in memory
struct GroupInfo {
uint8_t type; // AP_PARAM_*
uint8_t idx; // identifier within the group
const char name[AP_MAX_NAME_SIZE];
uintptr_t offset; // offset within the object
const struct GroupInfo *group_info;
};
struct Info {
uint8_t type; // AP_PARAM_*
const char name[AP_MAX_NAME_SIZE];
uint8_t key; // k_param_*
void *ptr; // pointer to the variable in memory
const struct GroupInfo *group_info;
};
 
// a token used for first()/next() state
typedef struct {
uint8_t key;
uint8_t group_element;
uint8_t idx; // offset into array types
} ParamToken;
 
// called once at startup to setup the _var_info[] table. This
// will also check the EEPROM header and re-initialise it if the
// wrong version is found
static bool setup(const struct Info *info, uint8_t num_vars, uint16_t eeprom_size);
 
// return true if AP_Param has been initialised via setup()
static bool initialised(void);
 
/// Copy the variable's name, prefixed by any containing group name, to a buffer.
///
/// If the variable has no name, the buffer will contain an empty string.
///
/// Note that if the combination of names is larger than the buffer, the
/// result in the buffer will be truncated.
///
/// @param buffer The destination buffer
/// @param bufferSize Total size of the destination buffer.
///
void copy_name(char *buffer, size_t bufferSize, bool force_scalar=false);
 
/// Find a variable by name.
///
/// If the variable has no name, it cannot be found by this interface.
///
/// @param name The full name of the variable to be found.
/// @return A pointer to the variable, or NULL if
/// it does not exist.
///
static AP_Param *find(const char *name, enum ap_var_type *ptype);
 
/// Save the current value of the variable to EEPROM.
///
/// @return True if the variable was saved successfully.
///
bool save(void);
 
/// Load the variable from EEPROM.
///
/// @return True if the variable was loaded successfully.
///
bool load(void);
 
/// Load all variables from EEPROM
///
/// This function performs a best-efforts attempt to load all
/// of the variables from EEPROM. If some fail to load, their
/// values will remain as they are.
///
/// @return False if any variable failed to load
///
static bool load_all(void);
 
/// Erase all variables in EEPROM.
///
static void erase_all(void);
 
/// print the value of all variables
static void show_all(void);
 
/// Returns the first variable
///
/// @return The first variable in _var_info, or NULL if
/// there are none.
///
static AP_Param *first(ParamToken *token, enum ap_var_type *ptype);
 
/// Returns the next variable in _var_info, recursing into groups
/// as needed
static AP_Param *next(ParamToken *token, enum ap_var_type *ptype);
 
/// Returns the next scalar variable in _var_info, recursing into groups
/// as needed
static AP_Param *next_scalar(ParamToken *token, enum ap_var_type *ptype);
 
/// cast a variable to a float given its type
float cast_to_float(enum ap_var_type type);
 
private:
/// EEPROM header
///
/// This structure is placed at the head of the EEPROM to indicate
/// that the ROM is formatted for AP_Param.
///
struct EEPROM_header {
uint8_t magic[2];
uint8_t revision;
uint8_t spare;
};
 
// This header is prepended to a variable stored in EEPROM.
struct Param_header {
uint8_t key;
uint8_t group_element;
uint8_t type;
};
 
// number of bits in each level of nesting of groups
static const uint8_t _group_level_shift = 4;
static const uint8_t _group_bits = 8;
 
static const uint8_t _sentinal_key = 0xFF;
static const uint8_t _sentinal_type = 0xFF;
static const uint8_t _sentinal_group = 0xFF;
 
static bool check_group_info(const struct GroupInfo *group_info, uint16_t *total_size, uint8_t max_bits);
static bool duplicate_key(uint8_t vindex, uint8_t key);
static bool check_var_info(void);
const struct Info *find_var_info_group(const struct GroupInfo *group_info,
uint8_t vindex,
uint8_t group_base,
uint8_t group_shift,
uint8_t *group_element,
const struct GroupInfo **group_ret,
uint8_t *idx);
const struct Info *find_var_info(uint8_t *group_element,
const struct GroupInfo **group_ret,
uint8_t *idx);
static const struct Info *find_by_header_group(struct Param_header phdr, void **ptr,
uint8_t vindex,
const struct GroupInfo *group_info,
uint8_t group_base,
uint8_t group_shift);
static const struct Info *find_by_header(struct Param_header phdr, void **ptr);
void add_vector3f_suffix(char *buffer, size_t buffer_size, uint8_t idx);
static AP_Param *find_group(const char *name, uint8_t vindex, const struct GroupInfo *group_info, enum ap_var_type *ptype);
static void write_sentinal(uint16_t ofs);
bool scan(const struct Param_header *phdr, uint16_t *pofs);
static const uint8_t type_size(enum ap_var_type type);
static void eeprom_write_check(const void *ptr, uint16_t ofs, uint8_t size);
static AP_Param *next_group(uint8_t vindex, const struct GroupInfo *group_info,
bool *found_current,
uint8_t group_base,
uint8_t group_shift,
ParamToken *token,
enum ap_var_type *ptype);
 
static uint16_t _eeprom_size;
static uint8_t _num_vars;
static const struct Info *_var_info;
 
// values filled into the EEPROM header
static const uint8_t k_EEPROM_magic0 = 0x50;
static const uint8_t k_EEPROM_magic1 = 0x41; ///< "AP"
static const uint8_t k_EEPROM_revision = 5; ///< current format revision
};
 
/// Template class for scalar variables.
///
/// Objects of this type have a value, and can be treated in many ways as though they
/// were the value.
///
/// @tparam T The scalar type of the variable
/// @tparam PT The AP_PARAM_* type
///
template<typename T, ap_var_type PT>
class AP_ParamT : public AP_Param
{
public:
/// Constructor for scalar variable.
///
/// Initialises a stand-alone variable with optional initial value.
///
/// @param default_value Value the variable should have at startup.
///
AP_ParamT<T,PT> (const T initial_value = 0) :
AP_Param(),
_value(initial_value)
{
}
 
static const ap_var_type vtype = PT;
 
/// Value getter
///
T get(void) const {
return _value;
}
 
/// Value setter
///
void set(T v) {
_value = v;
}
 
/// Combined set and save
///
bool set_and_save(T v) {
set(v);
return save();
}
 
/// Combined set and save, but only does the save if the value if
/// different from the current ram value, thus saving us a
/// scan(). This should only be used where we have not set() the
/// value separately, as otherwise the value in EEPROM won't be
/// updated correctly.
bool set_and_save_ifchanged(T v) {
if (v == _value) {
return true;
}
set(v);
return save();
}
 
/// Conversion to T returns a reference to the value.
///
/// This allows the class to be used in many situations where the value would be legal.
///
operator T &() {
return _value;
}
 
/// Copy assignment from self does nothing.
///
AP_ParamT<T,PT>& operator=(AP_ParamT<T,PT>& v) {
return v;
}
 
/// Copy assignment from T is equivalent to ::set.
///
AP_ParamT<T,PT>& operator=(T v) {
_value = v;
return *this;
}
 
/// AP_ParamT types can implement AP_Param::cast_to_float
///
float cast_to_float(void) {
return (float)_value;
}
 
protected:
T _value;
};
 
 
/// Template class for non-scalar variables.
///
/// Objects of this type have a value, and can be treated in many ways as though they
/// were the value.
///
/// @tparam T The scalar type of the variable
/// @tparam PT AP_PARAM_* type
///
template<typename T, ap_var_type PT>
class AP_ParamV : public AP_Param
{
public:
static const ap_var_type vtype = PT;
 
/// Value getter
///
T get(void) const {
return _value;
}
 
/// Value setter
///
void set(T v) {
_value = v;
}
 
/// Combined set and save
///
bool set_and_save(T v) {
set(v);
return save();
}
 
/// Conversion to T returns a reference to the value.
///
/// This allows the class to be used in many situations where the value would be legal.
///
operator T &() {
return _value;
}
 
/// Copy assignment from self does nothing.
///
AP_ParamV<T,PT>& operator=(AP_ParamV<T,PT>& v) {
return v;
}
 
/// Copy assignment from T is equivalent to ::set.
///
AP_ParamV<T,PT>& operator=(T v) {
_value = v;
return *this;
}
 
protected:
T _value;
};
 
 
/// Template class for array variables.
///
/// Objects created using this template behave like arrays of the type T,
/// but are stored like single variables.
///
/// @tparam T The scalar type of the variable
/// @tparam N number of elements
/// @tparam PT the AP_PARAM_* type
///
template<typename T, uint8_t N, ap_var_type PT>
class AP_ParamA : public AP_Param
{
public:
static const ap_var_type vtype = PT;
 
/// Array operator accesses members.
///
/// @note It would be nice to range-check i here, but then what would we return?
///
T &operator [](uint8_t i) {
return _value[i];
}
 
/// Value getter
///
/// @note Returns zero for index values out of range.
///
T get(uint8_t i) const {
if (i < N) {
return _value[i];
} else {
return (T)0;
}
}
 
/// Value setter
///
/// @note Attempts to set an index out of range are discarded.
///
void set(uint8_t i, T v) {
if (i < N) {
_value[i] = v;
}
}
 
/// Copy assignment from self does nothing.
///
AP_ParamA<T,N,PT>& operator=(AP_ParamA<T,N,PT>& v) {
return v;
}
 
protected:
T _value[N];
};
 
 
 
/// Convenience macro for defining instances of the AP_ParamT template.
///
// declare a scalar type
// _t is the base type
// _suffix is the suffix on the AP_* type name
// _pt is the enum ap_var_type type
#define AP_PARAMDEF(_t, _suffix, _pt) typedef AP_ParamT<_t, _pt> AP_##_suffix;
AP_PARAMDEF(float, Float, AP_PARAM_FLOAT); // defines AP_Float
AP_PARAMDEF(int8_t, Int8, AP_PARAM_INT8); // defines AP_Int8
AP_PARAMDEF(int16_t, Int16, AP_PARAM_INT16); // defines AP_Int16
AP_PARAMDEF(int32_t, Int32, AP_PARAM_INT32); // defines AP_Int32
 
// declare an array type
// _t is the base type
// _suffix is the suffix on the AP_* type name
// _size is the size of the array
// _pt is the enum ap_var_type type
#define AP_PARAMDEFA(_t, _suffix, _size, _pt) typedef AP_ParamA<_t, _size, _pt> AP_##_suffix;
AP_PARAMDEFA(float, Vector6f, 6, AP_PARAM_VECTOR6F);
 
// declare a non-scalar type
// this is used in AP_Math.h
// _t is the base type
// _suffix is the suffix on the AP_* type name
// _pt is the enum ap_var_type type
#define AP_PARAMDEFV(_t, _suffix, _pt) typedef AP_ParamV<_t, _pt> AP_##_suffix;
 
/// Rely on built in casting for other variable types
/// to minimize template creation and save memory
#define AP_Uint8 AP_Int8
#define AP_Uint16 AP_Int16
#define AP_Uint32 AP_Int32
#define AP_Bool AP_Int8
 
#endif // AP_PARAM_H
/C-OSD/arducam-osd/libraries/AP_Common/AP_Test.h
0,0 → 1,127
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_Test.h
/// @brief A simple unit test framework.
///
/// AP_Test provides the usual test start, condition validation and reporting
/// functions in a compact form.
///
/// Each test must be contained within a block; either a standalone function or
/// a block within a function. The TEST macro is used to start a test; it creates
/// the local object which will track the results of the test and saves the name
/// for later reporting. Only one test may be performed within each block.
///
/// Within the test, use the REQUIRE macro to describe a condition that must be
/// met for the test to pass. If the condition within the macro is not met,
/// the condition will be output as a diagnostic and the test will be considered
/// to have failed.
///
/// The test ends at the end of the block, and the result of the test will be
/// output as a diagnostic.
///
/// Optionally at the end of the test suite, the Test::report method may be used
/// to summarize the results of all of the tests that were performed.
///
 
/// Unit test state and methods.
///
class Test
{
public:
/// Constructor - creates a new test.
///
/// Normally called by the TEST macro.
///
/// @param name The name of the test being started.
///
Test(const char *name);
 
/// Destructor - ends the test.
///
~Test();
 
/// Perform a success check.
///
/// @param expr If false, the test has failed.
/// @param source The expression source; emitted in the diagnostic
/// indicating test failure.
///
void require(bool expr, const char *source);
 
/// Report the overall number of tests/pass/fails.
///
static void report();
 
private:
const char *_name; ///< name of the current test
bool _fail; ///< set if any ::require calls indicate the test failed
static int _passed; ///< global pass count
static int _failed; ///< global fail count
};
 
/// Constructor
///
Test::Test(const char *name) :
_name(name),
_fail(false)
{
}
 
/// Destructor
///
Test::~Test()
{
Serial.printf("%s: %s\n", _fail ? "FAILED" : "passed", _name);
if (_fail) {
_failed++;
} else {
_passed++;
}
}
 
/// Success check
///
void
Test::require(bool expr, const char *source)
{
if (!expr) {
_fail = true;
Serial.printf("%s: fail: %s\n", _name, source);
}
}
 
/// Summary report
///
void
Test::report()
{
Serial.printf("\n%d passed %d failed\n", _passed, _failed);
}
 
int Test::_passed = 0;
int Test::_failed = 0;
 
/// Start a new test.
///
/// This should be invoked at the beginning of a block, before any REQUIRE
/// statements. A new test called name is started, and subsequent REQUIRE
/// statements will be applied to the test. The test will continue until
/// the end of the block (or until the _test object that is created otherwise
/// goes out of scope).
///
#define TEST(name) Test _test(#name)
 
/// Attach an expression to the test's success criteria.
///
/// The expression expr must evaluate true for the test to pass. If
/// it does not, the text of the expression is output as a diagnostic
/// and the test is marked as a failure.
///
#define REQUIRE(expr) _test.require(expr, #expr)
 
/C-OSD/arducam-osd/libraries/AP_Common/AP_Var_menufuncs.cpp
0,0 → 1,15
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
/// @file AP_Var_menufuncs.cpp
/// @brief Useful functions compatible with the menu system for
/// managing AP_Var variables.
 
#include <FastSerial.h>
#include <AP_Common.h>
 
/C-OSD/arducam-osd/libraries/AP_Common/AP_Vector.h
0,0 → 1,382
/*
* Vector.h
* Copyright (C) James Goppert 2010 <james.goppert@gmail.com>
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#ifndef Vector_H
#define Vector_H
 
#include "../FastSerial/BetterStream.h"
#include <stdlib.h>
#include <inttypes.h>
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include <WProgram.h>
#endif
 
#ifdef ASSERT
const static char vectorSource[] ="Vector.hpp";
#endif
 
// vector
template <class dataType,class sumType=dataType>
class Vector
{
private:
size_t size;
size_t extraAllocationSize; // extra space to add after each allocation
size_t sizeAllocated; // total allocated size
dataType* data;
public:
// default constructor
Vector(const size_t & _size=0, const size_t & _extraAllocationSize=0) : size(0), extraAllocationSize(_extraAllocationSize), sizeAllocated(0), data(NULL) {
setSize(_size);
}
// 3 vector constructor
Vector(const dataType & a, const dataType & b, const dataType & c) : size(3), extraAllocationSize(extraAllocationSize), sizeAllocated(0), data(NULL) {
setSize(size);
(*this)[0]=a;
(*this)[1]=b;
(*this)[2]=c;
}
 
// construct from array
Vector(const dataType* array, const size_t & _size, const size_t & _extraAllocationSize=0) : size(0), extraAllocationSize(_extraAllocationSize), sizeAllocated(0), data(NULL) {
setSize(_size);
for (size_t i=0; i<getSize(); i++)
(*this)[i]=array[i];
}
// copy constructor
Vector(const Vector &v) : size(0), extraAllocationSize(0), sizeAllocated(0), data(NULL) {
setSize(v.getSize());
for (size_t i=0; i<getSize(); i++)
(*this)[i]=v[i];
}
// convert to float vector
Vector<float> toFloat() const {
Vector<float> v(getSize());
for (size_t i=0; i<getSize(); i++)
v[i]=(*this)[i];
return v;
}
// destructor
virtual ~Vector() {
empty();
}
void empty() {
if (data) delete [] data;
data = NULL;
sizeAllocated=0;
size=0;
}
// set the size
void setSize(const size_t & n) {
if (n==0) {
if (data) delete [] data;
data = NULL;
sizeAllocated=0;
}
if (n>sizeAllocated) {
dataType * newData = new dataType[n+extraAllocationSize];
memcpy(newData,data,sizeof(dataType)/sizeof(char)*getSize());
memset(newData+size,0,sizeof(dataType)/sizeof(char)*(n-getSize()));
delete[] data;
data = newData;
sizeAllocated=n+extraAllocationSize;
}
size=n;
}
// return size
const size_t & getSize() const {
return size;
}
// insert
void insert(const size_t index, const dataType value) {
//Serial.println("insert called");
#ifdef ASSERT
assert(index<size+1,vectorSource,__LINE__);
#endif
//Serial.print("Old Size: ");
//Serial.println(getSize());
setSize(getSize()+1);
//Serial.print("New Size: ");
//Serial.println(getSize());
//Serial.print("Size of dataType");
//Serial.println(sizeof(dataType));
if (index != getSize()-1) {
memmove(data+index+1,data+index,sizeof(dataType)/sizeof(char)*(getSize()-1-index));
//Serial.println("memmove called and completed");
}
(*this)[index]=value;
//Serial.println("insert done");
}
// remove
void remove(const size_t & index) {
#ifdef ASSERT
assert(index<size,vectorSource,__LINE__);
#endif
memmove(data+index,data+index+1,getSize()-index-1);
setSize(getSize()-1);
}
// push_back
void push_back(const dataType & value) {
//Serial.println("push_back called");
insert(getSize(),value);
//Serial.println("push_back done");
}
// pop_front
dataType & pop_front() {
dataType tmp = (*this)[0];
remove(0);
return tmp;
}
// push_back a vector
void push_back(const Vector & vector) {
for (size_t i=0; i<vector.getSize(); i++)
push_back(vector[i]);
}
// const array access operator
const dataType & operator[](const size_t & index) const {
#ifdef ASSERT
assert(index<getSize(),vectorSource,__LINE__);
#endif
return data[index];
}
// array access operator
dataType & operator[](const size_t & index) {
#ifdef ASSERT
assert(index<getSize(),vectorSource,__LINE__);
#endif
return data[index];
}
// assignment operator
Vector & operator=(const Vector & v) {
setSize(v.getSize());
for (size_t i=0; i<getSize(); i++)
(*this)[i]=v[i];
return *this;
}
// equal
const bool operator==(const Vector& v) const {
#ifdef ASSERT
assert(getSize()==v.getSize(),vectorSource,__LINE__);
#endif
for (size_t i=0; i<getSize(); i++) {
if ((*this)[i]!=v[i]) return false;
}
return true;
}
// not equal
const bool operator!=(const Vector& v) const {
return !((*this)==v);
}
// addition
const Vector operator+(const Vector& v) const {
#ifdef ASSERT
assert(v.getSize() == getSize(),vectorSource,__LINE__);
#endif
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result(i)=(*this)[i]+v[i];
return result;
}
// addition
const Vector operator+(const dataType& s) const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result[i]=(*this)[i]+s;
return result;
}
// subtraction
const Vector operator-(const Vector& v) const {
#ifdef ASSERT
assert(v.getSize() == getSize(),vectorSource,__LINE__);
#endif
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result[i]=(*this)[i]-v[i];
return result;
}
// negation
const Vector operator-() const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result[i]=-(*this)[i];
return result;
}
// +=
Vector& operator+=(const Vector& v) {
#ifdef ASSERT
assert(v.getSize() == getSize(),vectorSource,__LINE__);
#endif
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
(*this)(i)+=v(i);
return *this;
}
// -=
Vector& operator-=( const Vector& v) {
#ifdef ASSERT
assert(v.getSize() == getSize(),vectorSource,__LINE__);
#endif
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
(*this)(i)-=v(i);
return *this;
}
// elementwise mult.
const Vector operator*(const Vector & v) const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result(i)=(*this)(i)*v(i);
return result;
}
 
// mult. by a scalar
const Vector operator*(const dataType & s) const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result(i)=(*this)(i)*s;
return result;
}
// div. by a scalar
const Vector operator/(const dataType & s) const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result(i)=(*this)(i)/s;
return result;
}
// elementwise div.
const Vector operator/(const Vector & v) const {
Vector result(getSize());
for (size_t i=0; i<getSize(); i++)
result(i)=(*this)(i)/v(i);
return result;
}
 
// div. by a scalar
Vector & operator/=(const dataType & s) {
for (size_t i=0; i<getSize(); i++)
(*this)(i)/=s;
return *this;
}
// mult. by a scalar
Vector & operator*=(const dataType & s) {
for (size_t i=0; i<getSize(); i++)
(*this)(i)*=s;
return *this;
}
// cross/vector product
const Vector cross(const Vector& v) const {
Vector result(3), u=*this;
#ifdef ASSERT
assert(u.getSize()==3 && v.getSize()==3,vectorSource,__LINE__);
#endif
result(0) = u(1)*v(2)-u(2)*v(1);
result(1) = -u(0)*v(2)+u(2)*v(0);
result(2) = u(0)*v(1)-u(1)*v(0);
return result;
}
// dot/scalar product
const dataType dot(const Vector& v) const {
#ifdef ASSERT
assert(getSize()==v.getSize(),vectorSource,__LINE__);
#endif
dataType result;
for (size_t i=0; i<getSize(); i++) result += (*this)(i)*v(i);
return result;
}
// norm
const dataType norm() const {
return sqrt(dot(*this));
}
// unit vector
const Vector unit() const {
return (*this)*(1/norm());
}
// sum
const sumType sum(const size_t & start=0,const int & end=-1) const {
size_t end2;
if (end==-1) end2=getSize()-1;
else end2=end;
sumType _sum = 0;
for (size_t i=start; i<=end2; i++) _sum += (*this)(i);
return _sum;
}
void sumFletcher(uint8_t & CK_A, uint8_t & CK_B, const size_t & start=0,const int & end=-1) const {
size_t end2;
if (end==-1) end2=getSize()-1;
else end2=end;
 
for (size_t i = start; i<=end2; i++) {
CK_A += (*this)(i);
CK_B += CK_A;
}
}
// range
const Vector range(const size_t & start, const size_t & stop) const {
Vector v(stop-start+1);
for (size_t i=start; i<=stop; i++) v(i-start) = (*this)(i);
return v;
}
// to Array
const dataType* toArray() const {
dataType array[getSize()];
for (size_t i=0; i<getSize(); i++) array[i] = (*this)(i);
return array;
}
// printing
void print(Stream & serial=Serial, const char * msg="", size_t format=0) const {
serial.print(msg);
for (size_t i=0; i<getSize(); i++) {
serial.print((*this)(i),format);
serial.print(" ");
}
serial.println();
}
// self test
static bool selfTest(Stream & serial=Serial) {
serial.println("Vector self test.");
Vector u(3),v(3),w(3);
u(0) = 1;
u(1) = 2;
u(2) = 3;
v(0) = -4;
v(1) = -5;
v(2) = -6;
u.print(serial,"u: ");
v.print(serial,"v: ");
(u+v).print(serial,"u + v: ");
(u-v).print(serial,"u - v: ");
Serial.print("u dot v: ");
Serial.println(u.dot(v));
Serial.print("size of u: ");
Serial.println(u.getSize());
Serial.print("size of v: ");
Serial.println(v.getSize());
w=u.cross(v);
w.print(serial,"u cross v: ");
Serial.print("size of u cross v: ");
Serial.println(w.getSize());
return true;
}
 
};
 
#endif
 
// vim:ts=4:sw=4:expandtab
/C-OSD/arducam-osd/libraries/AP_Common/Arduino.mk
0,0 → 1,654
#
# Copyright (c) 2010 Michael Smith. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
 
#
# Build an Arduino sketch.
#
 
################################################################################
# Paths
#
 
#
# Save the system type for later use.
#
SYSTYPE := $(shell uname)
 
# force LANG to C so awk works sanely on MacOS
export LANG=C
 
#
# Locate the sketch sources based on the initial Makefile's path
#
SRCROOT := $(realpath $(dir $(firstword $(MAKEFILE_LIST))))
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
# Workaround a $(realpath ) bug on cygwin
ifeq ($(SRCROOT),)
SRCROOT := $(shell cygpath -m ${CURDIR})
$(warning your realpath function is not working)
$(warning > setting SRCROOT to $(SRCROOT))
endif
# Correct the directory backslashes on cygwin
ARDUINO := $(subst \,/,$(ARDUINO))
endif
 
#
# We need to know the location of the sketchbook. If it hasn't been overridden,
# try the parent of the current directory. If there is no libraries directory
# there, assume that we are in a library's examples directory and try backing up
# further.
#
ifeq ($(SKETCHBOOK),)
SKETCHBOOK := $(shell cd $(SRCROOT)/.. && pwd)
ifeq ($(wildcard $(SKETCHBOOK)/libraries),)
SKETCHBOOK := $(shell cd $(SRCROOT)/../.. && pwd)
endif
ifeq ($(wildcard $(SKETCHBOOK)/libraries),)
SKETCHBOOK := $(shell cd $(SRCROOT)/../../.. && pwd)
endif
ifeq ($(wildcard $(SKETCHBOOK)/libraries),)
SKETCHBOOK := $(shell cd $(SRCROOT)/../../../.. && pwd)
endif
ifeq ($(wildcard $(SKETCHBOOK)/libraries),)
$(error ERROR: cannot determine sketchbook location - please specify on the commandline with SKETCHBOOK=<path>)
endif
else
ifeq ($(wildcard $(SKETCHBOOK)/libraries),)
$(warning WARNING: sketchbook directory $(SKETCHBOOK) contains no libraries)
endif
endif
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
# Convert cygwin path into a windows normal path
SKETCHBOOK := $(shell cygpath -d ${SKETCHBOOK})
SKETCHBOOK := $(subst \,/,$(SKETCHBOOK))
endif
 
#
# Work out the sketch name from the name of the source directory.
#
SKETCH := $(lastword $(subst /, ,$(SRCROOT)))
# Workaround a $(lastword ) bug on cygwin
ifeq ($(SKETCH),)
WORDLIST := $(subst /, ,$(SRCROOT))
SKETCH := $(word $(words $(WORDLIST)),$(WORDLIST))
endif
 
#
# Work out where we are going to be building things
#
TMPDIR ?= /tmp
BUILDROOT := $(abspath $(TMPDIR)/$(SKETCH).build)
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
# Workaround a $(abspath ) bug on cygwin
ifeq ($(BUILDROOT),)
BUILDROOT := C:$(TMPDIR)/$(SKETCH).build
$(warning your abspath function is not working)
$(warning > setting BUILDROOT to $(BUILDROOT))
endif
endif
 
# Jump over the next makefile sections when runing a "make configure"
ifneq ($(MAKECMDGOALS),configure)
 
################################################################################
# Config options
#
# The Makefile calling us must specify BOARD
#
include $(SKETCHBOOK)/config.mk
ifeq ($(PORT),)
$(error ERROR: could not locate $(SKETCHBOOK)/config.mk, please run 'make configure' first)
endif
 
HARDWARE ?= arduino
ifeq ($(BOARD),)
$(error ERROR: must set BOARD before including this file)
endif
 
#
# Find Arduino, if not explicitly specified
#
ifeq ($(ARDUINO),)
 
#
# List locations that might be valid ARDUINO settings
#
ifeq ($(SYSTYPE),Darwin)
# use Spotlight to find Arduino.app
ARDUINO_QUERY = 'kMDItemKind == Application && kMDItemFSName == Arduino.app'
ARDUINOS := $(addsuffix /Contents/Resources/Java,$(shell mdfind -literal $(ARDUINO_QUERY)))
ifeq ($(ARDUINOS),)
$(error ERROR: Spotlight cannot find Arduino on your system.)
endif
endif
 
ifeq ($(SYSTYPE),Linux)
ARDUINO_SEARCHPATH = /usr/share/arduino* /usr/local/share/arduino*
ARDUINOS := $(wildcard $(ARDUINO_SEARCHPATH))
endif
 
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
# Most of the following commands are simply to deal with whitespaces in the path
# Read the "Program Files" system directory from the windows registry
PROGRAM_FILES := $(shell cat /proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/ProgramFilesDir)
# Convert the path delimiters to /
PROGRAM_FILES := $(shell cygpath -m ${PROGRAM_FILES})
# Escape the space with a backslash
PROGRAM_FILES := $(shell echo $(PROGRAM_FILES) | sed s/\ /\\\\\ / )
# Use DOS paths because they do not contain spaces
PROGRAM_FILES := $(shell cygpath -d ${PROGRAM_FILES})
# Convert the path delimiters to /
PROGRAM_FILES := $(subst \,/,$(PROGRAM_FILES))
# Search for an Arduino instalation in a couple of paths
ARDUINO_SEARCHPATH := c:/arduino* $(PROGRAM_FILES)/arduino*
ARDUINOS := $(wildcard $(ARDUINO_SEARCHPATH))
endif
 
#
# Pick the first option if more than one candidate is found.
#
ARDUINO := $(firstword $(ARDUINOS))
ifeq ($(ARDUINO),)
$(error ERROR: Cannot find Arduino on this system, please specify on the commandline with ARDUINO=<path> or on the config.mk file)
endif
 
ifneq ($(words $(ARDUINOS)),1)
$(warning WARNING: More than one copy of Arduino was found, using $(ARDUINO))
endif
 
endif
 
################################################################################
# Tools
#
 
#
# Decide where we are going to look for tools
#
ifeq ($(SYSTYPE),Darwin)
# use the tools that come with Arduino
TOOLPATH := $(ARDUINOS)/hardware/tools/avr/bin
# use BWK awk
AWK = awk
endif
ifeq ($(SYSTYPE),Linux)
# expect that tools are on the path
TOOLPATH := $(subst :, ,$(PATH))
endif
ifeq ($(findstring CYGWIN, $(SYSTYPE)),CYGWIN)
TOOLPATH := $(ARDUINO)/hardware/tools/avr/bin
endif
 
ifeq ($(findstring CYGWIN, $(SYSTYPE)),)
FIND_TOOL = $(firstword $(wildcard $(addsuffix /$(1),$(TOOLPATH))))
else
FIND_TOOL = $(firstword $(wildcard $(addsuffix /$(1).exe,$(TOOLPATH))))
endif
CXX := $(call FIND_TOOL,avr-g++)
CC := $(call FIND_TOOL,avr-gcc)
AS := $(call FIND_TOOL,avr-gcc)
AR := $(call FIND_TOOL,avr-ar)
LD := $(call FIND_TOOL,avr-gcc)
GDB := $(call FIND_TOOL,avr-gdb)
AVRDUDE := $(call FIND_TOOL,avrdude)
AVARICE := $(call FIND_TOOL,avarice)
OBJCOPY := $(call FIND_TOOL,avr-objcopy)
ifeq ($(CXX),)
$(error ERROR: cannot find the compiler tools anywhere on the path $(TOOLPATH))
endif
 
# Find awk
AWK ?= gawk
ifeq ($(shell which $(AWK)),)
$(error ERROR: cannot find $(AWK) - you may need to install GNU awk)
endif
 
#
# Tool options
#
DEFINES = -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERS) $(EXTRAFLAGS)
OPTFLAGS = -Os -Wformat -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wformat=2 -Wno-reorder
DEPFLAGS = -MD -MT $@
 
# XXX warning options TBD
CXXOPTS = -mcall-prologues -ffunction-sections -fdata-sections -fno-exceptions
COPTS = -mcall-prologues -ffunction-sections -fdata-sections
ASOPTS = -assembler-with-cpp
LISTOPTS = -adhlns=$(@:.o=.lst)
 
CXXFLAGS = -g -mmcu=$(MCU) $(DEFINES) -Wa,$(LISTOPTS) $(OPTFLAGS) $(DEPFLAGS) $(CXXOPTS)
CFLAGS = -g -mmcu=$(MCU) $(DEFINES) -Wa,$(LISTOPTS) $(OPTFLAGS) $(DEPFLAGS) $(COPTS)
ASFLAGS = -g -mmcu=$(MCU) $(DEFINES) $(LISTOPTS) $(DEPFLAGS) $(ASOPTS)
LDFLAGS = -g -mmcu=$(MCU) $(OPTFLAGS) -Wl,--relax,--gc-sections -Wl,-Map -Wl,$(SKETCHMAP)
 
ifeq ($(BOARD),mega)
LDFLAGS = -g -mmcu=$(MCU) $(OPTFLAGS) -Wl,--gc-sections -Wl,-Map -Wl,$(SKETCHMAP)
endif
 
 
 
LIBS = -lm
 
SRCSUFFIXES = *.cpp *.c *.S
 
ifeq ($(VERBOSE),)
v = @
else
v =
endif
 
 
################################################################################
# Sketch
#
 
# Sketch source files
SKETCHPDESRCS := $(wildcard $(SRCROOT)/*.pde $(SRCROOT)/*.ino)
SKETCHSRCS := $(wildcard $(addprefix $(SRCROOT)/,$(SRCSUFFIXES)))
SKETCHPDE := $(wildcard $(SRCROOT)/$(SKETCH).pde $(SRCROOT)/$(SKETCH).ino)
SKETCHCPP := $(BUILDROOT)/$(SKETCH).cpp
ifneq ($(words $(SKETCHPDE)),1)
$(error ERROR: sketch $(SKETCH) must contain exactly one of $(SKETCH).pde or $(SKETCH).ino)
endif
 
# Sketch object files
SKETCHOBJS := $(subst $(SRCROOT),$(BUILDROOT),$(SKETCHSRCS)) $(SKETCHCPP)
SKETCHOBJS := $(addsuffix .o,$(basename $(SKETCHOBJS)))
 
# List of input files to the sketch.cpp file in the order they should
# be appended to create it
SKETCHCPP_SRC := $(SKETCHPDE) $(sort $(filter-out $(SKETCHPDE),$(SKETCHPDESRCS)))
 
################################################################################
# Libraries
#
# Pick libraries to add to the include path and to link with based on
# #include directives in the sketchfiles.
#
# For example:
#
# #include <Foo.h>
#
# implies that there might be a Foo library.
#
# Note that the # and $ require special treatment to avoid upsetting
# make.
#
SEXPR = 's/^[[:space:]]*\#include[[:space:]][<\"]([^>\"./]+).*$$/\1/p'
ifeq ($(SYSTYPE),Darwin)
LIBTOKENS := $(sort $(shell cat $(SKETCHPDESRCS) $(SKETCHSRCS) | sed -nEe $(SEXPR)))
else
LIBTOKENS := $(sort $(shell cat $(SKETCHPDESRCS) $(SKETCHSRCS) | sed -nre $(SEXPR)))
endif
 
#
# Find sketchbook libraries referenced by the sketch.
#
# Include paths for sketch libraries
#
SKETCHLIBS := $(wildcard $(addprefix $(SKETCHBOOK)/libraries/,$(LIBTOKENS)))
SKETCHLIBNAMES := $(notdir $(SKETCHLIBS))
SKETCHLIBSRCDIRS := $(SKETCHLIBS) $(addsuffix /utility,$(SKETCHLIBS))
SKETCHLIBSRCS := $(wildcard $(foreach suffix,$(SRCSUFFIXES),$(addsuffix /$(suffix),$(SKETCHLIBSRCDIRS))))
SKETCHLIBOBJS := $(addsuffix .o,$(basename $(subst $(SKETCHBOOK),$(BUILDROOT),$(SKETCHLIBSRCS))))
SKETCHLIBINCLUDES := $(addprefix -I,$(SKETCHLIBS))
 
#
# Find Arduino libraries referenced by the sketch. Exclude any that
# are overloaded by versions in the sketchbook.
#
ARDUINOLIBS := $(wildcard $(addprefix $(ARDUINO)/libraries/,$(filter-out $(SKETCHLIBNAMES),$(LIBTOKENS))))
ARDUINOLIBNAMES := $(notdir $(ARDUINOLIBS))
ARDUINOLIBSRCDIRS := $(ARDUINOLIBS) $(addsuffix /utility,$(ARDUINOLIBS))
ARDUINOLIBSRCS := $(wildcard $(foreach suffix,$(SRCSUFFIXES),$(addsuffix /$(suffix),$(ARDUINOLIBSRCDIRS))))
ARDUINOLIBOBJS := $(addsuffix .o,$(basename $(subst $(ARDUINO),$(BUILDROOT),$(ARDUINOLIBSRCS))))
ARDUINOLIBINCLUDES := $(addprefix -I,$(ARDUINOLIBS))
 
# Library object files
LIBOBJS := $(SKETCHLIBOBJS) $(ARDUINOLIBOBJS)
 
################################################################################
# *duino core
#
 
# Pull the Arduino version
ARDUINO_VERS := $(shell $(SKETCHBOOK)/Tools/scripts/arduino_version.sh $(ARDUINO))
 
# Find the hardware directory to use
HARDWARE_DIR := $(firstword $(wildcard $(SKETCHBOOK)/hardware/$(HARDWARE) \
$(ARDUINO)/hardware/$(HARDWARE)))
ifeq ($(HARDWARE_DIR),)
$(error ERROR: hardware directory for $(HARDWARE) not found)
endif
 
# Find the boards.txt that we are using
BOARDFILE := $(wildcard $(HARDWARE_DIR)/boards.txt)
ifeq ($(BOARDFILE),)
$(error ERROR: could not locate boards.txt for hardware $(HARDWARE))
endif
 
# Extract needed build parameters from the boardfile
MCU := $(shell grep $(BOARD).build.mcu $(BOARDFILE) | cut -d = -f 2)
F_CPU := $(shell grep $(BOARD).build.f_cpu $(BOARDFILE) | cut -d = -f 2)
HARDWARE_CORE := $(shell grep $(BOARD).build.core $(BOARDFILE) | cut -d = -f 2)
UPLOAD_SPEED := $(shell grep $(BOARD).upload.speed $(BOARDFILE) | cut -d = -f 2)
 
ifeq ($(UPLOAD_PROTOCOL),)
UPLOAD_PROTOCOL := $(shell grep $(BOARD).upload.protocol $(BOARDFILE) | cut -d = -f 2)
endif
 
# Adding override for mega since boards.txt uses stk500 instead of
# arduino on 22 release
ifeq ($(BOARD),mega)
UPLOAD_PROTOCOL := arduino
endif
 
ifeq ($(MCU),)
$(error ERROR: Could not locate board $(BOARD) in $(BOARDFILE))
endif
 
# Hardware source files
CORESRC_DIR = $(HARDWARE_DIR)/cores/$(HARDWARE_CORE)
CORESRC_PATTERNS = $(foreach suffix,/*.cpp /*.c /*.S,$(addsuffix $(suffix),$(CORESRC_DIR)))
CORESRCS := $(wildcard $(CORESRC_PATTERNS))
 
# Include spec for core includes
COREINCLUDES = -I$(CORESRC_DIR) -I$(HARDWARE_DIR)/variants/mega
 
# Hardware object files
CORELIBOBJS := $(subst $(CORESRC_DIR),$(BUILDROOT)/$(HARDWARE),$(CORESRCS))
CORELIBOBJS := $(addsuffix .o,$(basename $(CORELIBOBJS)))
 
################################################################################
# Built products
#
 
# The ELF file
SKETCHELF = $(BUILDROOT)/$(SKETCH).elf
 
# HEX file
SKETCHHEX = $(BUILDROOT)/$(SKETCH).hex
 
# EEP file
SKETCHEEP = $(BUILDROOT)/$(SKETCH).eep
 
# Map file
SKETCHMAP = $(BUILDROOT)/$(SKETCH).map
 
# The core library
CORELIB = $(BUILDROOT)/$(HARDWARE)/core.a
 
# All of the objects that may be built
ALLOBJS = $(SKETCHOBJS) $(LIBOBJS) $(CORELIBOBJS)
 
# All of the dependency files that may be generated
ALLDEPS = $(ALLOBJS:%.o=%.d)
endif
 
################################################################################
# Targets
#
 
all: $(SKETCHELF) $(SKETCHEEP) $(SKETCHHEX)
 
.PHONY: upload
upload: $(SKETCHHEX)
$(AVRDUDE) -c $(UPLOAD_PROTOCOL) -p $(MCU) -P $(PORT) -b$(UPLOAD_SPEED) -U flash:w:$(SKETCHHEX):i
 
configure:
$(warning WARNING - A $(SKETCHBOOK)/config.mk file has been written)
$(warning Please edit the file to match your system configuration, if you use a different board or port)
@echo \# Select \'mega\' for the original APM, or \'mega2560\' for the V2 APM. > $(SKETCHBOOK)/config.mk
@echo BOARD=mega2560 >> $(SKETCHBOOK)/config.mk
@echo \# The communication port used to communicate with the APM. >> $(SKETCHBOOK)/config.mk
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
@echo PORT=com3 >> $(SKETCHBOOK)/config.mk
else
@echo PORT=/dev/ttyUSB0 >> $(SKETCHBOOK)/config.mk
endif
 
debug:
$(AVARICE) --mkII --capture --jtag usb :4242 & \
gnome-terminal -x $(GDB) $(SKETCHELF) & \
echo -e '\n\nat the gdb prompt type "target remote localhost:4242"'
 
# this allows you to flash your image via JTAG for when you
# have completely broken your USB
jtag-program:
$(AVARICE) --mkII --jtag usb --erase --program --file $(SKETCHELF)
 
clean:
ifneq ($(findstring CYGWIN, $(SYSTYPE)),)
@del /S $(BUILDROOT)
else
@rm -fr $(BUILDROOT)
endif
 
################################################################################
# Rules
#
 
# fetch dependency info from a previous build if any of it exists
-include $(ALLDEPS)
 
# common header for rules, prints what is being built
define RULEHDR
@echo %% $(subst $(BUILDROOT)/,,$@)
@mkdir -p $(dir $@)
endef
 
# Link the final object
$(SKETCHELF): $(SKETCHOBJS) $(LIBOBJS) $(CORELIB)
$(RULEHDR)
$(v)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
 
# Create the hex file
$(SKETCHHEX): $(SKETCHELF)
$(RULEHDR)
$(v)$(OBJCOPY) -O ihex -R .eeprom $< $@
 
# Create the eep file
$(SKETCHEEP): $(SKETCHELF)
$(RULEHDR)
$(v)$(OBJCOPY) -O ihex -j.eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $@
 
#
# Build sketch objects
#
SKETCH_INCLUDES = $(SKETCHLIBINCLUDES) $(ARDUINOLIBINCLUDES) $(COREINCLUDES)
 
$(BUILDROOT)/%.o: $(BUILDROOT)/%.cpp
$(RULEHDR)
$(v)$(CXX) $(CXXFLAGS) -c -o $@ $< -I$(SRCROOT) $(SKETCH_INCLUDES)
 
$(BUILDROOT)/%.o: $(SRCROOT)/%.cpp
$(RULEHDR)
$(v)$(CXX) $(CXXFLAGS) -c -o $@ $< $(SKETCH_INCLUDES)
 
$(BUILDROOT)/%.o: $(SRCROOT)/%.c
$(RULEHDR)
$(v)$(CC) $(CFLAGS) -c -o $@ $< $(SKETCH_INCLUDES)
 
$(BUILDROOT)/%.o: $(SRCROOT)/%.S
$(RULEHDR)
$(v)$(AS) $(ASFLAGS) -c -o $@ $< $(SKETCH_INCLUDES)
 
#
# Build library objects from sources in the sketchbook
#
SLIB_INCLUDES = -I$(dir $<)/utility $(SKETCHLIBINCLUDES) $(ARDUINOLIBINCLUDES) $(COREINCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(SKETCHBOOK)/libraries/%.cpp
$(RULEHDR)
$(v)$(CXX) $(CXXFLAGS) -c -o $@ $< $(SLIB_INCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(SKETCHBOOK)/libraries/%.c
$(RULEHDR)
$(v)$(CC) $(CFLAGS) -c -o $@ $< $(SLIB_INCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(SKETCHBOOK)/libraries/%.S
$(RULEHDR)
$(v)$(AS) $(ASFLAGS) -c -o $@ $< $(SLIB_INCLUDES)
 
#
# Build library objects from Ardiuno library sources
#
ALIB_INCLUDES = -I$(dir $<)/utility $(ARDUINOLIBINCLUDES) $(COREINCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(ARDUINO)/libraries/%.cpp
$(RULEHDR)
$(v)$(CXX) $(CXXFLAGS) -c -o $@ $< $(ALIB_INCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(ARDUINO)/libraries/%.c
$(RULEHDR)
$(v)$(CC) $(CFLAGS) -c -o $@ $< $(ALIB_INCLUDES)
 
$(BUILDROOT)/libraries/%.o: $(ARDUINO)/libraries/%.S
$(RULEHDR)
$(v)$(AS) $(ASFLAGS) -c -o $@ $< $(ALIB_INCLUDES)
 
#
# Build objects from the hardware core
#
$(BUILDROOT)/$(HARDWARE)/%.o: $(CORESRC_DIR)/%.cpp
$(RULEHDR)
$(v)$(CXX) $(filter-out -W%,$(CXXFLAGS)) -c -o $@ $< $(COREINCLUDES)
 
$(BUILDROOT)/$(HARDWARE)/%.o: $(CORESRC_DIR)/%.c
@mkdir -p $(dir $@)
$(v)$(CC) $(filter-out -W%,$(CFLAGS)) -c -o $@ $< $(COREINCLUDES)
 
$(BUILDROOT)/$(HARDWARE)/%.o: $(CORESRC_DIR)/%.S
$(RULEHDR)
$(v)$(AS) $(ASFLAGS) -c -o $@ $< $(COREINCLUDES)
 
#
# Build the core library
#
$(CORELIB): $(CORELIBOBJS)
$(RULEHDR)
$(v)$(AR) -rcs $@ $^
 
#
# Build the sketch.cpp file
#
# This process strives to be as faithful to the Arduino implementation as
# possible. Conceptually, the process is as follows:
#
# * All of the .pde/.ino files are concatenated, starting with the file named
# for the sketch and followed by the others in alphabetical order.
# * An insertion point is created in the concatenated file at
# the first statement that isn't a preprocessor directive or comment.
# * An include of "WProgram.h" is inserted at the insertion point.
# * The file following the insertion point is scanned for function definitions
# and prototypes for these functions are inserted at the insertion point.
#
# In addition, we add #line directives wherever the originating file changes
# to help backtrack from compiler messages and in the debugger.
#
$(SKETCHCPP): $(SKETCHCPP_SRC)
$(RULEHDR)
$(v)$(AWK) -v mode=header '$(SKETCH_SPLITTER)' $(SKETCHCPP_SRC) > $@
$(v)echo "#line 1 \"autogenerated\"" >> $@
$(v)echo "#if defined(ARDUINO) && ARDUINO >= 100" >> $@
$(v)echo "#include \"Arduino.h\"" >> $@
$(v)echo "#else" >> $@
$(v)echo "#include \"WProgram.h\"" >> $@
$(v)echo "#endif" >> $@
$(v)$(AWK) '$(SKETCH_PROTOTYPER)' $(SKETCHCPP_SRC) >> $@
$(v)$(AWK) -v mode=body '$(SKETCH_SPLITTER)' $(SKETCHCPP_SRC) >> $@
 
# delete the sketch.cpp file if a processing error occurs
.DELETE_ON_ERROR: $(SKETCHCPP)
 
#
# The sketch splitter is an awk script used to split off the
# header and body of the concatenated .pde/.ino files. It also
# inserts #line directives to help in backtracking from compiler
# and debugger messages to the original source file.
#
# Note that # and $ require special treatment here to avoid upsetting
# make.
#
# This script requires BWK or GNU awk.
#
define SKETCH_SPLITTER
BEGIN { \
scanning = 1; \
printing = (mode ~ "header") ? 1 : 0; \
} \
{ toggles = 1 } \
(FNR == 1) && printing { \
printf "#line %d \"%s\"\n", FNR, FILENAME; \
} \
/^[[:space:]]*\/\*/,/\*\// { \
toggles = 0; \
} \
/^[[:space:]]*$$/ || /^[[:space:]]*\/\/.*/ || /^\#.*$$/ { \
toggles = 0; \
} \
scanning && toggles { \
scanning = 0; \
printing = !printing; \
if (printing) { \
printf "#line %d \"%s\"\n", FNR, FILENAME; \
} \
} \
printing
endef
 
#
# The prototype scanner is an awk script used to generate function
# prototypes from the concantenated .pde/.ino files.
#
# Function definitions are expected to follow the form
#
# <newline><type>[<qualifier>...]<name>([<arguments>]){
#
# with whitespace permitted between the various elements. The pattern
# is assembled from separate subpatterns to make adjustments easier.
#
# Note that $ requires special treatment here to avoid upsetting make,
# and backslashes are doubled in the partial patterns to satisfy
# escaping rules.
#
# This script requires BWK or GNU awk.
#
define SKETCH_PROTOTYPER
BEGIN { \
RS="{"; \
type = "((\\n)|(^))[[:space:]]*[[:alnum:]_]+[[:space:]]+"; \
qualifiers = "([[:alnum:]_\\*&]+[[:space:]]*)*"; \
name = "[[:alnum:]_]+[[:space:]]*"; \
args = "\\([[:space:][:alnum:]_,&\\*\\[\\]]*\\)"; \
bodycuddle = "[[:space:]]*$$"; \
pattern = type qualifiers name args bodycuddle; \
} \
match($$0, pattern) { \
proto = substr($$0, RSTART, RLENGTH); \
gsub("\n", " ", proto); \
printf "%s;\n", proto; \
}
endef
/C-OSD/arducam-osd/libraries/AP_Common/c++.cpp
0,0 → 1,91
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
//
// C++ runtime support not provided by Arduino
//
// Note: use new/delete with caution. The heap is small and
// easily fragmented.
//
 
#include <stdlib.h>
#include "c++.h"
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
 
void * operator new(size_t size)
{
#ifdef AP_DISPLAYMEM
displayMemory();
#endif
return(calloc(size, 1));
}
 
void operator delete(void *p)
{
if (p) free(p);
}
 
extern "C" void __cxa_pure_virtual()
{
while (1)
{
Serial.println("Error: pure virtual call");
delay(1000);
}
}
 
void * operator new[](size_t size)
{
#ifdef AP_DISPLAYMEM
displayMemory();
#endif
return(calloc(size, 1));
}
 
void operator delete[](void * ptr)
{
if (ptr) free(ptr);
}
 
__extension__ typedef int __guard __attribute__((mode (__DI__)));
 
int __cxa_guard_acquire(__guard *g)
{
return !*(char *)(g);
};
 
void __cxa_guard_release (__guard *g)
{
*(char *)g = 1;
};
 
void __cxa_guard_abort (__guard *) {};
 
// free memory
extern unsigned int __bss_end;
extern void *__brkval;
 
void displayMemory()
{
static int minMemFree=0;
if (minMemFree<=0 || freeMemory()<minMemFree) {
minMemFree = freeMemory();
Serial.print("bytes free: ");
Serial.println(minMemFree);
}
}
 
int freeMemory()
{
int free_memory;
 
if ((intptr_t)__brkval == 0)
free_memory = ((intptr_t)&free_memory) - ((intptr_t)&__bss_end);
else
free_memory = ((intptr_t)&free_memory) - ((intptr_t)__brkval);
 
return free_memory;
}
/C-OSD/arducam-osd/libraries/AP_Common/c++.h
0,0 → 1,7
#ifndef CPP_H
#define CPP_H
 
void displayMemory();
int freeMemory();
 
#endif
/C-OSD/arducam-osd/libraries/AP_Common/examples/menu/menu.pde
0,0 → 1,43
 
#include <FastSerial.h>
#include <AP_Common.h>
 
FastSerialPort0(Serial);
 
int8_t
menu_test(uint8_t argc, const Menu::arg *argv)
{
int i;
 
Serial.printf("This is a test with %d arguments\n", argc);
for (i = 1; i < argc; i++) {
Serial.printf("%d: int %ld float ", i, argv[i].i);
Serial.println(argv[i].f, 6); // gross
}
}
 
int8_t
menu_auto(uint8_t argc, const Menu::arg *argv)
{
Serial.println("auto text");
}
 
const struct Menu::command top_menu_commands[] PROGMEM = {
{"*", menu_auto},
{"test", menu_test},
};
 
MENU(top, "menu", top_menu_commands);
 
void
setup(void)
{
Serial.begin(38400);
top.run();
}
 
void
loop(void)
{
}
 
/C-OSD/arducam-osd/libraries/AP_Common/include/menu.h
0,0 → 1,143
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
/// @file menu.h
/// @brief Simple commandline menu subsystem.
/// @discussion
/// The Menu class implements a simple CLI that accepts commands typed by
/// the user, and passes the arguments to those commands to a function
/// defined as handing the command.
///
/// Commands are defined in an array of Menu::command structures passed
/// to the constructor. Each entry in the array defines one command.
///
/// Arguments passed to the handler function are pre-converted to both
/// long and float for convenience.
 
#ifndef __AP_COMMON_MENU_H
#define __AP_COMMON_MENU_H
 
#include <inttypes.h>
 
#define MENU_COMMANDLINE_MAX 32 ///< maximum input line length
#define MENU_ARGS_MAX 4 ///< maximum number of arguments
#define MENU_COMMAND_MAX 14 ///< maximum size of a command name
 
/// Class defining and handling one menu tree
class Menu {
public:
/// argument passed to a menu function
///
/// Space-delimited arguments are parsed from the commandline and
/// separated into these structures.
///
/// If the argument cannot be parsed as a float or a long, the value
/// of f or i respectively is undefined. You should range-check
/// the inputs to your function.
///
struct arg {
const char *str; ///< string form of the argument
long i; ///< integer form of the argument (if a number)
float f; ///< floating point form of the argument (if a number)
};
 
/// menu command function
///
/// Functions called by menu array entries are expected to be of this
/// type.
///
/// @param argc The number of valid arguments, including the
/// name of the command in argv[0]. Will never be
/// more than MENU_ARGS_MAX.
/// @param argv Pointer to an array of Menu::arg structures
/// detailing any optional arguments given to the
/// command. argv[0] is always the name of the
/// command, so that the same function can be used
/// to handle more than one command.
///
typedef int8_t (*func)(uint8_t argc, const struct arg *argv);
 
/// menu pre-prompt function
///
/// Called immediately before waiting for the user to type a command; can be
/// used to display help text or status, for example.
///
/// If this function returns false, the menu exits.
///
typedef bool (*preprompt)(void);
 
/// menu command description
///
struct command {
/// Name of the command, as typed or received.
/// Command names are limited in size to keep this structure compact.
///
const char command[MENU_COMMAND_MAX];
 
/// The function to call when the command is received.
///
/// The argc argument will be at least 1, and no more than
/// MENU_ARGS_MAX. The argv array will be populated with
/// arguments typed/received up to MENU_ARGS_MAX. The command
/// name will always be in argv[0].
///
/// Commands may return -2 to cause the menu itself to exit.
/// The "?", "help" and "exit" commands are always defined, but
/// can be overridden by explicit entries in the command array.
///
int8_t (*func)(uint8_t argc, const struct arg *argv); ///< callback function
};
 
/// constructor
///
/// Note that you should normally not call the constructor directly. Use
/// the MENU and MENU2 macros defined below.
///
/// @param prompt The prompt to be displayed with this menu.
/// @param commands An array of ::command structures in program memory (PROGMEM).
/// @param entries The number of entries in the menu.
///
Menu(const char *prompt, const struct command *commands, uint8_t entries, preprompt ppfunc = 0);
 
/// menu runner
void run(void);
 
private:
/// Implements the default 'help' command.
///
void _help(void); ///< implements the 'help' command
 
/// calls the function for the n'th menu item
///
/// @param n Index for the menu item to call
/// @param argc Number of arguments prepared for the menu item
///
int8_t _call(uint8_t n, uint8_t argc);
 
const char *_prompt; ///< prompt to display
const command *_commands; ///< array of commands
const uint8_t _entries; ///< size of the menu
const preprompt _ppfunc; ///< optional pre-prompt action
 
static char _inbuf[MENU_COMMANDLINE_MAX]; ///< input buffer
static arg _argv[MENU_ARGS_MAX + 1]; ///< arguments
};
 
/// Macros used to define a menu.
///
/// The commands argument should be an arary of Menu::command structures, one
/// per command name. The array does not need to be terminated with any special
/// record.
///
/// Use name.run() to run the menu.
///
/// The MENU2 macro supports the optional pre-prompt printing function.
///
#define MENU(name, prompt, commands) \
static const char __menu_name__ ##name[] PROGMEM = prompt; \
static Menu name(__menu_name__ ##name, commands, sizeof(commands) / sizeof(commands[0]))
 
#define MENU2(name, prompt, commands, preprompt) \
static const char __menu_name__ ##name[] PROGMEM = prompt; \
static Menu name(__menu_name__ ##name, commands, sizeof(commands) / sizeof(commands[0]), preprompt)
 
#endif
/C-OSD/arducam-osd/libraries/AP_Common/keywords.txt
0,0 → 1,4
Menu KEYWORD1
run KEYWORD2
Location KEYWORD2
 
/C-OSD/arducam-osd/libraries/AP_Common/menu.cpp
0,0 → 1,155
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
//
// Simple commandline menu system.
//
 
#include <FastSerial.h>
#include <AP_Common.h>
 
#include <ctype.h>
#include <string.h>
#include <avr/pgmspace.h>
 
#include "include/menu.h"
 
// statics
char Menu::_inbuf[MENU_COMMANDLINE_MAX];
Menu::arg Menu::_argv[MENU_ARGS_MAX + 1];
 
// constructor
Menu::Menu(const prog_char *prompt, const Menu::command *commands, uint8_t entries, preprompt ppfunc) :
_prompt(prompt),
_commands(commands),
_entries(entries),
_ppfunc(ppfunc)
{
}
 
// run the menu
void
Menu::run(void)
{
int8_t ret;
uint8_t len, i;
uint8_t argc;
int c;
char *s;
 
// loop performing commands
for (;;) {
 
// run the pre-prompt function, if one is defined
if ((NULL != _ppfunc) && !_ppfunc())
return;
 
// loop reading characters from the input
len = 0;
Serial.printf("%S] ", FPSTR(_prompt));
for (;;) {
c = Serial.read();
if (-1 == c)
continue;
// carriage return -> process command
if ('\r' == c) {
_inbuf[len] = '\0';
Serial.write('\r');
Serial.write('\n');
break;
}
// backspace
if ('\b' == c) {
if (len > 0) {
len--;
Serial.write('\b');
Serial.write(' ');
Serial.write('\b');
continue;
}
}
// printable character
if (isprint(c) && (len < (MENU_COMMANDLINE_MAX - 1))) {
_inbuf[len++] = c;
Serial.write((char)c);
continue;
}
}
 
// split the input line into tokens
argc = 0;
_argv[argc++].str = strtok_r(_inbuf, " ", &s);
// XXX should an empty line by itself back out of the current menu?
while (argc <= MENU_ARGS_MAX) {
_argv[argc].str = strtok_r(NULL, " ", &s);
if ('\0' == _argv[argc].str)
break;
_argv[argc].i = atol(_argv[argc].str);
_argv[argc].f = atof(_argv[argc].str); // calls strtod, > 700B !
argc++;
}
 
if (_argv[0].str == NULL) {
continue;
}
 
// populate arguments that have not been specified with "" and 0
// this is safer than NULL in the case where commands may look
// without testing argc
i = argc;
while (i <= MENU_ARGS_MAX) {
_argv[i].str = "";
_argv[i].i = 0;
_argv[i].f = 0;
i++;
}
 
bool cmd_found = false;
// look for a command matching the first word (note that it may be empty)
for (i = 0; i < _entries; i++) {
if (!strcasecmp_P(_argv[0].str, _commands[i].command)) {
ret = _call(i, argc);
cmd_found=true;
if (-2 == ret)
return;
break;
}
}
 
// implicit commands
if (i == _entries) {
if (!strcmp(_argv[0].str, "?") || (!strcasecmp_P(_argv[0].str, PSTR("help")))) {
_help();
cmd_found=true;
} else if (!strcasecmp_P(_argv[0].str, PSTR("exit"))) {
return;
}
}
 
if (cmd_found==false)
{
Serial.println("Invalid command, type 'help'");
}
 
}
}
 
// display the list of commands in response to the 'help' command
void
Menu::_help(void)
{
int i;
 
Serial.println("Commands:");
for (i = 0; i < _entries; i++)
Serial.printf(" %S\n", FPSTR(_commands[i].command));
}
 
// run the n'th command in the menu
int8_t
Menu::_call(uint8_t n, uint8_t argc)
{
func fn;
 
fn = (func)pgm_read_pointer(&_commands[n].func);
return(fn(argc, &_argv[0]));
}
/C-OSD/arducam-osd/libraries/AP_Common/tools/eedump.c
0,0 → 1,84
/*
* Simple tool to dump the AP_Var contents from an EEPROM dump
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
uint8_t eeprom[0x1000];
 
#pragma pack(1)
 
struct EEPROM_header {
uint16_t magic;
uint8_t revision;
uint8_t spare;
};
 
static const uint16_t k_EEPROM_magic = 0x5041;
static const uint16_t k_EEPROM_revision = 2;
 
struct Var_header {
uint8_t size:6;
uint8_t spare:2;
uint8_t key;
};
 
static const uint8_t k_key_sentinel = 0xff;
 
void
fail(const char *why)
{
fprintf(stderr, "ERROR: %s\n", why);
exit(1);
}
 
int
main(int argc, char *argv[])
{
FILE *fp;
struct EEPROM_header *header;
struct Var_header *var;
unsigned index;
unsigned i;
 
if (argc != 2) {
fail("missing EEPROM file name");
}
if (NULL == (fp = fopen(argv[1], "rb"))) {
fail("can't open EEPROM file");
}
if (1 != fread(eeprom, sizeof(eeprom), 1, fp)) {
fail("can't read EEPROM file");
}
fclose(fp);
 
header = (struct EEPROM_header *)&eeprom[0];
if (header->magic != k_EEPROM_magic) {
fail("bad magic in EEPROM file");
}
if (header->revision != 2) {
fail("unsupported EEPROM format revision");
}
printf("Header OK\n");
 
index = sizeof(*header);
for (;;) {
var = (struct Var_header *)&eeprom[index];
if (var->key == k_key_sentinel) {
printf("end sentinel at %u\n", index);
break;
}
printf("%04x: key %u size %d\n ", index, var->key, var->size + 1);
index += sizeof(*var);
for (i = 0; i <= var->size; i++) {
printf(" %02x", eeprom[index + i]);
}
printf("\n");
index += var->size + 1;
if (index >= sizeof(eeprom)) {
fflush(stdout);
fail("missing end sentinel");
}
}
}
/C-OSD/arducam-osd/libraries/AP_Common/tools/eedump.pl
0,0 → 1,47
#!/usr/bin/perl
 
 
$file = $ARGV[0];
 
 
open(IN,$file) || die print "Failed to open file: $file : $!";
 
read(IN,$buffer,1);
read(IN,$buffer2,1);
if (ord($buffer) != 0x41 && ord($buffer2) != 0x50) {
print "bad header ". $buffer ." ".$buffer2. "\n";
exit;
}
read(IN,$buffer,1);
if (ord($buffer) != 2) {
print "bad version";
exit;
}
 
# spare
read(IN,$buffer,1);
 
$a = 0;
 
while (read(IN,$buffer,1)) {
$pos = (tell(IN) - 1);
 
$size = ((ord($buffer) & 63));
 
read(IN,$buffer,1);
 
if (ord($buffer) == 0xff) {
printf("end sentinel at %u\n", $pos);
last;
}
 
printf("%04x: key %u size %d\n ", $pos, ord($buffer), $size + 1);
 
for ($i = 0; $i <= ($size); $i++) {
read(IN,$buffer,1);
printf(" %02x", ord($buffer));
}
print "\n";
}
 
close IN;
/C-OSD/arducam-osd/libraries/AP_Common/tools/eedump_apparam.c
0,0 → 1,181
/*
* Simple tool to dump the AP_Param contents from an EEPROM dump
* Andrew Tridgell February 2012
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
uint8_t eeprom[0x1000];
 
#pragma pack(1)
 
struct EEPROM_header {
uint8_t magic[2];
uint8_t revision;
uint8_t spare;
};
 
static const uint16_t k_EEPROM_magic0 = 0x50;
static const uint16_t k_EEPROM_magic1 = 0x41;
static const uint16_t k_EEPROM_revision = 5;
 
enum ap_var_type {
AP_PARAM_NONE = 0,
AP_PARAM_INT8,
AP_PARAM_INT16,
AP_PARAM_INT32,
AP_PARAM_FLOAT,
AP_PARAM_VECTOR3F,
AP_PARAM_VECTOR6F,
AP_PARAM_MATRIX3F,
AP_PARAM_GROUP
};
 
static const char *type_names[8] = {
"NONE", "INT8", "INT16", "INT32", "FLOAT", "VECTOR3F", "MATRIX6F", "GROUP"
};
 
struct Param_header {
uint8_t key;
uint8_t group_element;
uint8_t type;
};
 
 
static const uint8_t _sentinal_key = 0xFF;
static const uint8_t _sentinal_type = 0xFF;
static const uint8_t _sentinal_group = 0xFF;
 
static uint8_t type_size(enum ap_var_type type)
{
switch (type) {
case AP_PARAM_NONE:
case AP_PARAM_GROUP:
return 0;
case AP_PARAM_INT8:
return 1;
case AP_PARAM_INT16:
return 2;
case AP_PARAM_INT32:
return 4;
case AP_PARAM_FLOAT:
return 4;
case AP_PARAM_VECTOR3F:
return 3*4;
case AP_PARAM_VECTOR6F:
return 6*4;
case AP_PARAM_MATRIX3F:
return 3*3*4;
}
printf("unknown type %u\n", type);
return 0;
}
 
static void
fail(const char *why)
{
fprintf(stderr, "ERROR: %s\n", why);
exit(1);
}
 
int
main(int argc, char *argv[])
{
FILE *fp;
struct EEPROM_header *header;
struct Param_header *var;
unsigned index;
unsigned i;
 
if (argc != 2) {
fail("missing EEPROM file name");
}
if (NULL == (fp = fopen(argv[1], "rb"))) {
fail("can't open EEPROM file");
}
if (1 != fread(eeprom, sizeof(eeprom), 1, fp)) {
fail("can't read EEPROM file");
}
fclose(fp);
 
header = (struct EEPROM_header *)&eeprom[0];
if (header->magic[0] != k_EEPROM_magic0 ||
header->magic[1] != k_EEPROM_magic1) {
fail("bad magic in EEPROM file");
}
if (header->revision != k_EEPROM_revision) {
fail("unsupported EEPROM format revision");
}
printf("Header OK\n");
 
index = sizeof(*header);
for (;;) {
uint8_t size;
var = (struct Param_header *)&eeprom[index];
if (var->key == _sentinal_key ||
var->group_element == _sentinal_group ||
var->type == _sentinal_type) {
printf("end sentinel at %u\n", index);
break;
}
size = type_size(var->type);
printf("%04x: type %u (%s) key %u group_element %u size %d value ",
index, var->type, type_names[var->type], var->key, var->group_element, size);
index += sizeof(*var);
switch (var->type) {
case AP_PARAM_INT8:
printf("%d\n", (int)*(int8_t *)&eeprom[index]);
break;
case AP_PARAM_INT16:
printf("%d\n", (int)*(int16_t *)&eeprom[index]);
break;
case AP_PARAM_INT32:
printf("%d\n", (int)*(int32_t *)&eeprom[index]);
break;
case AP_PARAM_FLOAT:
printf("%f\n", *(float *)&eeprom[index]);
break;
case AP_PARAM_VECTOR3F:
printf("%f %f %f\n",
*(float *)&eeprom[index],
*(float *)&eeprom[index+4],
*(float *)&eeprom[index+8]);
break;
case AP_PARAM_VECTOR6F:
printf("%f %f %f %f %f %f\n",
*(float *)&eeprom[index],
*(float *)&eeprom[index+4],
*(float *)&eeprom[index+8],
*(float *)&eeprom[index+12],
*(float *)&eeprom[index+16],
*(float *)&eeprom[index+20]);
break;
case AP_PARAM_MATRIX3F:
printf("%f %f %f %f %f %f %f %f %f\n",
*(float *)&eeprom[index],
*(float *)&eeprom[index+4],
*(float *)&eeprom[index+8],
*(float *)&eeprom[index+12],
*(float *)&eeprom[index+16],
*(float *)&eeprom[index+20],
*(float *)&eeprom[index+24],
*(float *)&eeprom[index+28],
*(float *)&eeprom[index+32]);
break;
default:
printf("NONE\n");
break;
}
for (i = 0; i < size; i++) {
printf(" %02x", eeprom[index + i]);
}
printf("\n");
index += size;
if (index >= sizeof(eeprom)) {
fflush(stdout);
fail("missing end sentinel");
}
}
return 0;
}
/C-OSD/arducam-osd/libraries/AP_Common/tools/eedump_apparam.pl
0,0 → 1,78
#!/usr/bin/perl
 
 
$file = $ARGV[0];
 
 
open(IN,$file) || die print "Failed to open file: $file : $!";
 
read(IN,$buffer,1);
read(IN,$buffer2,1);
if (ord($buffer2) != 0x41 && ord($buffer) != 0x50) {
print "bad header ". $buffer ." ".$buffer2. "\n";
exit;
}
read(IN,$buffer,1);
if (ord($buffer) != 5) {
print "bad version";
exit;
}
 
# spare
read(IN,$buffer,1);
 
$a = 0;
 
while (read(IN,$buffer,1)) {
$pos = (tell(IN) - 1);
 
if (ord($buffer) == 0xff) {
printf("end sentinel at %u\n", $pos);
last;
}
read(IN,$buffer2,1);
read(IN,$buffer3,1);
if (ord($buffer3) == 0) { #none
$size = 0;
$type = "NONE";
} elsif (ord($buffer3) == 1) { #int8
$size = 1;
$type = "INT8";
} elsif (ord($buffer3) == 2) { #int16
$size = 2;
$type = "INT16";
} elsif (ord($buffer3) == 3) { #int32
$size = 4;
$type = "INT32";
} elsif (ord($buffer3) == 4) { #float
$size = 4;
$type = "FLOAT";
} elsif (ord($buffer3) == 5) { #vector 3
$size = 3*4;
$type = "VECTOR3F";
} elsif (ord($buffer3) == 6) { #vector6
$size = 6*4;
$type = "VECTOR6F";
} elsif (ord($buffer3) == 7) { #matrix
$size = 3*3*4;
$type = "MATRIX6F";
} elsif (ord($buffer3) == 8) { #group
$size = 0;
$type = "GROUP";
} else {
print "Unknown type\n";
$size = 0;
}
 
printf("%04x: type %u ($type) key %u group_element %u size %d\n ", $pos, ord($buffer3),ord($buffer),ord($buffer2), $size);
 
for ($i = 0; $i < ($size); $i++) {
read(IN,$buffer,1);
printf(" %02x", ord($buffer));
}
print "\n";
}
 
close IN;
/C-OSD/arducam-osd/libraries/AP_Math/AP_Math.cpp
0,0 → 1,69
#include "AP_Math.h"
 
// a varient of asin() that checks the input ranges and ensures a
// valid angle as output. If nan is given as input then zero is
// returned.
float safe_asin(float v)
{
if (isnan(v)) {
return 0.0;
}
if (v >= 1.0) {
return PI/2;
}
if (v <= -1.0) {
return -PI/2;
}
return asin(v);
}
 
// a varient of sqrt() that checks the input ranges and ensures a
// valid value as output. If a negative number is given then 0 is
// returned. The reasoning is that a negative number for sqrt() in our
// code is usually caused by small numerical rounding errors, so the
// real input should have been zero
float safe_sqrt(float v)
{
float ret = sqrt(v);
if (isnan(ret)) {
return 0;
}
return ret;
}
 
 
// find a rotation that is the combination of two other
// rotations. This is used to allow us to add an overall board
// rotation to an existing rotation of a sensor such as the compass
// Note that this relies the set of rotations being complete. The
// optional 'found' parameter is for the test suite to ensure that it is.
enum Rotation rotation_combination(enum Rotation r1, enum Rotation r2, bool *found)
{
Vector3f tv1, tv2;
enum Rotation r;
tv1(1,2,3);
tv1.rotate(r1);
tv1.rotate(r2);
 
for (r=ROTATION_NONE; r<ROTATION_MAX;
r = (enum Rotation)((uint8_t)r+1)) {
Vector3f diff;
tv2(1,2,3);
tv2.rotate(r);
diff = tv1 - tv2;
if (diff.length() < 1.0e-6) {
// we found a match
if (found) {
*found = true;
}
return r;
}
}
 
// we found no matching rotation. Someone has edited the
// rotations list and broken its completeness property ...
if (found) {
*found = false;
}
return ROTATION_NONE;
}
/C-OSD/arducam-osd/libraries/AP_Math/AP_Math.h
0,0 → 1,32
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
#ifndef AP_MATH_H
#define AP_MATH_H
 
// Assorted useful math operations for ArduPilot(Mega)
 
#include <AP_Common.h>
#include <stdint.h>
#include "rotations.h"
#include "vector2.h"
#include "vector3.h"
#include "matrix3.h"
#include "quaternion.h"
#include "polygon.h"
 
// define AP_Param types AP_Vector3f and Ap_Matrix3f
AP_PARAMDEFV(Matrix3f, Matrix3f, AP_PARAM_MATRIX3F);
AP_PARAMDEFV(Vector3f, Vector3f, AP_PARAM_VECTOR3F);
 
// a varient of asin() that always gives a valid answer.
float safe_asin(float v);
 
// a varient of sqrt() that always gives a valid answer.
float safe_sqrt(float v);
 
// find a rotation that is the combination of two other
// rotations. This is used to allow us to add an overall board
// rotation to an existing rotation of a sensor such as the compass
enum Rotation rotation_combination(enum Rotation r1, enum Rotation r2, bool *found = NULL);
 
#endif
/C-OSD/arducam-osd/libraries/AP_Math/examples/eulers/Makefile
0,0 → 1,4
include ../../../AP_Common/Arduino.mk
 
sitl:
make -f ../../../../libraries/Desktop/Desktop.mk
/C-OSD/arducam-osd/libraries/AP_Math/examples/eulers/eulers.pde
0,0 → 1,281
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// Unit tests for the AP_Math euler code
//
 
#include <FastSerial.h>
#include <AP_Common.h>
#include <AP_Math.h>
 
FastSerialPort(Serial, 0);
 
#ifdef DESKTOP_BUILD
// all of this is needed to build with SITL
#include <DataFlash.h>
#include <APM_RC.h>
#include <GCS_MAVLink.h>
#include <Arduino_Mega_ISR_Registry.h>
#include <AP_PeriodicProcess.h>
#include <AP_ADC.h>
#include <SPI.h>
#include <I2C.h>
#include <AP_Baro.h>
#include <AP_Compass.h>
#include <AP_GPS.h>
#include <Filter.h>
Arduino_Mega_ISR_Registry isr_registry;
AP_Baro_BMP085_HIL barometer;
AP_Compass_HIL compass;
#endif
 
#include <AP_Declination.h>
 
 
static float rad_diff(float rad1, float rad2)
{
float diff = rad1 - rad2;
if (diff > PI) {
diff -= 2*PI;
}
if (diff < -PI) {
diff += 2*PI;
}
return fabs(diff);
}
 
static void check_result(float roll, float pitch, float yaw,
float roll2, float pitch2, float yaw2)
{
if (isnan(roll2) ||
isnan(pitch2) ||
isnan(yaw2)) {
Serial.printf("NAN eulers roll=%f pitch=%f yaw=%f\n",
roll, pitch, yaw);
}
 
if (rad_diff(roll2,roll) > ToRad(179)) {
// reverse all 3
roll2 += fmod(roll2+PI, 2*PI);
pitch2 += fmod(pitch2+PI, 2*PI);
yaw2 += fmod(yaw2+PI, 2*PI);
}
 
if (rad_diff(roll2,roll) > 0.01 ||
rad_diff(pitch2, pitch) > 0.01 ||
rad_diff(yaw2, yaw) > 0.01) {
if (pitch >= PI/2 ||
pitch <= -PI/2 ||
ToDeg(rad_diff(pitch, PI/2)) < 1 ||
ToDeg(rad_diff(pitch, -PI/2)) < 1) {
// we expect breakdown at these poles
Serial.printf("breakdown eulers roll=%f/%f pitch=%f/%f yaw=%f/%f\n",
ToDeg(roll), ToDeg(roll2), ToDeg(pitch), ToDeg(pitch2), ToDeg(yaw), ToDeg(yaw2));
} else {
Serial.printf("incorrect eulers roll=%f/%f pitch=%f/%f yaw=%f/%f\n",
ToDeg(roll), ToDeg(roll2), ToDeg(pitch), ToDeg(pitch2), ToDeg(yaw), ToDeg(yaw2));
}
}
}
 
static void test_euler(float roll, float pitch, float yaw)
{
Matrix3f m;
float roll2, pitch2, yaw2;
 
m.from_euler(roll, pitch, yaw);
m.to_euler(&roll2, &pitch2, &yaw2);
check_result(roll, pitch, yaw, roll2, pitch2, yaw2);
}
 
#define ARRAY_LENGTH(x) (sizeof((x))/sizeof((x)[0]))
 
static const float angles[] = { 0, PI/8, PI/4, PI/2, PI,
-PI/8, -PI/4, -PI/2, -PI};
 
void test_matrix_eulers(void)
{
uint8_t i, j, k;
uint8_t N = ARRAY_LENGTH(angles);
 
Serial.println("rotation matrix unit tests\n");
 
for (i=0; i<N; i++)
for (j=0; j<N; j++)
for (k=0; k<N; k++)
test_euler(angles[i], angles[j], angles[k]);
 
Serial.println("tests done\n");
}
 
static void test_quaternion(float roll, float pitch, float yaw)
{
Quaternion q;
float roll2, pitch2, yaw2;
 
q.from_euler(roll, pitch, yaw);
q.to_euler(&roll2, &pitch2, &yaw2);
check_result(roll, pitch, yaw, roll2, pitch2, yaw2);
}
 
void test_quaternion_eulers(void)
{
uint8_t i, j, k;
uint8_t N = ARRAY_LENGTH(angles);
 
Serial.println("quaternion unit tests\n");
 
test_quaternion(PI/4, 0, 0);
test_quaternion(0, PI/4, 0);
test_quaternion(0, 0, PI/4);
test_quaternion(-PI/4, 0, 0);
test_quaternion(0, -PI/4, 0);
test_quaternion(0, 0, -PI/4);
test_quaternion(-PI/4, 1, 1);
test_quaternion(1, -PI/4, 1);
test_quaternion(1, 1, -PI/4);
 
test_quaternion(ToRad(89), 0, 0.1);
test_quaternion(0, ToRad(89), 0.1);
test_quaternion(0.1, 0, ToRad(89));
 
test_quaternion(ToRad(91), 0, 0.1);
test_quaternion(0, ToRad(91), 0.1);
test_quaternion(0.1, 0, ToRad(91));
 
for (i=0; i<N; i++)
for (j=0; j<N; j++)
for (k=0; k<N; k++)
test_quaternion(angles[i], angles[j], angles[k]);
 
Serial.println("tests done\n");
}
 
 
static void test_conversion(float roll, float pitch, float yaw)
{
Quaternion q;
Matrix3f m, m2;
 
float roll2, pitch2, yaw2;
float roll3, pitch3, yaw3;
 
q.from_euler(roll, pitch, yaw);
q.to_euler(&roll2, &pitch2, &yaw2);
check_result(roll, pitch, yaw, roll2, pitch2, yaw2);
 
q.rotation_matrix(m);
m.to_euler(&roll2, &pitch2, &yaw2);
 
m2.from_euler(roll, pitch, yaw);
m2.to_euler(&roll3, &pitch3, &yaw3);
if (m.is_nan()) {
Serial.printf("NAN matrix roll=%f pitch=%f yaw=%f\n",
roll, pitch, yaw);
}
 
check_result(roll, pitch, yaw, roll2, pitch2, yaw2);
check_result(roll, pitch, yaw, roll3, pitch3, yaw3);
}
 
void test_conversions(void)
{
uint8_t i, j, k;
uint8_t N = ARRAY_LENGTH(angles);
 
Serial.println("matrix/quaternion tests\n");
 
test_conversion(1, 1.1, 1.2);
test_conversion(1, -1.1, 1.2);
test_conversion(1, -1.1, -1.2);
test_conversion(-1, 1.1, -1.2);
test_conversion(-1, 1.1, 1.2);
 
for (i=0; i<N; i++)
for (j=0; j<N; j++)
for (k=0; k<N; k++)
test_conversion(angles[i], angles[j], angles[k]);
 
Serial.println("tests done\n");
}
 
void test_frame_transforms(void)
{
Vector3f v, v2;
Quaternion q;
Matrix3f m;
 
Serial.println("frame transform tests\n");
 
q.from_euler(ToRad(90), 0, 0);
v2 = v = Vector3f(0, 0, 1);
q.earth_to_body(v2);
printf("%f %f %f\n", v2.x, v2.y, v2.z);
}
 
// generate a random float between -1 and 1
static float rand_num(void)
{
float ret = ((unsigned)random()) % 2000000;
return (ret - 1.0e6) / 1.0e6;
}
 
void test_matrix_rotate(void)
{
Matrix3f m1, m2, diff;
Vector3f r;
 
m1.identity();
m2.identity();
r.x = rand_num();
r.y = rand_num();
r.z = rand_num();
 
for (uint16_t i = 0; i<1000; i++) {
// old method
Matrix3f temp_matrix;
temp_matrix.a.x = 0;
temp_matrix.a.y = -r.z;
temp_matrix.a.z = r.y;
temp_matrix.b.x = r.z;
temp_matrix.b.y = 0;
temp_matrix.b.z = -r.x;
temp_matrix.c.x = -r.y;
temp_matrix.c.y = r.x;
temp_matrix.c.z = 0;
temp_matrix = m1 * temp_matrix;
m1 += temp_matrix;
 
// new method
m2.rotate(r);
 
// check they behave in the same way
diff = m1 - m2;
float err = diff.a.length() + diff.b.length() + diff.c.length();
 
if (err > 0) {
Serial.printf("ERROR: i=%u err=%f\n", (unsigned)i, err);
}
}
}
 
/*
euler angle tests
*/
void setup(void)
{
Serial.begin(115200);
Serial.println("euler unit tests\n");
 
test_conversion(0, PI, 0);
 
test_frame_transforms();
test_conversions();
test_quaternion_eulers();
test_matrix_eulers();
test_matrix_rotate();
}
 
void
loop(void)
{
}
/C-OSD/arducam-osd/libraries/AP_Math/examples/polygon/Makefile
0,0 → 1,0
include ../../../AP_Common/Arduino.mk
/C-OSD/arducam-osd/libraries/AP_Math/examples/polygon/polygon.pde
0,0 → 1,115
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// Unit tests for the AP_Math polygon code
//
 
#include <FastSerial.h>
#include <AP_Common.h>
#include <AP_Math.h>
 
FastSerialPort(Serial, 0);
 
/*
this is the boundary of the 2010 outback challenge
Note that the last point must be the same as the first for the
Polygon_outside() algorithm
*/
static const Vector2l OBC_boundary[] = {
Vector2l(-265695640, 1518373730),
Vector2l(-265699560, 1518394050),
Vector2l(-265768230, 1518411420),
Vector2l(-265773080, 1518403440),
Vector2l(-265815110, 1518419500),
Vector2l(-265784860, 1518474690),
Vector2l(-265994890, 1518528860),
Vector2l(-266092110, 1518747420),
Vector2l(-266454780, 1518820530),
Vector2l(-266435720, 1518303500),
Vector2l(-265875990, 1518344050),
Vector2l(-265695640, 1518373730)
};
 
static const struct {
Vector2l point;
bool outside;
} test_points[] = {
{ Vector2l(-266398870, 1518220000), true },
{ Vector2l(-266418700, 1518709260), false },
{ Vector2l(-350000000, 1490000000), true },
{ Vector2l(0, 0), true },
{ Vector2l(-265768150, 1518408250), false },
{ Vector2l(-265774060, 1518405860), true },
{ Vector2l(-266435630, 1518303440), true },
{ Vector2l(-266435650, 1518313540), false },
{ Vector2l(-266435690, 1518303530), false },
{ Vector2l(-266435690, 1518303490), true },
{ Vector2l(-265875990, 1518344049), true },
{ Vector2l(-265875990, 1518344051), false },
{ Vector2l(-266454781, 1518820530), true },
{ Vector2l(-266454779, 1518820530), true },
{ Vector2l(-266092109, 1518747420), true },
{ Vector2l(-266092111, 1518747420), false },
{ Vector2l(-266092110, 1518747421), true },
{ Vector2l(-266092110, 1518747419), false },
{ Vector2l(-266092111, 1518747421), true },
{ Vector2l(-266092109, 1518747421), true },
{ Vector2l(-266092111, 1518747419), false },
};
 
#define ARRAY_LENGTH(x) (sizeof((x))/sizeof((x)[0]))
 
/*
polygon tests
*/
void setup(void)
{
unsigned i, count;
bool all_passed = true;
uint32_t start_time;
 
Serial.begin(115200);
Serial.println("polygon unit tests\n");
 
if (!Polygon_complete(OBC_boundary, ARRAY_LENGTH(OBC_boundary))) {
Serial.println("OBC boundary is not complete!");
all_passed = false;
}
 
if (Polygon_complete(OBC_boundary, ARRAY_LENGTH(OBC_boundary)-1)) {
Serial.println("Polygon_complete test failed");
all_passed = false;
}
 
for (i=0; i<ARRAY_LENGTH(test_points); i++) {
bool result;
result = Polygon_outside(test_points[i].point, OBC_boundary, ARRAY_LENGTH(OBC_boundary));
Serial.printf_P(PSTR("%10f,%10f %s %s\n"),
1.0e-7*test_points[i].point.x,
1.0e-7*test_points[i].point.y,
result?"OUTSIDE":"INSIDE ",
result == test_points[i].outside?"PASS":"FAIL");
if (result != test_points[i].outside) {
all_passed = false;
}
}
Serial.println(all_passed?"TEST PASSED":"TEST FAILED");
 
Serial.println("Speed test:");
start_time = micros();
for (count=0; count<1000; count++) {
for (i=0; i<ARRAY_LENGTH(test_points); i++) {
bool result;
result = Polygon_outside(test_points[i].point, OBC_boundary, ARRAY_LENGTH(OBC_boundary));
if (result != test_points[i].outside) {
all_passed = false;
}
}
}
Serial.printf("%u usec/call\n", (unsigned)((micros() - start_time)/(count*ARRAY_LENGTH(test_points))));
Serial.println(all_passed?"ALL TESTS PASSED":"TEST FAILED");
}
 
void
loop(void)
{
}
/C-OSD/arducam-osd/libraries/AP_Math/examples/rotations/Makefile
0,0 → 1,4
include ../../../AP_Common/Arduino.mk
 
sitl:
make -f ../../../../libraries/Desktop/Desktop.mk
/C-OSD/arducam-osd/libraries/AP_Math/examples/rotations/rotations.pde
0,0 → 1,205
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
//
// Unit tests for the AP_Math rotations code
//
 
#include <FastSerial.h>
#include <AP_Common.h>
#include <AP_Math.h>
 
FastSerialPort(Serial, 0);
 
#ifdef DESKTOP_BUILD
// all of this is needed to build with SITL
#include <DataFlash.h>
#include <APM_RC.h>
#include <GCS_MAVLink.h>
#include <Arduino_Mega_ISR_Registry.h>
#include <AP_PeriodicProcess.h>
#include <AP_ADC.h>
#include <AP_Baro.h>
#include <AP_Compass.h>
#include <AP_GPS.h>
Arduino_Mega_ISR_Registry isr_registry;
AP_Baro_BMP085_HIL barometer;
AP_Compass_HIL compass;
#endif
 
#include <AP_Declination.h> // ArduPilot Mega Declination Helper Library
 
 
// standard rotation matrices (these are the originals from the old code)
#define MATRIX_ROTATION_NONE Matrix3f(1, 0, 0, 0, 1, 0, 0 ,0, 1)
#define MATRIX_ROTATION_YAW_45 Matrix3f(0.70710678, -0.70710678, 0, 0.70710678, 0.70710678, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_90 Matrix3f(0, -1, 0, 1, 0, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_135 Matrix3f(-0.70710678, -0.70710678, 0, 0.70710678, -0.70710678, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_180 Matrix3f(-1, 0, 0, 0, -1, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_225 Matrix3f(-0.70710678, 0.70710678, 0, -0.70710678, -0.70710678, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_270 Matrix3f(0, 1, 0, -1, 0, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_315 Matrix3f(0.70710678, 0.70710678, 0, -0.70710678, 0.70710678, 0, 0, 0, 1)
#define MATRIX_ROTATION_ROLL_180 Matrix3f(1, 0, 0, 0, -1, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_45 Matrix3f(0.70710678, 0.70710678, 0, 0.70710678, -0.70710678, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_90 Matrix3f(0, 1, 0, 1, 0, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_135 Matrix3f(-0.70710678, 0.70710678, 0, 0.70710678, 0.70710678, 0, 0, 0, -1)
#define MATRIX_ROTATION_PITCH_180 Matrix3f(-1, 0, 0, 0, 1, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_225 Matrix3f(-0.70710678, -0.70710678, 0, -0.70710678, 0.70710678, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_270 Matrix3f(0, -1, 0, -1, 0, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_315 Matrix3f(0.70710678, -0.70710678, 0, -0.70710678, -0.70710678, 0, 0, 0, -1)
 
static void print_matrix(Matrix3f &m)
{
Serial.printf("[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]\n",
m.a.x, m.a.y, m.a.z,
m.b.x, m.b.y, m.b.z,
m.c.x, m.c.y, m.c.z);
}
 
// test one matrix
static void test_matrix(enum Rotation rotation, Matrix3f m)
{
Matrix3f m2, diff;
const float accuracy = 1.0e-6;
m2.rotation(rotation);
diff = (m - m2);
if (diff.a.length() > accuracy ||
diff.b.length() > accuracy ||
diff.c.length() > accuracy) {
Serial.printf("rotation matrix %u incorrect\n", (unsigned)rotation);
print_matrix(m);
print_matrix(m2);
}
}
 
// test generation of rotation matrices
static void test_matrices(void)
{
Serial.println("testing rotation matrices\n");
test_matrix(ROTATION_NONE, MATRIX_ROTATION_NONE);
test_matrix(ROTATION_YAW_45, MATRIX_ROTATION_YAW_45);
test_matrix(ROTATION_YAW_90, MATRIX_ROTATION_YAW_90);
test_matrix(ROTATION_YAW_135, MATRIX_ROTATION_YAW_135);
test_matrix(ROTATION_YAW_180, MATRIX_ROTATION_YAW_180);
test_matrix(ROTATION_YAW_225, MATRIX_ROTATION_YAW_225);
test_matrix(ROTATION_YAW_270, MATRIX_ROTATION_YAW_270);
test_matrix(ROTATION_YAW_315, MATRIX_ROTATION_YAW_315);
test_matrix(ROTATION_ROLL_180, MATRIX_ROTATION_ROLL_180);
test_matrix(ROTATION_ROLL_180_YAW_45, MATRIX_ROTATION_ROLL_180_YAW_45);
test_matrix(ROTATION_ROLL_180_YAW_90, MATRIX_ROTATION_ROLL_180_YAW_90);
test_matrix(ROTATION_ROLL_180_YAW_135, MATRIX_ROTATION_ROLL_180_YAW_135);
test_matrix(ROTATION_PITCH_180, MATRIX_ROTATION_PITCH_180);
test_matrix(ROTATION_ROLL_180_YAW_225, MATRIX_ROTATION_ROLL_180_YAW_225);
test_matrix(ROTATION_ROLL_180_YAW_270, MATRIX_ROTATION_ROLL_180_YAW_270);
test_matrix(ROTATION_ROLL_180_YAW_315, MATRIX_ROTATION_ROLL_180_YAW_315);
}
 
// test rotation of vectors
static void test_vector(enum Rotation rotation, Vector3f v1, bool show=true)
{
Vector3f v2, diff;
Matrix3f m;
v2 = v1;
m.rotation(rotation);
v1.rotate(rotation);
v2 = m * v2;
diff = v1 - v2;
if (diff.length() > 1.0e-6) {
Serial.printf("rotation vector %u incorrect\n", (unsigned)rotation);
Serial.printf("%u %f %f %f\n",
(unsigned)rotation,
v2.x, v2.y, v2.z);
}
if (show) {
Serial.printf("%u %f %f %f\n",
(unsigned)rotation,
v1.x, v1.y, v1.z);
}
}
 
// generate a random float between -1 and 1
static float rand_num(void)
{
float ret = ((unsigned)random()) % 2000000;
return (ret - 1.0e6) / 1.0e6;
}
 
// test rotation of vectors
static void test_vector(enum Rotation rotation)
{
uint8_t i;
 
Vector3f v1;
v1.x = 1;
v1.y = 2;
v1.z = 3;
test_vector(rotation, v1);
 
for (i=0; i<10; i++) {
v1.x = rand_num();
v1.y = rand_num();
v1.z = rand_num();
test_vector(rotation, v1, false);
}
}
 
// test rotation of vectors
static void test_vectors(void)
{
Serial.println("testing rotation of vectors\n");
test_vector(ROTATION_NONE);
test_vector(ROTATION_YAW_45);
test_vector(ROTATION_YAW_90);
test_vector(ROTATION_YAW_135);
test_vector(ROTATION_YAW_180);
test_vector(ROTATION_YAW_225);
test_vector(ROTATION_YAW_270);
test_vector(ROTATION_YAW_315);
test_vector(ROTATION_ROLL_180);
test_vector(ROTATION_ROLL_180_YAW_45);
test_vector(ROTATION_ROLL_180_YAW_90);
test_vector(ROTATION_ROLL_180_YAW_135);
test_vector(ROTATION_PITCH_180);
test_vector(ROTATION_ROLL_180_YAW_225);
test_vector(ROTATION_ROLL_180_YAW_270);
test_vector(ROTATION_ROLL_180_YAW_315);
}
 
 
// test combinations of rotations
static void test_combinations(void)
{
enum Rotation r1, r2, r3;
bool found;
 
for (r1=ROTATION_NONE; r1<ROTATION_MAX;
r1 = (enum Rotation)((uint8_t)r1+1)) {
for (r2=ROTATION_NONE; r2<ROTATION_MAX;
r2 = (enum Rotation)((uint8_t)r2+1)) {
r3 = rotation_combination(r1, r2, &found);
if (found) {
Serial.printf("rotation: %u + %u -> %u\n",
(unsigned)r1, (unsigned)r2, (unsigned)r3);
} else {
Serial.printf("ERROR rotation: no combination for %u + %u\n",
(unsigned)r1, (unsigned)r2);
}
}
}
}
 
/*
rotation tests
*/
void setup(void)
{
Serial.begin(115200);
Serial.println("rotation unit tests\n");
test_matrices();
test_vectors();
test_combinations();
Serial.println("rotation unit tests done\n");
}
 
void
loop(void)
{
}
/C-OSD/arducam-osd/libraries/AP_Math/keywords.txt
0,0 → 1,29
Vector2 KEYWORD1
Vector2i KEYWORD1
Vector2ui KEYWORD1
Vector2l KEYWORD1
Vector2ul KEYWORD1
Vector2f KEYWORD1
Vector3 KEYWORD1
Vector3i KEYWORD1
Vector3ui KEYWORD1
Vector3l KEYWORD1
Vector3ul KEYWORD1
Vector3f KEYWORD1
Matrix3 KEYWORD1
Matrix3i KEYWORD1
Matrix3ui KEYWORD1
Matrix3l KEYWORD1
Matrix3ul KEYWORD1
Matrix3f KEYWORD1
length_squared KEYWORD2
length KEYWORD2
normalize KEYWORD2
normalized KEYWORD2
reflect KEYWORD2
project KEYWORD2
projected KEYWORD2
angle KEYWORD2
angle_normalized KEYWORD2
rotate KEYWORD2
rotated KEYWORD2
/C-OSD/arducam-osd/libraries/AP_Math/matrix3.cpp
0,0 → 1,199
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* matrix3.cpp
* Copyright (C) Andrew Tridgell 2012
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include "AP_Math.h"
 
#define HALF_SQRT_2 0.70710678118654757
 
#define MATRIX_ROTATION_NONE Matrix3f(1, 0, 0, 0, 1, 0, 0 ,0, 1)
#define MATRIX_ROTATION_YAW_45 Matrix3f(HALF_SQRT_2, -HALF_SQRT_2, 0, HALF_SQRT_2, HALF_SQRT_2, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_90 Matrix3f(0, -1, 0, 1, 0, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_135 Matrix3f(-HALF_SQRT_2, -HALF_SQRT_2, 0, HALF_SQRT_2, -HALF_SQRT_2, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_180 Matrix3f(-1, 0, 0, 0, -1, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_225 Matrix3f(-HALF_SQRT_2, HALF_SQRT_2, 0, -HALF_SQRT_2, -HALF_SQRT_2, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_270 Matrix3f(0, 1, 0, -1, 0, 0, 0, 0, 1)
#define MATRIX_ROTATION_YAW_315 Matrix3f(HALF_SQRT_2, HALF_SQRT_2, 0, -HALF_SQRT_2, HALF_SQRT_2, 0, 0, 0, 1)
#define MATRIX_ROTATION_ROLL_180 Matrix3f(1, 0, 0, 0, -1, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_45 Matrix3f(HALF_SQRT_2, HALF_SQRT_2, 0, HALF_SQRT_2, -HALF_SQRT_2, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_90 Matrix3f(0, 1, 0, 1, 0, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_135 Matrix3f(-HALF_SQRT_2, HALF_SQRT_2, 0, HALF_SQRT_2, HALF_SQRT_2, 0, 0, 0, -1)
#define MATRIX_ROTATION_PITCH_180 Matrix3f(-1, 0, 0, 0, 1, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_225 Matrix3f(-HALF_SQRT_2, -HALF_SQRT_2, 0, -HALF_SQRT_2, HALF_SQRT_2, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_270 Matrix3f(0, -1, 0, -1, 0, 0, 0, 0, -1)
#define MATRIX_ROTATION_ROLL_180_YAW_315 Matrix3f(HALF_SQRT_2, -HALF_SQRT_2, 0, -HALF_SQRT_2, -HALF_SQRT_2, 0, 0, 0, -1)
 
// fill in a matrix with a standard rotation
template <typename T>
void Matrix3<T>::rotation(enum Rotation r)
{
switch (r) {
case ROTATION_NONE:
case ROTATION_MAX:
*this = MATRIX_ROTATION_NONE;
break;
case ROTATION_YAW_45:
*this = MATRIX_ROTATION_YAW_45;
break;
case ROTATION_YAW_90:
*this = MATRIX_ROTATION_YAW_90;
break;
case ROTATION_YAW_135:
*this = MATRIX_ROTATION_YAW_135;
break;
case ROTATION_YAW_180:
*this = MATRIX_ROTATION_YAW_180;
break;
case ROTATION_YAW_225:
*this = MATRIX_ROTATION_YAW_225;
break;
case ROTATION_YAW_270:
*this = MATRIX_ROTATION_YAW_270;
break;
case ROTATION_YAW_315:
*this = MATRIX_ROTATION_YAW_315;
break;
case ROTATION_ROLL_180:
*this = MATRIX_ROTATION_ROLL_180;
break;
case ROTATION_ROLL_180_YAW_45:
*this = MATRIX_ROTATION_ROLL_180_YAW_45;
break;
case ROTATION_ROLL_180_YAW_90:
*this = MATRIX_ROTATION_ROLL_180_YAW_90;
break;
case ROTATION_ROLL_180_YAW_135:
*this = MATRIX_ROTATION_ROLL_180_YAW_135;
break;
case ROTATION_PITCH_180:
*this = MATRIX_ROTATION_PITCH_180;
break;
case ROTATION_ROLL_180_YAW_225:
*this = MATRIX_ROTATION_ROLL_180_YAW_225;
break;
case ROTATION_ROLL_180_YAW_270:
*this = MATRIX_ROTATION_ROLL_180_YAW_270;
break;
case ROTATION_ROLL_180_YAW_315:
*this = MATRIX_ROTATION_ROLL_180_YAW_315;
break;
}
}
 
// create a rotation matrix given some euler angles
// this is based on http://gentlenav.googlecode.com/files/EulerAngles.pdf
template <typename T>
void Matrix3<T>::from_euler(float roll, float pitch, float yaw)
{
float cp = cos(pitch);
float sp = sin(pitch);
float sr = sin(roll);
float cr = cos(roll);
float sy = sin(yaw);
float cy = cos(yaw);
 
a.x = cp * cy;
a.y = (sr * sp * cy) - (cr * sy);
a.z = (cr * sp * cy) + (sr * sy);
b.x = cp * sy;
b.y = (sr * sp * sy) + (cr * cy);
b.z = (cr * sp * sy) - (sr * cy);
c.x = -sp;
c.y = sr * cp;
c.z = cr * cp;
}
 
// calculate euler angles from a rotation matrix
// this is based on http://gentlenav.googlecode.com/files/EulerAngles.pdf
template <typename T>
void Matrix3<T>::to_euler(float *roll, float *pitch, float *yaw)
{
if (pitch != NULL) {
*pitch = -safe_asin(c.x);
}
if (roll != NULL) {
*roll = atan2(c.y, c.z);
}
if (yaw != NULL) {
*yaw = atan2(b.x, a.x);
}
}
 
// apply an additional rotation from a body frame gyro vector
// to a rotation matrix.
template <typename T>
void Matrix3<T>::rotate(const Vector3<T> &g)
{
Matrix3f temp_matrix;
temp_matrix.a.x = a.y * g.z - a.z * g.y;
temp_matrix.a.y = a.z * g.x - a.x * g.z;
temp_matrix.a.z = a.x * g.y - a.y * g.x;
temp_matrix.b.x = b.y * g.z - b.z * g.y;
temp_matrix.b.y = b.z * g.x - b.x * g.z;
temp_matrix.b.z = b.x * g.y - b.y * g.x;
temp_matrix.c.x = c.y * g.z - c.z * g.y;
temp_matrix.c.y = c.z * g.x - c.x * g.z;
temp_matrix.c.z = c.x * g.y - c.y * g.x;
 
(*this) += temp_matrix;
}
 
 
// multiplication by a vector
template <typename T>
Vector3<T> Matrix3<T>::operator *(const Vector3<T> &v) const
{
return Vector3<T>(a.x * v.x + a.y * v.y + a.z * v.z,
b.x * v.x + b.y * v.y + b.z * v.z,
c.x * v.x + c.y * v.y + c.z * v.z);
}
 
// multiplication of transpose by a vector
template <typename T>
Vector3<T> Matrix3<T>::mul_transpose(const Vector3<T> &v) const
{
return Vector3<T>(a.x * v.x + b.x * v.y + c.x * v.z,
a.y * v.x + b.y * v.y + c.y * v.z,
a.z * v.x + b.z * v.y + c.z * v.z);
}
 
// multiplication by another Matrix3<T>
template <typename T>
Matrix3<T> Matrix3<T>::operator *(const Matrix3<T> &m) const
{
Matrix3<T> temp (Vector3<T>(a.x * m.a.x + a.y * m.b.x + a.z * m.c.x,
a.x * m.a.y + a.y * m.b.y + a.z * m.c.y,
a.x * m.a.z + a.y * m.b.z + a.z * m.c.z),
Vector3<T>(b.x * m.a.x + b.y * m.b.x + b.z * m.c.x,
b.x * m.a.y + b.y * m.b.y + b.z * m.c.y,
b.x * m.a.z + b.y * m.b.z + b.z * m.c.z),
Vector3<T>(c.x * m.a.x + c.y * m.b.x + c.z * m.c.x,
c.x * m.a.y + c.y * m.b.y + c.z * m.c.y,
c.x * m.a.z + c.y * m.b.z + c.z * m.c.z));
return temp;
}
 
 
// only define for float
template void Matrix3<float>::rotation(enum Rotation);
template void Matrix3<float>::rotate(const Vector3<float> &g);
template void Matrix3<float>::from_euler(float roll, float pitch, float yaw);
template void Matrix3<float>::to_euler(float *roll, float *pitch, float *yaw);
template Vector3<float> Matrix3<float>::operator *(const Vector3<float> &v) const;
template Vector3<float> Matrix3<float>::mul_transpose(const Vector3<float> &v) const;
template Matrix3<float> Matrix3<float>::operator *(const Matrix3<float> &m) const;
/C-OSD/arducam-osd/libraries/AP_Math/matrix3.h
0,0 → 1,153
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
// Copyright 2010 Michael Smith, all rights reserved.
 
// This library is free software; you can redistribute it and / or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
 
// Inspired by:
/****************************************
* 3D Vector Classes
* By Bill Perone (billperone@yahoo.com)
*/
 
//
// 3x3 matrix implementation.
//
// Note that the matrix is organised in row-normal form (the same as
// applies to array indexing).
//
// In addition to the template, this header defines the following types:
//
// Matrix3i 3x3 matrix of signed integers
// Matrix3ui 3x3 matrix of unsigned integers
// Matrix3l 3x3 matrix of signed longs
// Matrix3ul 3x3 matrix of unsigned longs
// Matrix3f 3x3 matrix of signed floats
//
 
#ifndef MATRIX3_H
#define MATRIX3_H
 
#include "vector3.h"
 
// 3x3 matrix with elements of type T
template <typename T>
class Matrix3 {
public:
 
// Vectors comprising the rows of the matrix
Vector3<T> a, b, c;
 
// trivial ctor
// note that the Vector3 ctor will zero the vector elements
Matrix3<T>() {}
 
// setting ctor
Matrix3<T>(const Vector3<T> a0, const Vector3<T> b0, const Vector3<T> c0): a(a0), b(b0), c(c0) {}
 
// setting ctor
Matrix3<T>(const T ax, const T ay, const T az, const T bx, const T by, const T bz, const T cx, const T cy, const T cz): a(ax,ay,az), b(bx,by,bz), c(cx,cy,cz) {}
 
// function call operator
void operator () (const Vector3<T> a0, const Vector3<T> b0, const Vector3<T> c0)
{ a = a0; b = b0; c = c0; }
 
// test for equality
bool operator == (const Matrix3<T> &m)
{ return (a==m.a && b==m.b && c==m.c); }
 
// test for inequality
bool operator != (const Matrix3<T> &m)
{ return (a!=m.a || b!=m.b || c!=m.c); }
 
// negation
Matrix3<T> operator - (void) const
{ return Matrix3<T>(-a,-b,-c); }
 
// addition
Matrix3<T> operator + (const Matrix3<T> &m) const
{ return Matrix3<T>(a+m.a, b+m.b, c+m.c); }
Matrix3<T> &operator += (const Matrix3<T> &m)
{ return *this = *this + m; }
 
// subtraction
Matrix3<T> operator - (const Matrix3<T> &m) const
{ return Matrix3<T>(a-m.a, b-m.b, c-m.c); }
Matrix3<T> &operator -= (const Matrix3<T> &m)
{ return *this = *this - m; }
 
// uniform scaling
Matrix3<T> operator * (const T num) const
{ return Matrix3<T>(a*num, b*num, c*num); }
Matrix3<T> &operator *= (const T num)
{ return *this = *this * num; }
Matrix3<T> operator / (const T num) const
{ return Matrix3<T>(a/num, b/num, c/num); }
Matrix3<T> &operator /= (const T num)
{ return *this = *this / num; }
 
// multiplication by a vector
Vector3<T> operator *(const Vector3<T> &v) const;
 
// multiplication of transpose by a vector
Vector3<T> mul_transpose(const Vector3<T> &v) const;
 
// multiplication by another Matrix3<T>
Matrix3<T> operator *(const Matrix3<T> &m) const;
 
Matrix3<T> &operator *=(const Matrix3<T> &m)
{ return *this = *this * m; }
 
// transpose the matrix
Matrix3<T> transposed(void) const
{
return Matrix3<T>(Vector3<T>(a.x, b.x, c.x),
Vector3<T>(a.y, b.y, c.y),
Vector3<T>(a.z, b.z, c.z));
}
Matrix3<T> transpose(void)
{ return *this = transposed(); }
 
// zero the matrix
void zero(void) {
a.x = a.y = a.z = 0;
b.x = b.y = b.z = 0;
c.x = c.y = c.z = 0;
}
 
// setup the identity matrix
void identity(void) {
a.x = b.y = c.z = 1;
a.y = a.z = 0;
b.x = b.z = 0;
c.x = c.y = 0;
}
 
// check if any elements are NAN
bool is_nan(void)
{ return a.is_nan() || b.is_nan() || c.is_nan(); }
 
// fill in the matrix with a standard rotation
void rotation(enum Rotation rotation);
 
// create a rotation matrix from Euler angles
void from_euler(float roll, float pitch, float yaw);
 
// create eulers from a rotation matrix
void to_euler(float *roll, float *pitch, float *yaw);
 
// apply an additional rotation from a body frame gyro vector
// to a rotation matrix.
void rotate(const Vector3<T> &g);
};
 
typedef Matrix3<int16_t> Matrix3i;
typedef Matrix3<uint16_t> Matrix3ui;
typedef Matrix3<int32_t> Matrix3l;
typedef Matrix3<uint32_t> Matrix3ul;
typedef Matrix3<float> Matrix3f;
 
#endif // MATRIX3_H
/C-OSD/arducam-osd/libraries/AP_Math/polygon.cpp
0,0 → 1,91
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* polygon.cpp
* Copyright (C) Andrew Tridgell 2011
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include "AP_Math.h"
 
/*
The point in polygon algorithm is based on:
http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
*/
 
 
/*
Polygon_outside(): test for a point in a polygon
Input: P = a point,
V[] = vertex points of a polygon V[n+1] with V[n]=V[0]
Return: true if P is outside the polygon
 
This does not take account of the curvature of the earth, but we
expect that to be very small over the distances involved in the
fence boundary
*/
bool Polygon_outside(const Vector2l &P, const Vector2l *V, unsigned n)
{
unsigned i, j;
bool outside = true;
for (i = 0, j = n-1; i < n; j = i++) {
if ((V[i].y > P.y) == (V[j].y > P.y)) {
continue;
}
int32_t dx1, dx2, dy1, dy2;
dx1 = P.x - V[i].x;
dx2 = V[j].x - V[i].x;
dy1 = P.y - V[i].y;
dy2 = V[j].y - V[i].y;
int8_t dx1s, dx2s, dy1s, dy2s, m1, m2;
#define sign(x) ((x)<0?-1:1)
dx1s = sign(dx1);
dx2s = sign(dx2);
dy1s = sign(dy1);
dy2s = sign(dy2);
m1 = dx1s * dy2s;
m2 = dx2s * dy1s;
// we avoid the 64 bit multiplies if we can based on sign checks.
if (dy2 < 0) {
if (m1 > m2) {
outside = !outside;
} else if (m1 < m2) {
continue;
} else if ( dx1 * (int64_t)dy2 > dx2 * (int64_t)dy1 ) {
outside = !outside;
}
} else {
if (m1 < m2) {
outside = !outside;
} else if (m1 > m2) {
continue;
} else if ( dx1 * (int64_t)dy2 < dx2 * (int64_t)dy1 ) {
outside = !outside;
}
}
}
return outside;
}
 
/*
check if a polygon is complete.
 
We consider a polygon to be complete if we have at least 4 points,
and the first point is the same as the last point. That is the
minimum requirement for the Polygon_outside function to work
*/
bool Polygon_complete(const Vector2l *V, unsigned n)
{
return (n >= 4 && V[n-1].x == V[0].x && V[n-1].y == V[0].y);
}
/C-OSD/arducam-osd/libraries/AP_Math/polygon.h
0,0 → 1,22
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* polygon.h
* Copyright (C) Andrew Tridgell 2011
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
bool Polygon_outside(const Vector2l &P, const Vector2l *V, unsigned n);
bool Polygon_complete(const Vector2l *V, unsigned n);
 
/C-OSD/arducam-osd/libraries/AP_Math/quaternion.cpp
0,0 → 1,89
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* quaternion.cpp
* Copyright (C) Andrew Tridgell 2012
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include "AP_Math.h"
 
// return the rotation matrix equivalent for this quaternion
void Quaternion::rotation_matrix(Matrix3f &m)
{
float q3q3 = q3 * q3;
float q3q4 = q3 * q4;
float q2q2 = q2 * q2;
float q2q3 = q2 * q3;
float q2q4 = q2 * q4;
float q1q2 = q1 * q2;
float q1q3 = q1 * q3;
float q1q4 = q1 * q4;
float q4q4 = q4 * q4;
 
m.a.x = 1-2*(q3q3 + q4q4);
m.a.y = 2*(q2q3 - q1q4);
m.a.z = 2*(q2q4 + q1q3);
m.b.x = 2*(q2q3 + q1q4);
m.b.y = 1-2*(q2q2 + q4q4);
m.b.z = 2*(q3q4 - q1q2);
m.c.x = 2*(q2q4 - q1q3);
m.c.y = 2*(q3q4 + q1q2);
m.c.z = 1-2*(q2q2 + q3q3);
}
 
// convert a vector from earth to body frame
void Quaternion::earth_to_body(Vector3f &v)
{
Matrix3f m;
// we reverse z before and afterwards because of the differing
// quaternion conventions from APM conventions.
v.z = -v.z;
rotation_matrix(m);
v = m * v;
v.z = -v.z;
}
 
// create a quaternion from Euler angles
void Quaternion::from_euler(float roll, float pitch, float yaw)
{
float cr2 = cos(roll*0.5);
float cp2 = cos(pitch*0.5);
float cy2 = cos(yaw*0.5);
float sr2 = sin(roll*0.5);
float sp2 = sin(pitch*0.5);
float sy2 = sin(yaw*0.5);
 
q1 = cr2*cp2*cy2 + sr2*sp2*sy2;
q2 = sr2*cp2*cy2 - cr2*sp2*sy2;
q3 = cr2*sp2*cy2 + sr2*cp2*sy2;
q4 = cr2*cp2*sy2 - sr2*sp2*cy2;
}
 
// create eulers from a quaternion
void Quaternion::to_euler(float *roll, float *pitch, float *yaw)
{
if (roll) {
*roll = (atan2(2.0*(q1*q2 + q3*q4),
1 - 2.0*(q2*q2 + q3*q3)));
}
if (pitch) {
// we let safe_asin() handle the singularities near 90/-90 in pitch
*pitch = safe_asin(2.0*(q1*q3 - q4*q2));
}
if (yaw) {
*yaw = atan2(2.0*(q1*q4 + q2*q3),
1 - 2.0*(q3*q3 + q4*q4));
}
}
/C-OSD/arducam-osd/libraries/AP_Math/quaternion.h
0,0 → 1,48
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
// Copyright 2012 Andrew Tridgell, all rights reserved.
 
// This library is free software; you can redistribute it and / or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
 
#ifndef QUATERNION_H
#define QUATERNION_H
 
#include <math.h>
 
class Quaternion
{
public:
float q1, q2, q3, q4;
 
// constructor creates a quaternion equivalent
// to roll=0, pitch=0, yaw=0
Quaternion() { q1 = 1; q2 = q3 = q4 = 0; }
 
// setting constructor
Quaternion(const float _q1, const float _q2, const float _q3, const float _q4):
q1(_q1), q2(_q2), q3(_q3), q4(_q4) {}
 
// function call operator
void operator ()(const float _q1, const float _q2, const float _q3, const float _q4)
{ q1 = _q1; q2 = _q2; q3 = _q3; q4 = _q4; }
 
// check if any elements are NAN
bool is_nan(void)
{ return isnan(q1) || isnan(q2) || isnan(q3) || isnan(q4); }
 
// return the rotation matrix equivalent for this quaternion
void rotation_matrix(Matrix3f &m);
 
// convert a vector from earth to body frame
void earth_to_body(Vector3f &v);
 
// create a quaternion from Euler angles
void from_euler(float roll, float pitch, float yaw);
 
// create eulers from a quaternion
void to_euler(float *roll, float *pitch, float *yaw);
};
#endif // QUATERNION_H
/C-OSD/arducam-osd/libraries/AP_Math/rotations.h
0,0 → 1,46
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* rotations.h
* Copyright (C) Andrew Tridgell 2012
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
 
// these rotations form a full set - every rotation in the following
// list when combined with another in the list forms an entry which is
// also in the list. This is an important property. Please run the
// rotations test suite if you add to the list.
 
// these rotation values are stored to EEPROM, so be careful not to
// change the numbering of any existing entry when adding a new entry.
enum Rotation {
ROTATION_NONE = 0,
ROTATION_YAW_45,
ROTATION_YAW_90,
ROTATION_YAW_135,
ROTATION_YAW_180,
ROTATION_YAW_225,
ROTATION_YAW_270,
ROTATION_YAW_315,
ROTATION_ROLL_180,
ROTATION_ROLL_180_YAW_45,
ROTATION_ROLL_180_YAW_90,
ROTATION_ROLL_180_YAW_135,
ROTATION_PITCH_180,
ROTATION_ROLL_180_YAW_225,
ROTATION_ROLL_180_YAW_270,
ROTATION_ROLL_180_YAW_315,
ROTATION_MAX
};
/C-OSD/arducam-osd/libraries/AP_Math/vector2.h
0,0 → 1,157
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
// Copyright 2010 Michael Smith, all rights reserved.
 
// This library is free software; you can redistribute it and / or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
 
// Derived closely from:
/****************************************
* 2D Vector Classes
* By Bill Perone (billperone@yahoo.com)
* Original: 9-16-2002
* Revised: 19-11-2003
* 18-12-2003
* 06-06-2004
*
* © 2003, This code is provided "as is" and you can use it freely as long as
* credit is given to Bill Perone in the application it is used in
****************************************/
 
#ifndef VECTOR2_H
#define VECTOR2_H
 
#include <math.h>
 
template <typename T>
struct Vector2
{
T x, y;
 
// trivial ctor
Vector2<T>() { x = y = 0; }
 
// setting ctor
Vector2<T>(const T x0, const T y0): x(x0), y(y0) {}
 
// function call operator
void operator ()(const T x0, const T y0)
{ x= x0; y= y0; }
 
// test for equality
bool operator==(const Vector2<T> &v)
{ return (x==v.x && y==v.y); }
 
// test for inequality
bool operator!=(const Vector2<T> &v)
{ return (x!=v.x || y!=v.y); }
 
// negation
Vector2<T> operator -(void) const
{ return Vector2<T>(-x, -y); }
 
// addition
Vector2<T> operator +(const Vector2<T> &v) const
{ return Vector2<T>(x+v.x, y+v.y); }
 
// subtraction
Vector2<T> operator -(const Vector2<T> &v) const
{ return Vector2<T>(x-v.x, y-v.y); }
 
// uniform scaling
Vector2<T> operator *(const T num) const
{
Vector2<T> temp(*this);
return temp*=num;
}
 
// uniform scaling
Vector2<T> operator /(const T num) const
{
Vector2<T> temp(*this);
return temp/=num;
}
 
// addition
Vector2<T> &operator +=(const Vector2<T> &v)
{
x+=v.x; y+=v.y;
return *this;
}
 
// subtraction
Vector2<T> &operator -=(const Vector2<T> &v)
{
x-=v.x; y-=v.y;
return *this;
}
 
// uniform scaling
Vector2<T> &operator *=(const T num)
{
x*=num; y*=num;
return *this;
}
 
// uniform scaling
Vector2<T> &operator /=(const T num)
{
x/=num; y/=num;
return *this;
}
 
// dot product
T operator *(const Vector2<T> &v) const
{ return x*v.x + y*v.y; }
 
// gets the length of this vector squared
T length_squared() const
{ return (T)(*this * *this); }
 
// gets the length of this vector
T length() const
{ return (T)sqrt(*this * *this); }
 
// normalizes this vector
void normalize()
{ *this/=length(); }
 
// returns the normalized vector
Vector2<T> normalized() const
{ return *this/length(); }
 
// reflects this vector about n
void reflect(const Vector2<T> &n)
{
Vector2<T> orig(*this);
project(n);
*this= *this*2 - orig;
}
 
// projects this vector onto v
void project(const Vector2<T> &v)
{ *this= v * (*this * v)/(v*v); }
 
// returns this vector projected onto v
Vector2<T> projected(const Vector2<T> &v)
{ return v * (*this * v)/(v*v); }
 
// computes the angle between 2 arbitrary vectors
T angle(const Vector2<T> &v1, const Vector2<T> &v2)
{ return (T)acosf((v1*v2) / (v1.length()*v2.length())); }
 
// computes the angle between 2 normalized arbitrary vectors
T angle_normalized(const Vector2<T> &v1, const Vector2<T> &v2)
{ return (T)acosf(v1*v2); }
 
};
 
typedef Vector2<int16_t> Vector2i;
typedef Vector2<uint16_t> Vector2ui;
typedef Vector2<int32_t> Vector2l;
typedef Vector2<uint32_t> Vector2ul;
typedef Vector2<float> Vector2f;
 
#endif // VECTOR2_H
/C-OSD/arducam-osd/libraries/AP_Math/vector3.cpp
0,0 → 1,115
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* vector3.cpp
* Copyright (C) Andrew Tridgell 2012
*
* This file is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
#include "AP_Math.h"
 
#define HALF_SQRT_2 0.70710678118654757
 
// rotate a vector by a standard rotation, attempting
// to use the minimum number of floating point operations
template <typename T>
void Vector3<T>::rotate(enum Rotation rotation)
{
T tmp;
switch (rotation) {
case ROTATION_NONE:
case ROTATION_MAX:
return;
case ROTATION_YAW_45: {
tmp = HALF_SQRT_2*(x - y);
y = HALF_SQRT_2*(x + y);
x = tmp;
return;
}
case ROTATION_YAW_90: {
tmp = x; x = -y; y = tmp;
return;
}
case ROTATION_YAW_135: {
tmp = -HALF_SQRT_2*(x + y);
y = HALF_SQRT_2*(x - y);
x = tmp;
return;
}
case ROTATION_YAW_180:
x = -x; y = -y;
return;
case ROTATION_YAW_225: {
tmp = HALF_SQRT_2*(y - x);
y = -HALF_SQRT_2*(x + y);
x = tmp;
return;
}
case ROTATION_YAW_270: {
tmp = x; x = y; y = -tmp;
return;
}
case ROTATION_YAW_315: {
tmp = HALF_SQRT_2*(x + y);
y = HALF_SQRT_2*(y - x);
x = tmp;
return;
}
case ROTATION_ROLL_180: {
y = -y; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_45: {
tmp = HALF_SQRT_2*(x + y);
y = HALF_SQRT_2*(x - y);
x = tmp; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_90: {
tmp = x; x = y; y = tmp; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_135: {
tmp = HALF_SQRT_2*(y - x);
y = HALF_SQRT_2*(y + x);
x = tmp; z = -z;
return;
}
case ROTATION_PITCH_180: {
x = -x; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_225: {
tmp = -HALF_SQRT_2*(x + y);
y = HALF_SQRT_2*(y - x);
x = tmp; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_270: {
tmp = x; x = -y; y = -tmp; z = -z;
return;
}
case ROTATION_ROLL_180_YAW_315: {
tmp = HALF_SQRT_2*(x - y);
y = -HALF_SQRT_2*(x + y);
x = tmp; z = -z;
return;
}
}
}
 
// only define for signed numbers
template void Vector3<float>::rotate(enum Rotation);
template void Vector3<int16_t>::rotate(enum Rotation);
template void Vector3<int32_t>::rotate(enum Rotation);
/C-OSD/arducam-osd/libraries/AP_Math/vector3.h
0,0 → 1,199
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
// Copyright 2010 Michael Smith, all rights reserved.
 
// This library is free software; you can redistribute it and / or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
 
// Derived closely from:
/****************************************
* 3D Vector Classes
* By Bill Perone (billperone@yahoo.com)
* Original: 9-16-2002
* Revised: 19-11-2003
* 11-12-2003
* 18-12-2003
* 06-06-2004
*
* © 2003, This code is provided "as is" and you can use it freely as long as
* credit is given to Bill Perone in the application it is used in
*
* Notes:
* if a*b = 0 then a & b are orthogonal
* a%b = -b%a
* a*(b%c) = (a%b)*c
* a%b = a(cast to matrix)*b
* (a%b).length() = area of parallelogram formed by a & b
* (a%b).length() = a.length()*b.length() * sin(angle between a & b)
* (a%b).length() = 0 if angle between a & b = 0 or a.length() = 0 or b.length() = 0
* a * (b%c) = volume of parallelpiped formed by a, b, c
* vector triple product: a%(b%c) = b*(a*c) - c*(a*b)
* scalar triple product: a*(b%c) = c*(a%b) = b*(c%a)
* vector quadruple product: (a%b)*(c%d) = (a*c)*(b*d) - (a*d)*(b*c)
* if a is unit vector along b then a%b = -b%a = -b(cast to matrix)*a = 0
* vectors a1...an are linearly dependant if there exists a vector of scalars (b) where a1*b1 + ... + an*bn = 0
* or if the matrix (A) * b = 0
*
****************************************/
 
#ifndef VECTOR3_H
#define VECTOR3_H
 
#include <math.h>
#include <string.h>
 
template <typename T>
class Vector3
{
public:
T x, y, z;
 
// trivial ctor
Vector3<T>() { x = y = z = 0; }
 
// setting ctor
Vector3<T>(const T x0, const T y0, const T z0): x(x0), y(y0), z(z0) {}
 
// function call operator
void operator ()(const T x0, const T y0, const T z0)
{ x= x0; y= y0; z= z0; }
 
// test for equality
bool operator==(const Vector3<T> &v)
{ return (x==v.x && y==v.y && z==v.z); }
 
// test for inequality
bool operator!=(const Vector3<T> &v)
{ return (x!=v.x || y!=v.y || z!=v.z); }
 
// negation
Vector3<T> operator -(void) const
{ return Vector3<T>(-x,-y,-z); }
 
// addition
Vector3<T> operator +(const Vector3<T> &v) const
{ return Vector3<T>(x+v.x, y+v.y, z+v.z); }
 
// subtraction
Vector3<T> operator -(const Vector3<T> &v) const
{ return Vector3<T>(x-v.x, y-v.y, z-v.z); }
 
// uniform scaling
Vector3<T> operator *(const T num) const
{
Vector3<T> temp(*this);
return temp*=num;
}
 
// uniform scaling
Vector3<T> operator /(const T num) const
{
Vector3<T> temp(*this);
return temp/=num;
}
 
// addition
Vector3<T> &operator +=(const Vector3<T> &v)
{
x+=v.x; y+=v.y; z+=v.z;
return *this;
}
 
// subtraction
Vector3<T> &operator -=(const Vector3<T> &v)
{
x-=v.x; y-=v.y; z-=v.z;
return *this;
}
 
// uniform scaling
Vector3<T> &operator *=(const T num)
{
x*=num; y*=num; z*=num;
return *this;
}
 
// uniform scaling
Vector3<T> &operator /=(const T num)
{
x/=num; y/=num; z/=num;
return *this;
}
 
// dot product
T operator *(const Vector3<T> &v) const
{ return x*v.x + y*v.y + z*v.z; }
 
// cross product
Vector3<T> operator %(const Vector3<T> &v) const
{
Vector3<T> temp(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x);
return temp;
}
 
// gets the length of this vector squared
T length_squared() const
{ return (T)(*this * *this); }
 
// gets the length of this vector
float length() const
{ return (T)sqrt(*this * *this); }
 
// normalizes this vector
void normalize()
{ *this/=length(); }
 
// zero the vector
void zero()
{ x = y = z = 0.0; }
 
// returns the normalized version of this vector
Vector3<T> normalized() const
{ return *this/length(); }
 
// reflects this vector about n
void reflect(const Vector3<T> &n)
{
Vector3<T> orig(*this);
project(n);
*this= *this*2 - orig;
}
 
// projects this vector onto v
void project(const Vector3<T> &v)
{ *this= v * (*this * v)/(v*v); }
 
// returns this vector projected onto v
Vector3<T> projected(const Vector3<T> &v)
{ return v * (*this * v)/(v*v); }
 
// computes the angle between 2 arbitrary vectors
T angle(const Vector3<T> &v1, const Vector3<T> &v2)
{ return (T)acosf((v1*v2) / (v1.length()*v2.length())); }
 
// computes the angle between 2 arbitrary normalized vectors
T angle_normalized(const Vector3<T> &v1, const Vector3<T> &v2)
{ return (T)acosf(v1*v2); }
 
// check if any elements are NAN
bool is_nan(void)
{ return isnan(x) || isnan(y) || isnan(z); }
 
// check if any elements are infinity
bool is_inf(void)
{ return isinf(x) || isinf(y) || isinf(z); }
 
// rotate by a standard rotation
void rotate(enum Rotation rotation);
 
};
 
typedef Vector3<int16_t> Vector3i;
typedef Vector3<uint16_t> Vector3ui;
typedef Vector3<int32_t> Vector3l;
typedef Vector3<uint32_t> Vector3ul;
typedef Vector3<float> Vector3f;
 
#endif // VECTOR3_H
/C-OSD/arducam-osd/libraries/FastSerial/BetterStream.cpp
0,0 → 1,61
// -*- Mode: C++; c-basic-offset: 8; indent-tabs-mode: nil -*-
//
// Copyright (c) 2010 Michael Smith. All rights reserved.
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
//
// Enhancements to the Arduino Stream class.
//
 
#include <limits.h>
#include "BetterStream.h"
 
// Stream extensions////////////////////////////////////////////////////////////
 
void
BetterStream::print_P(const prog_char_t *s)
{
char c;
 
while ('\0' != (c = pgm_read_byte((const prog_char *)s++)))
write(c);
}
 
void
BetterStream::println_P(const prog_char_t *s)
{
print_P(s);
println();
}
 
void
BetterStream::printf(const char *fmt, ...)
{
va_list ap;
 
va_start(ap, fmt);
_vprintf(0, fmt, ap);
va_end(ap);
}
 
void
BetterStream::_printf_P(const prog_char *fmt, ...)
{
va_list ap;
 
va_start(ap, fmt);
_vprintf(1, fmt, ap);
va_end(ap);
}
 
int
BetterStream::txspace(void)
{
// by default claim that there is always space in transmit buffer
return(INT_MAX);
}
/C-OSD/arducam-osd/libraries/FastSerial/BetterStream.h
0,0 → 1,41
// -*- Mode: C++; c-basic-offset: 8; indent-tabs-mode: nil -*-
//
// Copyright (c) 2010 Michael Smith. All rights reserved.
//
// This is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 2.1 of the License, or (at
// your option) any later version.
//
 
#ifndef __BETTERSTREAM_H
#define __BETTERSTREAM_H
 
#include <Stream.h>
#include <avr/pgmspace.h>
#include "../AP_Common/AP_Common.h"
 
class BetterStream : public Stream {
public:
BetterStream(void) {
}
 
// Stream extensions
void print_P(const prog_char_t *);
void println_P(const prog_char_t *);
void printf(const char *, ...)
__attribute__ ((format(__printf__, 2, 3)));
void _printf_P(const prog_char *, ...);
__attribute__ ((format(__printf__, 2, 3)));
 
virtual int txspace(void);
 
#define printf_P(fmt, ...) _printf_P((const prog_char *)fmt, ## __VA_ARGS__)
 
private:
void _vprintf(unsigned char, const char *, va_list)
__attribute__ ((format(__printf__, 3, 0)));
};
 
#endif // __BETTERSTREAM_H
 
/C-OSD/arducam-osd/libraries/FastSerial/FastSerial.cpp
0,0 → 1,304
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
//
// Interrupt-driven serial transmit/receive library.
//
// Copyright (c) 2010 Michael Smith. All rights reserved.
//
// Receive and baudrate calculations derived from the Arduino
// HardwareSerial driver:
//
// Copyright (c) 2006 Nicholas Zambetti. All right reserved.
//
// Transmit algorithm inspired by work:
//
// Code Jose Julio and Jordi Munoz. DIYDrones.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
 
 
//#include "../AP_Common/AP_Common.h"
#include "FastSerial.h"
 
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
 
#if defined(UDR3)
# define FS_MAX_PORTS 4
#elif defined(UDR2)
# define FS_MAX_PORTS 3
#elif defined(UDR1)
# define FS_MAX_PORTS 2
#else
# define FS_MAX_PORTS 1
#endif
 
FastSerial::Buffer __FastSerial__rxBuffer[FS_MAX_PORTS];
FastSerial::Buffer __FastSerial__txBuffer[FS_MAX_PORTS];
uint8_t FastSerial::_serialInitialized = 0;
 
// Constructor /////////////////////////////////////////////////////////////////
 
FastSerial::FastSerial(const uint8_t portNumber, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
volatile uint8_t *ucsra, volatile uint8_t *ucsrb, const uint8_t u2x,
const uint8_t portEnableBits, const uint8_t portTxBits) :
_ubrrh(ubrrh),
_ubrrl(ubrrl),
_ucsra(ucsra),
_ucsrb(ucsrb),
_u2x(u2x),
_portEnableBits(portEnableBits),
_portTxBits(portTxBits),
_rxBuffer(&__FastSerial__rxBuffer[portNumber]),
_txBuffer(&__FastSerial__txBuffer[portNumber])
{
setInitialized(portNumber);
begin(57600);
}
 
// Public Methods //////////////////////////////////////////////////////////////
 
void FastSerial::begin(long baud)
{
begin(baud, 0, 0);
}
 
void FastSerial::begin(long baud, unsigned int rxSpace, unsigned int txSpace)
{
uint16_t ubrr;
bool use_u2x = true;
 
// if we are currently open...
if (_open) {
// If the caller wants to preserve the buffer sizing, work out what
// it currently is...
if (0 == rxSpace)
rxSpace = _rxBuffer->mask + 1;
if (0 == txSpace)
txSpace = _txBuffer->mask + 1;
 
// close the port in its current configuration, clears _open
end();
}
 
// allocate buffers
if (!_allocBuffer(_rxBuffer, rxSpace ? : _default_rx_buffer_size) || !_allocBuffer(_txBuffer, txSpace ? : _default_tx_buffer_size)) {
end();
return; // couldn't allocate buffers - fatal
}
 
// reset buffer pointers
_txBuffer->head = _txBuffer->tail = 0;
_rxBuffer->head = _rxBuffer->tail = 0;
 
// mark the port as open
_open = true;
 
// If the user has supplied a new baud rate, compute the new UBRR value.
if (baud > 0) {
#if F_CPU == 16000000UL
// hardcoded exception for compatibility with the bootloader shipped
// with the Duemilanove and previous boards and the firmware on the 8U2
// on the Uno and Mega 2560.
if (baud == 57600)
use_u2x = false;
#endif
 
if (use_u2x) {
*_ucsra = 1 << _u2x;
ubrr = (F_CPU / 4 / baud - 1) / 2;
} else {
*_ucsra = 0;
ubrr = (F_CPU / 8 / baud - 1) / 2;
}
 
*_ubrrh = ubrr >> 8;
*_ubrrl = ubrr;
}
 
*_ucsrb |= _portEnableBits;
}
 
void FastSerial::end()
{
*_ucsrb &= ~(_portEnableBits | _portTxBits);
 
_freeBuffer(_rxBuffer);
_freeBuffer(_txBuffer);
_open = false;
}
 
int FastSerial::available(void)
{
if (!_open)
return (-1);
return ((_rxBuffer->head - _rxBuffer->tail) & _rxBuffer->mask);
}
 
int FastSerial::txspace(void)
{
if (!_open)
return (-1);
return ((_txBuffer->mask+1) - ((_txBuffer->head - _txBuffer->tail) & _txBuffer->mask));
}
 
int FastSerial::read(void)
{
uint8_t c;
 
// if the head and tail are equal, the buffer is empty
if (!_open || (_rxBuffer->head == _rxBuffer->tail))
return (-1);
 
// pull character from tail
c = _rxBuffer->bytes[_rxBuffer->tail];
_rxBuffer->tail = (_rxBuffer->tail + 1) & _rxBuffer->mask;
 
return (c);
}
 
int FastSerial::peek(void)
{
 
// if the head and tail are equal, the buffer is empty
if (!_open || (_rxBuffer->head == _rxBuffer->tail))
return (-1);
 
// pull character from tail
return (_rxBuffer->bytes[_rxBuffer->tail]);
}
 
void FastSerial::flush(void)
{
// don't reverse this or there may be problems if the RX interrupt
// occurs after reading the value of _rxBuffer->head but before writing
// the value to _rxBuffer->tail; the previous value of head
// may be written to tail, making it appear as if the buffer
// don't reverse this or there may be problems if the RX interrupt
// occurs after reading the value of head but before writing
// the value to tail; the previous value of rx_buffer_head
// may be written to tail, making it appear as if the buffer
// were full, not empty.
_rxBuffer->head = _rxBuffer->tail;
 
// don't reverse this or there may be problems if the TX interrupt
// occurs after reading the value of _txBuffer->tail but before writing
// the value to _txBuffer->head.
_txBuffer->tail = _txBuffer->head;
}
 
#if defined(ARDUINO) && ARDUINO >= 100
size_t FastSerial::write(uint8_t c)
{
uint16_t i;
 
if (!_open) // drop bytes if not open
return 0;
 
// wait for room in the tx buffer
i = (_txBuffer->head + 1) & _txBuffer->mask;
 
// if the port is set into non-blocking mode, then drop the byte
// if there isn't enough room for it in the transmit buffer
if (_nonblocking_writes && i == _txBuffer->tail) {
return 0;
}
 
while (i == _txBuffer->tail)
;
 
// add byte to the buffer
_txBuffer->bytes[_txBuffer->head] = c;
_txBuffer->head = i;
 
// enable the data-ready interrupt, as it may be off if the buffer is empty
*_ucsrb |= _portTxBits;
 
// return number of bytes written (always 1)
return 1;
}
#else
void FastSerial::write(uint8_t c)
{
uint16_t i;
 
if (!_open) // drop bytes if not open
return;
 
// wait for room in the tx buffer
i = (_txBuffer->head + 1) & _txBuffer->mask;
while (i == _txBuffer->tail)
;
 
// add byte to the buffer
_txBuffer->bytes[_txBuffer->head] = c;
_txBuffer->head = i;
 
// enable the data-ready interrupt, as it may be off if the buffer is empty
*_ucsrb |= _portTxBits;
}
#endif
 
// Buffer management ///////////////////////////////////////////////////////////
 
bool FastSerial::_allocBuffer(Buffer *buffer, unsigned int size)
{
uint16_t mask;
uint8_t shift;
 
// init buffer state
buffer->head = buffer->tail = 0;
 
// Compute the power of 2 greater or equal to the requested buffer size
// and then a mask to simplify wrapping operations. Using __builtin_clz
// would seem to make sense, but it uses a 256(!) byte table.
// Note that we ignore requests for more than BUFFER_MAX space.
for (shift = 1; (1U << shift) < min(_max_buffer_size, size); shift++)
;
mask = (1 << shift) - 1;
 
// If the descriptor already has a buffer allocated we need to take
// care of it.
if (buffer->bytes) {
 
// If the allocated buffer is already the correct size then
// we have nothing to do
if (buffer->mask == mask)
return true;
 
// Dispose of the old buffer.
free(buffer->bytes);
}
buffer->mask = mask;
 
// allocate memory for the buffer - if this fails, we fail.
buffer->bytes = (uint8_t *) malloc(buffer->mask + 1);
 
return (buffer->bytes != NULL);
}
 
void FastSerial::_freeBuffer(Buffer *buffer)
{
buffer->head = buffer->tail = 0;
buffer->mask = 0;
if (NULL != buffer->bytes) {
free(buffer->bytes);
buffer->bytes = NULL;
}
}
 
/C-OSD/arducam-osd/libraries/FastSerial/FastSerial.h
0,0 → 1,334
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
//
// Interrupt-driven serial transmit/receive library.
//
// Copyright (c) 2010 Michael Smith. All rights reserved.
//
// Receive and baudrate calculations derived from the Arduino
// HardwareSerial driver:
//
// Copyright (c) 2006 Nicholas Zambetti. All right reserved.
//
// Transmit algorithm inspired by work:
//
// Code Jose Julio and Jordi Munoz. DIYDrones.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later
// version.
//
// This library is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the GNU Lesser General Public License for more
// details.
//
// You should have received a copy of the GNU Lesser General
// Public License along with this library; if not, write to the
// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
// Boston, MA 02110-1301 USA
//
 
//
// Note that this library does not pre-declare drivers for serial
// ports; the user must explicitly create drivers for the ports they
// wish to use. This is less friendly than the stock Arduino driver,
// but it saves a few bytes of RAM for every unused port and frees up
// the vector for another driver (e.g. MSPIM on USARTs).
//
 
#ifndef FastSerial_h
#define FastSerial_h
 
// disable the stock Arduino serial driver
#ifdef HardwareSerial_h
# error Must include FastSerial.h before the Arduino serial driver is defined.
#endif
#define HardwareSerial_h
 
#include <inttypes.h>
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
 
#include "BetterStream.h"
 
 
/// @file FastSerial.h
/// @brief An enhanced version of the Arduino HardwareSerial class
/// implementing interrupt-driven transmission and flexible
/// buffer management.
///
/// Because Arduino libraries aren't really libraries, but we want to
/// only define interrupt handlers for serial ports that are actually
/// used, we have to force our users to define them using a macro.
///
/// FastSerialPort(<port name>, <port number>)
///
/// <port name> is the name of the object that will be created by the
/// macro. <port number> is the 0-based number of the port that will
/// be managed by the object.
///
/// Previously ports were defined with a different macro for each port,
/// and these macros are retained for compatibility:
///
/// FastSerialPort0(<port name>) creates <port name> referencing serial port 0
/// FastSerialPort1(<port name>) creates <port name> referencing serial port 1
/// FastSerialPort2(<port name>) creates <port name> referencing serial port 2
/// FastSerialPort3(<port name>) creates <port name> referencing serial port 3
///
/// Note that compatibility macros are only defined for ports that
/// exist on the target device.
///
 
/// @name Compatibility
///
/// Forward declarations for clients that want to assume that the
/// default Serial* objects exist.
///
/// Note that the application is responsible for ensuring that these
/// actually get defined, otherwise Arduino will suck in the
/// HardwareSerial library and linking will fail.
//@{
extern class FastSerial Serial;
extern class FastSerial Serial1;
extern class FastSerial Serial2;
extern class FastSerial Serial3;
//@}
 
/// The FastSerial class definition
///
class FastSerial: public BetterStream {
public:
 
/// Constructor
FastSerial(const uint8_t portNumber, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra,
volatile uint8_t *ucsrb, const uint8_t u2x, const uint8_t portEnableBits, const uint8_t portTxBits);
 
/// @name Serial API
//@{
virtual void begin(long baud);
virtual void end(void);
virtual int available(void);
virtual int txspace(void);
virtual int read(void);
virtual int peek(void);
virtual void flush(void);
#if defined(ARDUINO) && ARDUINO >= 100
virtual size_t write(uint8_t c);
#else
virtual void write(uint8_t c);
#endif
using BetterStream::write;
//@}
 
/// Extended port open method
///
/// Allows for both opening with specified buffer sizes, and re-opening
/// to adjust a subset of the port's settings.
///
/// @note Buffer sizes greater than ::_max_buffer_size will be rounded
/// down.
///
/// @param baud Selects the speed that the port will be
/// configured to. If zero, the port speed is left
/// unchanged.
/// @param rxSpace Sets the receive buffer size for the port. If zero
/// then the buffer size is left unchanged if the port
/// is open, or set to ::_default_rx_buffer_size if it is
/// currently closed.
/// @param txSpace Sets the transmit buffer size for the port. If zero
/// then the buffer size is left unchanged if the port
/// is open, or set to ::_default_tx_buffer_size if it
/// is currently closed.
///
virtual void begin(long baud, unsigned int rxSpace, unsigned int txSpace);
 
/// Transmit/receive buffer descriptor.
///
/// Public so the interrupt handlers can see it
struct Buffer {
volatile uint16_t head, tail; ///< head and tail pointers
uint16_t mask; ///< buffer size mask for pointer wrap
uint8_t *bytes; ///< pointer to allocated buffer
};
 
/// Tell if the serial port has been initialized
static bool getInitialized(uint8_t port) {
return (1<<port) & _serialInitialized;
}
 
// ask for writes to be blocking or non-blocking
void set_blocking_writes(bool blocking) {
_nonblocking_writes = !blocking;
}
 
private:
 
/// Bit mask for initialized ports
static uint8_t _serialInitialized;
 
/// Set if the serial port has been initialized
static void setInitialized(uint8_t port) {
_serialInitialized |= (1<<port);
}
 
// register accessors
volatile uint8_t * const _ubrrh;
volatile uint8_t * const _ubrrl;
volatile uint8_t * const _ucsra;
volatile uint8_t * const _ucsrb;
 
// register magic numbers
const uint8_t _u2x;
const uint8_t _portEnableBits; ///< rx, tx and rx interrupt enables
const uint8_t _portTxBits; ///< tx data and completion interrupt enables
 
 
// ring buffers
Buffer * const _rxBuffer;
Buffer * const _txBuffer;
bool _open;
 
// whether writes to the port should block waiting
// for enough space to appear
bool _nonblocking_writes;
 
/// Allocates a buffer of the given size
///
/// @param buffer The buffer descriptor for which the buffer will
/// will be allocated.
/// @param size The desired buffer size.
/// @returns True if the buffer was allocated successfully.
///
static bool _allocBuffer(Buffer *buffer, unsigned int size);
 
/// Frees the allocated buffer in a descriptor
///
/// @param buffer The descriptor whose buffer should be freed.
///
static void _freeBuffer(Buffer *buffer);
 
/// default receive buffer size
static const unsigned int _default_rx_buffer_size = 128;
 
/// default transmit buffer size
static const unsigned int _default_tx_buffer_size = 16;
 
/// maxium tx/rx buffer size
/// @note if we could bring the max size down to 256, the mask and head/tail
/// pointers in the buffer could become uint8_t.
///
static const unsigned int _max_buffer_size = 512;
};
 
// Used by the per-port interrupt vectors
extern FastSerial::Buffer __FastSerial__rxBuffer[];
extern FastSerial::Buffer __FastSerial__txBuffer[];
 
/// Generic Rx/Tx vectors for a serial port - needs to know magic numbers
///
#define FastSerialHandler(_PORT, _RXVECTOR, _TXVECTOR, _UDR, _UCSRB, _TXBITS) \
ISR(_RXVECTOR, ISR_BLOCK) \
{ \
uint8_t c; \
uint16_t i; \
\
/* read the byte as quickly as possible */ \
c = _UDR; \
/* work out where the head will go next */ \
i = (__FastSerial__rxBuffer[_PORT].head + 1) & __FastSerial__rxBuffer[_PORT].mask; \
/* decide whether we have space for another byte */ \
if (i != __FastSerial__rxBuffer[_PORT].tail) { \
/* we do, move the head */ \
__FastSerial__rxBuffer[_PORT].bytes[__FastSerial__rxBuffer[_PORT].head] = c; \
__FastSerial__rxBuffer[_PORT].head = i; \
} \
} \
ISR(_TXVECTOR, ISR_BLOCK) \
{ \
/* if there is another character to send */ \
if (__FastSerial__txBuffer[_PORT].tail != __FastSerial__txBuffer[_PORT].head) { \
_UDR = __FastSerial__txBuffer[_PORT].bytes[__FastSerial__txBuffer[_PORT].tail]; \
/* increment the tail */ \
__FastSerial__txBuffer[_PORT].tail = \
(__FastSerial__txBuffer[_PORT].tail + 1) & __FastSerial__txBuffer[_PORT].mask; \
} else { \
/* there are no more bytes to send, disable the interrupt */ \
if (__FastSerial__txBuffer[_PORT].head == __FastSerial__txBuffer[_PORT].tail) \
_UCSRB &= ~_TXBITS; \
} \
} \
struct hack
 
//
// Portability; convert various older sets of defines for U(S)ART0 up
// to match the definitions for the 1280 and later devices.
//
#if !defined(USART0_RX_vect)
# if defined(USART_RX_vect)
# define USART0_RX_vect USART_RX_vect
# define USART0_UDRE_vect USART_UDRE_vect
# elif defined(UART0_RX_vect)
# define USART0_RX_vect UART0_RX_vect
# define USART0_UDRE_vect UART0_UDRE_vect
# endif
#endif
 
#if !defined(USART1_RX_vect)
# if defined(UART1_RX_vect)
# define USART1_RX_vect UART1_RX_vect
# define USART1_UDRE_vect UART1_UDRE_vect
# endif
#endif
 
#if !defined(UDR0)
# if defined(UDR)
# define UDR0 UDR
# define UBRR0H UBRRH
# define UBRR0L UBRRL
# define UCSR0A UCSRA
# define UCSR0B UCSRB
# define U2X0 U2X
# define RXEN0 RXEN
# define TXEN0 TXEN
# define RXCIE0 RXCIE
# define UDRIE0 UDRIE
# endif
#endif
 
///
/// Macro defining a FastSerial port instance.
///
#define FastSerialPort(_name, _num) \
FastSerial _name(_num, \
&UBRR##_num##H, \
&UBRR##_num##L, \
&UCSR##_num##A, \
&UCSR##_num##B, \
U2X##_num, \
(_BV(RXEN##_num) | _BV(TXEN##_num) | _BV(RXCIE##_num)), \
(_BV(UDRIE##_num))); \
FastSerialHandler(_num, \
USART##_num##_RX_vect, \
USART##_num##_UDRE_vect, \
UDR##_num, \
UCSR##_num##B, \
_BV(UDRIE##_num))
 
///
/// Compatibility macros for previous FastSerial versions.
///
/// Note that these are not conditionally defined, as the errors
/// generated when using these macros for a board that does not support
/// the port are better than the errors generated for a macro that's not
/// defined at all.
///
#define FastSerialPort0(_portName) FastSerialPort(_portName, 0)
#define FastSerialPort1(_portName) FastSerialPort(_portName, 1)
#define FastSerialPort2(_portName) FastSerialPort(_portName, 2)
#define FastSerialPort3(_portName) FastSerialPort(_portName, 3)
 
#endif // FastSerial_h
/C-OSD/arducam-osd/libraries/FastSerial/examples/FastSerial/FastSerial.pde
0,0 → 1,71
// -*- Mode: C++; c-basic-offset: 8; indent-tabs-mode: nil -*-
 
//
// Example code for the FastSerial driver.
//
// This code is placed into the public domain.
//
 
//
// Include the FastSerial library header.
//
// Note that this causes the standard Arduino Serial* driver to be
// disabled.
//
#include <FastSerial.h>
 
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
 
# undef PSTR
# define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); \
(prog_char_t *)&__c[0];}))
 
//
// Create a FastSerial driver that looks just like the stock Arduino
// driver.
//
FastSerialPort0(Serial);
 
//
// To create a driver for a different serial port, on a board that
// supports more than one, use the appropriate macro:
//
//FastSerialPort2(Serial2);
 
 
void setup(void)
{
//
// Set the speed for our replacement serial port.
//
Serial.begin(115200);
 
//
// Test printing things
//
Serial.print("test");
Serial.println(" begin");
Serial.println(1000);
Serial.println(1000, 8);
Serial.println(1000, 10);
Serial.println(1000, 16);
Serial.println_P(PSTR("progmem"));
Serial.printf("printf %d %u %#x %p %f %S\n", -1000, 1000, 1000, 1000, 1.2345, PSTR("progmem"));
Serial.printf_P(PSTR("printf_P %d %u %#x %p %f %S\n"), -1000, 1000, 1000, 1000, 1.2345, PSTR("progmem"));
Serial.println("done");
}
 
void
loop(void)
{
int c;
 
//
// Perform a simple loopback operation.
//
c = Serial.read();
if (-1 != c)
Serial.write(c);
}
 
/C-OSD/arducam-osd/libraries/FastSerial/examples/FastSerial/Makefile
0,0 → 1,2
BOARD = mega
include ../../../AP_Common/Arduino.mk
/C-OSD/arducam-osd/libraries/FastSerial/ftoa_engine.S
0,0 → 1,532
/* Copyright (c) 2005, Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/* $Id: ftoa_engine.S,v 1.3 2009/04/01 23:11:00 arcanum Exp $ */
 
#ifndef __DOXYGEN__
 
#include "macros.inc"
#include "ftoa_engine.h"
 
#if defined(__AVR_HAVE_LPMX__) && __AVR_HAVE_LPMX__
# define AVR_ENH_LPM 1
#else
# define AVR_ENH_LPM 0
#endif
 
/*
int __ftoa_engine (double val, char *buf,
unsigned char prec, unsigned char maxdgs)
Input:
val - value to convert
buf - output buffer address
prec - precision: number of decimal digits is 'prec + 1'
maxdgs - (0 if unused) precision restriction for "%f" specification
 
Output:
return - decimal exponent of first digit
buf[0] - flags (FTOA_***)
buf[1],... - decimal digits
Number of digits:
maxdgs == 0 ? prec+1 :
(buf[0] & FTOA_CARRY) == 0 || buf[1] != '1' ?
aver(1, maxdgs+exp, prec+1) :
aver(1, masdgs+exp-1, prec+1)
 
Notes:
* Output string is not 0-terminated. For possibility of user's buffer
usage in any case.
* If used, 'maxdgs' is a number of digits for value with zero exponent.
*/
 
/* Input */
#define maxdgs r16
#define prec r18
#define buf_lo r20
#define buf_hi r21
#define val_lo r22
#define val_hi r23
#define val_hlo r24
#define val_hhi r25
 
/* Float value parse */
#define flag r19
 
/* Multiplication of mantisses */
#define exp_sv r17
#define mlt_1 r19 /* lowest result byte */
#define mlt_2 r14
#define mlt_3 r15
#define mlt_4 r20
#define mlt_5 r21
#define mlt_6 r28
#define mlt_7 r29
 
/* Conversion to string */
#define pwr_2 r1 /* lowest byte of 'powr10' element */
#define pwr_3 r17
#define pwr_4 r19
#define pwr_5 r22
#define pwr_6 r25
#define pwr_7 r0
#define digit r23
#define exp10 r24
 
/* Fixed */
#define zero r1
 
/* ASSEMBLY_CLIB_SECTION */
.global __ftoa_engine
.type __ftoa_engine, "function"
__ftoa_engine:
 
/* --------------------------------------------------------------------
Float value parse.
*/
; limit 'prec'
cpi prec, 8
brlo 1f
ldi prec, 7
1:
; init.
clr flag
X_movw XL, buf_lo
; val_hhi := exponent, sign test and remove
#if FTOA_MINUS != 1
# error FTOA_MINUS must be 1: add with carry used
#endif
lsl val_hhi
adc flag, zero ; FTOA_MINUS
sbrc val_hlo, 7
ori val_hhi, 1
; zero test
adiw val_hlo, 0
cpc val_lo, zero
cpc val_hi, zero
brne 3f
; return 0
ori flag, FTOA_ZERO
subi prec, -2
2: st X+, flag
ldi flag, '0'
dec prec
brne 2b
ret ; r24,r25 == 0
3:
; infinity, NaN ?
#if FTOA_NAN != 2 * FTOA_INF
# error Must: FTOA_NAN == 2*FTOA_INF: 'rjmp' is absent
#endif
cpi val_hhi, 0xff
brlo 6f
cpi val_hlo, 0x80
cpc val_hi, zero
cpc val_lo, zero
breq 5f
subi flag, -FTOA_INF ; FTOA_NAN
5: subi flag, -FTOA_INF
6:
; write flags byte
st X+, flag
; hidden bit
cpi val_hhi, 1
brlo 7f ; if subnormal value
ori val_hlo, 0x80
7: adc val_hhi, zero
; pushes
push r29
push r28
push r17
push r16
push r15
push r14
 
/* --------------------------------------------------------------------
Multiplication of mantisses (val and table).
At the begin:
val_hlo .. val_lo - input value mantisse
val_hhi - input value exponent
X - second byte address (string begin)
At the end:
mlt_7 .. mlt_2 - multiplication result
exp10 - decimal exponent
*/
 
; save
mov exp_sv, val_hhi
; Z := & base10[exp / 8] (sizeof(base10[0]) == 5)
andi val_hhi, ~7
lsr val_hhi ; (exp/8) * 4
mov ZL, val_hhi
lsr val_hhi
lsr val_hhi ; exp/8
add ZL, val_hhi ; (exp/8) * 5
clr ZH
subi ZL, lo8(-(.L_base10))
sbci ZH, hi8(-(.L_base10))
; highest mantissa byte (mult. shifting prepare)
clr val_hhi
; result initializ.
clr mlt_1
clr mlt_2
clr mlt_3
X_movw mlt_4, mlt_2
X_movw mlt_6, mlt_2
 
; multiply to 1-st table byte
#if AVR_ENH_LPM
lpm r0, Z+
#else
lpm
adiw ZL, 1
#endif
sec ; for loop end control
ror r0
; addition
10: brcc 11f
add mlt_1, val_lo
adc mlt_2, val_hi
adc mlt_3, val_hlo
adc mlt_4, val_hhi
adc mlt_5, zero
; arg shift
11: lsl val_lo
rol val_hi
rol val_hlo
rol val_hhi
; next bit
lsr r0
brne 10b
 
; second table byte
#if AVR_ENH_LPM
lpm r0, Z+ ; C flag is stay 1
#else
lpm
adiw ZL, 1
sec
#endif
ror r0
; addition
12: brcc 13f
add mlt_2, val_hi ; val_hi is the least byte now
adc mlt_3, val_hlo
adc mlt_4, val_hhi
adc mlt_5, val_lo
adc mlt_6, zero
; arg shift
13: lsl val_hi
rol val_hlo
rol val_hhi
rol val_lo
; next bit
lsr r0
brne 12b
 
; 3-t table byte
#if AVR_ENH_LPM
lpm r0, Z+ ; C flag is stay 1
#else
lpm
adiw ZL, 1
sec
#endif
ror r0
; addition
14: brcc 15f
add mlt_3, val_hlo ; val_hlo is the least byte now
adc mlt_4, val_hhi
adc mlt_5, val_lo
adc mlt_6, val_hi
adc mlt_7, zero
; arg shift
15: lsl val_hlo
rol val_hhi
rol val_lo
rol val_hi
; next bit
lsr r0
brne 14b
 
; 4-t table byte
#if AVR_ENH_LPM
lpm r0, Z+ ; C flag is stay 1
#else
lpm
#endif
ror r0
; addition
16: brcc 17f
add mlt_4, val_hhi ; val_hhi is the least byte now
adc mlt_5, val_lo
adc mlt_6, val_hi
adc mlt_7, val_hlo
; arg shift
17: lsl val_hhi
rol val_lo
rol val_hi
rol val_hlo
; next bit
lsr r0
brne 16b
 
; decimal exponent
#if AVR_ENH_LPM
lpm exp10, Z
#else
adiw ZL, 1
lpm
mov exp10, r0
#endif
 
; result shift: mlt_7..2 >>= (~exp & 7)
com exp_sv
andi exp_sv, 7
breq 19f
18: lsr mlt_7
ror mlt_6
ror mlt_5
ror mlt_4
ror mlt_3
ror mlt_2
dec exp_sv
brne 18b
19:
 
/* --------------------------------------------------------------------
Conversion to string.
 
Registers usage:
mlt_7 .. mlt_2 - new mantissa (multiplication result)
pwr_7 .. pwr_2 - 'powr10' table element
Z - 'powr10' table pointer
X - output string pointer
maxdgs - number of digits
prec - number of digits stays to output
exp10 - decimal exponent
digit - conversion process
 
At the end:
X - end of buffer (nonfilled byte)
exp10 - corrected dec. exponent
mlt_7 .. mlt_2 - remainder
pwr_7 .. pwr_2 - last powr10[] element
 
Notes:
* It is possible to leave out powr10'x table with subnormal value.
Result: accuracy degrease on the rounding phase. No matter: high
precision with subnormals is not needed. (Now 0x00000001 is converted
exactly on prec = 5, i.e. 6 digits.)
*/
 
; to find first digit
ldi ZL, lo8(.L_powr10)
ldi ZH, hi8(.L_powr10)
set
; 'pwr10' element reading
.L_digit:
X_lpm pwr_2, Z+
X_lpm pwr_3, Z+
X_lpm pwr_4, Z+
X_lpm pwr_5, Z+
X_lpm pwr_6, Z+
X_lpm pwr_7, Z+
; 'digit' init.
ldi digit, '0' - 1
; subtraction loop
20: inc digit
sub mlt_2, pwr_2
sbc mlt_3, pwr_3
sbc mlt_4, pwr_4
sbc mlt_5, pwr_5
sbc mlt_6, pwr_6
sbc mlt_7, pwr_7
brsh 20b
; restore mult
add mlt_2, pwr_2
adc mlt_3, pwr_3
adc mlt_4, pwr_4
adc mlt_5, pwr_5
adc mlt_6, pwr_6
adc mlt_7, pwr_7
; analisys
brtc 25f
cpi digit, '0'
brne 21f ; this is the first digit finded
dec exp10
rjmp .L_digit
; now is the first digit
21: clt
; number of digits
subi maxdgs, 1
brlo 23f ; maxdgs was 0
add maxdgs, exp10
brpl 22f
clr maxdgs
22: cp maxdgs, prec
brsh 23f
mov prec, maxdgs
23: inc prec
mov maxdgs, prec
; operate digit
25: cpi digit, '0' + 10
brlo 27f
; overflow, digit > '9'
ldi digit, '9'
26: st X+, digit
dec prec
brne 26b
rjmp .L_up
; write digit
27: st X+, digit
dec prec
brne .L_digit
 
/* --------------------------------------------------------------------
Rounding.
*/
.L_round:
; pwr10 /= 2
lsr pwr_7
ror pwr_6
ror pwr_5
ror pwr_4
ror pwr_3
ror pwr_2
; mult -= pwr10 (half of last 'pwr10' value)
sub mlt_2, pwr_2
sbc mlt_3, pwr_3
sbc mlt_4, pwr_4
sbc mlt_5, pwr_5
sbc mlt_6, pwr_6
sbc mlt_7, pwr_7
; rounding direction?
brlo .L_rest
; round to up
.L_up:
inc prec
ld digit, -X
inc digit
cpi digit, '9' + 1
brlo 31f
ldi digit, '0'
31: st X, digit
cpse prec, maxdgs
brsh .L_up
; it was a carry to master digit
ld digit, -X ; flags
ori digit, FTOA_CARRY ; 'C' is not changed
st X+, digit
brlo .L_rest ; above comparison
; overflow
inc exp10
ldi digit, '1'
32: st X+, digit
ldi digit, '0'
dec prec
brne 32b
; restore
.L_rest:
clr zero
pop r14
pop r15
pop r16
pop r17
pop r28
pop r29
; return
clr r25
sbrc exp10, 7 ; high byte
com r25
ret
 
.size __ftoa_engine, . - __ftoa_engine
 
/* --------------------------------------------------------------------
Tables. '.L_powr10' is placed first -- for subnormals stability.
*/
.section .progmem.data,"a",@progbits
 
.type .L_powr10, "object"
.L_powr10:
.byte 0, 64, 122, 16, 243, 90 ; 100000000000000
.byte 0, 160, 114, 78, 24, 9 ; 10000000000000
.byte 0, 16, 165, 212, 232, 0 ; 1000000000000
.byte 0, 232, 118, 72, 23, 0 ; 100000000000
.byte 0, 228, 11, 84, 2, 0 ; 10000000000
.byte 0, 202, 154, 59, 0, 0 ; 1000000000
.byte 0, 225, 245, 5, 0, 0 ; 100000000
.byte 128, 150, 152, 0, 0, 0 ; 10000000
.byte 64, 66, 15, 0, 0, 0 ; 1000000
.byte 160, 134, 1, 0, 0, 0 ; 100000
.byte 16, 39, 0, 0, 0, 0 ; 10000
.byte 232, 3, 0, 0, 0, 0 ; 1000
.byte 100, 0, 0, 0, 0, 0 ; 100
.byte 10, 0, 0, 0, 0, 0 ; 10
.byte 1, 0, 0, 0, 0, 0 ; 1
.size .L_powr10, . - .L_powr10
 
.type .L_base10, "object"
.L_base10:
.byte 44, 118, 216, 136, -36 ; 2295887404
.byte 103, 79, 8, 35, -33 ; 587747175
.byte 193, 223, 174, 89, -31 ; 1504632769
.byte 177, 183, 150, 229, -29 ; 3851859889
.byte 228, 83, 198, 58, -26 ; 986076132
.byte 81, 153, 118, 150, -24 ; 2524354897
.byte 230, 194, 132, 38, -21 ; 646234854
.byte 137, 140, 155, 98, -19 ; 1654361225
.byte 64, 124, 111, 252, -17 ; 4235164736
.byte 188, 156, 159, 64, -14 ; 1084202172
.byte 186, 165, 111, 165, -12 ; 2775557562
.byte 144, 5, 90, 42, -9 ; 710542736
.byte 92, 147, 107, 108, -7 ; 1818989404
.byte 103, 109, 193, 27, -4 ; 465661287
.byte 224, 228, 13, 71, -2 ; 1192092896
.byte 245, 32, 230, 181, 0 ; 3051757813
.byte 208, 237, 144, 46, 3 ; 781250000
.byte 0, 148, 53, 119, 5 ; 2000000000
.byte 0, 128, 132, 30, 8 ; 512000000
.byte 0, 0, 32, 78, 10 ; 1310720000
.byte 0, 0, 0, 200, 12 ; 3355443200
.byte 51, 51, 51, 51, 15 ; 858993459
.byte 152, 110, 18, 131, 17 ; 2199023256
.byte 65, 239, 141, 33, 20 ; 562949953
.byte 137, 59, 230, 85, 22 ; 1441151881
.byte 207, 254, 230, 219, 24 ; 3689348815
.byte 209, 132, 75, 56, 27 ; 944473297
.byte 247, 124, 29, 144, 29 ; 2417851639
.byte 164, 187, 228, 36, 32 ; 618970020
.byte 50, 132, 114, 94, 34 ; 1584563250
.byte 129, 0, 201, 241, 36 ; 4056481921
.byte 236, 161, 229, 61, 39 ; 1038459372
.size .L_base10, . - .L_base10
 
.end
#endif /* !__DOXYGEN__ */
/C-OSD/arducam-osd/libraries/FastSerial/ftoa_engine.h
0,0 → 1,48
/* Copyright (c) 2005, Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/* $Id: ftoa_engine.h 1218 2007-02-18 13:18:41Z dmix $ */
 
#ifndef _FTOA_ENGINE_H
#define _FTOA_ENGINE_H
 
#ifndef __ASSEMBLER__
 
int __ftoa_engine (double val, char *buf,
unsigned char prec, unsigned char maxdgs);
 
#endif
 
/* '__ftoa_engine' return next flags (in buf[0]): */
#define FTOA_MINUS 1
#define FTOA_ZERO 2
#define FTOA_INF 4
#define FTOA_NAN 8
#define FTOA_CARRY 16 /* Carry was to master position. */
 
#endif /* !_FTOA_ENGINE_H */
/C-OSD/arducam-osd/libraries/FastSerial/keywords.txt
0,0 → 1,7
FastSerial KEYWORD1
begin KEYWORD2
end KEYWORD2
available KEYWORD2
read KEYWORD2
flush KEYWORD2
write KEYWORD2
/C-OSD/arducam-osd/libraries/FastSerial/macros.inc
0,0 → 1,365
/* Copyright (c) 2002, 2005, 2006, 2007 Marek Michalkiewicz
Copyright (c) 2006 Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
 
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
 
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/*
macros.inc - macros for use in assembler sources
 
Contributors:
Created by Marek Michalkiewicz <marekm@linux.org.pl>
*/
 
#include <avr/io.h>
//#include "sectionname.h"
 
/* if not defined, assume old version with underscores */
#ifndef __USER_LABEL_PREFIX__
#define __USER_LABEL_PREFIX__ _
#endif
 
#ifndef __REGISTER_PREFIX__
#define __REGISTER_PREFIX__
#endif
 
/* the assembler line separator (just in case it ever changes) */
#define _L $
 
#define CONCAT1(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a ## b
 
#define _U(x) CONCAT1(__USER_LABEL_PREFIX__, x)
 
#define _R(x) CONCAT1(__REGISTER_PREFIX__, x)
 
/* these should help to fix the "can't have function named r1()" bug
which may require adding '%' in front of register names. */
 
#define r0 _R(r0)
#define r1 _R(r1)
#define r2 _R(r2)
#define r3 _R(r3)
#define r4 _R(r4)
#define r5 _R(r5)
#define r6 _R(r6)
#define r7 _R(r7)
#define r8 _R(r8)
#define r9 _R(r9)
#define r10 _R(r10)
#define r11 _R(r11)
#define r12 _R(r12)
#define r13 _R(r13)
#define r14 _R(r14)
#define r15 _R(r15)
#define r16 _R(r16)
#define r17 _R(r17)
#define r18 _R(r18)
#define r19 _R(r19)
#define r20 _R(r20)
#define r21 _R(r21)
#define r22 _R(r22)
#define r23 _R(r23)
#define r24 _R(r24)
#define r25 _R(r25)
#define r26 _R(r26)
#define r27 _R(r27)
#define r28 _R(r28)
#define r29 _R(r29)
#define r30 _R(r30)
#define r31 _R(r31)
 
#ifndef __tmp_reg__
#define __tmp_reg__ r0
#endif
 
#ifndef __zero_reg__
#define __zero_reg__ r1
#endif
 
#if __AVR_MEGA__
#define XJMP jmp
#define XCALL call
#else
#define XJMP rjmp
#define XCALL rcall
#endif
 
/* used only by fplib/strtod.S - libgcc internal function calls */
#define PROLOGUE_SAVES(offset) XJMP (__prologue_saves__ + 2 * (offset))
#define EPILOGUE_RESTORES(offset) XJMP (__epilogue_restores__ + 2 * (offset))
 
#if FLASHEND > 0x10000 /* ATmega103 */
#define BIG_CODE 1
#else
#define BIG_CODE 0
#endif
 
#ifndef __AVR_HAVE_MOVW__
# if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
# define __AVR_HAVE_MOVW__ 1
# endif
#endif
 
#ifndef __AVR_HAVE_LPMX__
# if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
# define __AVR_HAVE_LPMX__ 1
# endif
#endif
 
#ifndef __AVR_HAVE_MUL__
# if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
# define __AVR_HAVE_MUL__ 1
# endif
#endif
 
/*
Smart version of movw:
- uses "movw" if possible (supported by MCU, and both registers even)
- handles overlapping register pairs correctly
- no instruction generated if source and destination are the same
(may expand to 0, 1 or 2 instructions).
*/
 
.macro X_movw dst src
.L_movw_dst = -1
.L_movw_src = -1
.L_movw_n = 0
.irp reg, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, \
r10,r11,r12,r13,r14,r15,r16,r17,r18,r19, \
r20,r21,r22,r23,r24,r25,r26,r27,r28,r29, \
r30,r31
.ifc \reg,\dst
.L_movw_dst = .L_movw_n
.endif
.ifc \reg,\src
.L_movw_src = .L_movw_n
.endif
.L_movw_n = .L_movw_n + 1
.endr
.L_movw_n = 0
.irp reg, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, \
R10,R11,R12,R13,R14,R15,R16,R17,R18,R19, \
R20,R21,R22,R23,R24,R25,R26,R27,R28,R29, \
R30,R31
.ifc \reg,\dst
.L_movw_dst = .L_movw_n
.endif
.ifc \reg,\src
.L_movw_src = .L_movw_n
.endif
.L_movw_n = .L_movw_n + 1
.endr
.if .L_movw_dst < 0
.L_movw_n = 0
.rept 32
.if \dst == .L_movw_n
.L_movw_dst = .L_movw_n
.endif
.L_movw_n = .L_movw_n + 1
.endr
.endif
.if .L_movw_src < 0
.L_movw_n = 0
.rept 32
.if \src == .L_movw_n
.L_movw_src = .L_movw_n
.endif
.L_movw_n = .L_movw_n + 1
.endr
.endif
.if (.L_movw_dst < 0) || (.L_movw_src < 0)
.err ; Invalid 'X_movw' arg.
.endif
.if ((.L_movw_src) - (.L_movw_dst)) /* different registers */
.if (((.L_movw_src) | (.L_movw_dst)) & 0x01)
.if (((.L_movw_src)-(.L_movw_dst)) & 0x80) /* src < dest */
mov (.L_movw_dst)+1, (.L_movw_src)+1
mov (.L_movw_dst), (.L_movw_src)
.else /* src > dest */
mov (.L_movw_dst), (.L_movw_src)
mov (.L_movw_dst)+1, (.L_movw_src)+1
.endif
.else /* both even -> overlap not possible */
#if defined(__AVR_HAVE_MOVW__) && __AVR_HAVE_MOVW__
movw \dst, \src
#else
mov (.L_movw_dst), (.L_movw_src)
mov (.L_movw_dst)+1, (.L_movw_src)+1
#endif
.endif
.endif
.endm
 
/* Macro 'X_lpm' extends enhanced lpm instruction for classic chips.
Usage:
X_lpm reg, dst
where
reg is 0..31, r0..r31 or R0..R31
dst is z, Z, z+ or Z+
It is possible to omit both arguments.
 
Possible results for classic chips:
lpm
lpm / mov Rd,r0
lpm / adiw ZL,1
lpm / mov Rd,r0 / adiw ZL,1
For enhanced chips it is one instruction always.
 
ATTENTION: unlike enhanced chips SREG (S,V,N,Z,C) flags are
changed in case of 'Z+' dst. R0 is scratch.
*/
.macro X_lpm dst=r0, src=Z
 
/* dst evaluation */
.L_lpm_dst = -1
 
.L_lpm_n = 0
.irp reg, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, \
r10,r11,r12,r13,r14,r15,r16,r17,r18,r19, \
r20,r21,r22,r23,r24,r25,r26,r27,r28,r29, \
r30,r31
.ifc \reg,\dst
.L_lpm_dst = .L_lpm_n
.endif
.L_lpm_n = .L_lpm_n + 1
.endr
 
.L_lpm_n = 0
.irp reg, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, \
R10,R11,R12,R13,R14,R15,R16,R17,R18,R19, \
R20,R21,R22,R23,R24,R25,R26,R27,R28,R29, \
R30,R31
.ifc \reg,\dst
.L_lpm_dst = .L_lpm_n
.endif
.L_lpm_n = .L_lpm_n + 1
.endr
 
.if .L_lpm_dst < 0
.L_lpm_n = 0
.rept 32
.if \dst == .L_lpm_n
.L_lpm_dst = .L_lpm_n
.endif
.L_lpm_n = .L_lpm_n + 1
.endr
.endif
 
.if (.L_lpm_dst < 0)
.err ; Invalid dst arg of 'X_lpm' macro.
.endif
 
/* src evaluation */
.L_lpm_src = -1
.L_lpm_n = 0
.irp reg, z,Z,z+,Z+
.ifc \reg,\src
.L_lpm_src = .L_lpm_n
.endif
.L_lpm_n = .L_lpm_n + 1
.endr
 
.if (.L_lpm_src < 0)
.err ; Invalid src arg of 'X_lpm' macro.
.endif
 
/* instruction(s) */
.if .L_lpm_src < 2
.if .L_lpm_dst == 0
lpm
.else
#if defined(__AVR_HAVE_LPMX__) && __AVR_HAVE_LPMX__
lpm .L_lpm_dst, Z
#else
lpm
mov .L_lpm_dst, r0
#endif
.endif
.else
.if (.L_lpm_dst >= 30)
.err ; Registers 30 and 31 are inhibited as 'X_lpm *,Z+' dst.
.endif
#if defined(__AVR_HAVE_LPMX__) && __AVR_HAVE_LPMX__
lpm .L_lpm_dst, Z+
#else
lpm
.if .L_lpm_dst
mov .L_lpm_dst, r0
.endif
adiw r30, 1
#endif
.endif
.endm
 
/*
LPM_R0_ZPLUS_INIT is used before the loop to initialize RAMPZ
for future devices with RAMPZ:Z auto-increment - [e]lpm r0, Z+.
 
LPM_R0_ZPLUS_NEXT is used inside the loop to load a byte from
the program memory at [RAMPZ:]Z to R0, and increment [RAMPZ:]Z.
 
The argument in both macros is a register that contains the
high byte (bits 23-16) of the address, bits 15-0 should be in
the Z (r31:r30) register. It can be any register except for:
r0, r1 (__zero_reg__ - assumed to always contain 0), r30, r31.
*/
 
.macro LPM_R0_ZPLUS_INIT hhi
#if __AVR_ENHANCED__
#if BIG_CODE
out AVR_RAMPZ_ADDR, \hhi
#endif
#endif
.endm
 
.macro LPM_R0_ZPLUS_NEXT hhi
#if __AVR_ENHANCED__
#if BIG_CODE
/* ELPM with RAMPZ:Z post-increment, load RAMPZ only once */
elpm r0, Z+
#else
/* LPM with Z post-increment, max 64K, no RAMPZ (ATmega83/161/163/32) */
lpm r0, Z+
#endif
#else
#if BIG_CODE
/* ELPM without post-increment, load RAMPZ each time (ATmega103) */
out AVR_RAMPZ_ADDR, \hhi
elpm
adiw r30,1
adc \hhi, __zero_reg__
#else
/* LPM without post-increment, max 64K, no RAMPZ (AT90S*) */
lpm
adiw r30,1
#endif
#endif
.endm
/C-OSD/arducam-osd/libraries/FastSerial/ntz.h
0,0 → 1,54
/* Copyright (c) 2007, Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/* $Id: ntz.h 1217 2007-02-18 13:18:05Z dmix $ */
 
#ifndef _NTZ_H
#define _NTZ_H
 
/* Number of Tail Zeros: ntz(x)= (ffs(x) ? ffs(x)-1 : 16)
It works with all: cpp, gcc and gas expressions. */
#define ntz(x) \
( (1 & (((x) & 1) == 0)) \
+ (1 & (((x) & 3) == 0)) \
+ (1 & (((x) & 7) == 0)) \
+ (1 & (((x) & 017) == 0)) \
+ (1 & (((x) & 037) == 0)) \
+ (1 & (((x) & 077) == 0)) \
+ (1 & (((x) & 0177) == 0)) \
+ (1 & (((x) & 0377) == 0)) \
+ (1 & (((x) & 0777) == 0)) \
+ (1 & (((x) & 01777) == 0)) \
+ (1 & (((x) & 03777) == 0)) \
+ (1 & (((x) & 07777) == 0)) \
+ (1 & (((x) & 017777) == 0)) \
+ (1 & (((x) & 037777) == 0)) \
+ (1 & (((x) & 077777) == 0)) \
+ (1 & (((x) & 0177777) == 0)) )
 
#endif /* !_NTZ_H */
/C-OSD/arducam-osd/libraries/FastSerial/ultoa_invert.S
0,0 → 1,216
/* Copyright (c) 2005,2007 Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/* $Id: ultoa_invert.S 1944 2009-04-01 23:12:20Z arcanum $ */
 
#ifndef __DOXYGEN__
 
#include "macros.inc"
#include "ntz.h"
#include "xtoa_fast.h"
 
/* --------------------------------------------------------------------
char * __ultoa_invert (unsigned long val, char * str, int base)
 
This function is intended for usage as internal printf's one.
It differs from others of `xtoa_fast' family:
* srt[] will NOT 0 terminated.
* Sequence of digits is inverted.
* It returns pointer to first byte after a string.
* Only `XTOA_UPPER' flag is operated.
Notes:
* base: check only 8 and 16, all others are treated as 10.
(internal printf's function).
*/
 
/* Input */
#define v_lo r22
#define v_hi r23
#define v_hlo r24
#define v_hhi r25
#define str_lo r20
#define str_hi r21
#define base r18
#define flags r19
 
/* Used */
#define v_fifth r26 /* val: bits 39..32 */
#define t_lo r18 /* temporary for shifted `val' */
#define t_hi r19
#define t_hlo r20
#define t_hhi r21
#define symb r20 /* write to string */
#define cnt r27 /* shift loop counter, local arg */
 
/* Fixed */
#define rzero r1
 
/* ASSEMBLY_CLIB_SECTION */
.global __ultoa_invert
.type __ultoa_invert, "function"
 
__ultoa_invert:
X_movw ZL, str_lo
clr v_fifth ; needed for all (ultoa_lsr)
cpi base, 8
breq .L_oct
cpi base, 16
breq .L_hex
 
; decimal format
clt ; flag of val == 0
.L_dec_loop:
push v_lo ; to calculate remander
; val &= ~1
andi v_lo, ~1
; val += 2
subi v_lo, lo8(-2)
sbci v_hi, hi8(-2)
sbci v_hlo, hlo8(-2)
sbci v_hhi, hhi8(-2)
sbci v_fifth, hhi8(-2)
; val += val/2
ldi cnt, 1
rcall .L_div_add
; val += val/16
ldi cnt, 4
rcall .L_div_add
; val += val/256
add v_lo, v_hi
adc v_hi, v_hlo
adc v_hlo, v_hhi
adc v_hhi, v_fifth
adc v_fifth, rzero
; val += val/65536
add v_lo, v_hlo
adc v_hi, v_hhi
adc v_hlo, v_fifth
adc v_hhi, rzero
adc v_fifth, rzero
; val += val >> 32
add v_lo, v_fifth
adc v_hi, rzero
adc v_hlo, rzero
adc v_hhi, rzero
adc v_fifth, rzero
; division result: val /= 16
rcall .L_lsr_4 ; v_fitth := 0
brne 1f
set ; T := Z flag
1:
; rem: val_original - 10*val
pop t_hi
#if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
ldi t_lo, 10
mul t_lo, v_lo
clr r1
#else
mov r0, v_lo
lsl r0
sub t_hi, r0
lsl r0
lsl r0
#endif
sub t_hi, r0
; output digit
subi t_hi, lo8(-'0')
st Z+, t_hi
; quotient == 0 ?
brtc .L_dec_loop
; end of string
.L_eos:
X_movw r24, ZL
ret
 
; octal format
.L_oct:
mov symb, v_lo
andi symb, 7
subi symb, lo8(-'0')
st Z+, symb
ldi cnt, 3
rcall .L_lsr
brne .L_oct
rjmp .L_eos
 
; hex format
.L_hex:
mov symb, v_lo
andi symb, 0x0f
subi symb, lo8(-'0')
cpi symb, '9' + 1
brlo 3f
subi symb, lo8('9' + 1 - 'a')
sbrc flags, ntz(XTOA_UPPER) - 8
subi symb, lo8('a' - 'A')
3: st Z+, symb
rcall .L_lsr_4
brne .L_hex
rjmp .L_eos
.L_lsr_4:
ldi cnt, 4
.L_lsr:
lsr v_fifth
ror v_hhi
ror v_hlo
ror v_hi
ror v_lo
dec cnt
brne .L_lsr
; tst
sbiw v_hlo, 0 ; only Z flag is needed
cpc v_lo, rzero
cpc v_hi, rzero
ret
 
.L_div_add:
; copy to temporary
X_movw t_lo, v_lo
X_movw t_hlo, v_hlo
mov r0, v_fifth
; lsr temporary
7: lsr r0
ror t_hhi
ror t_hlo
ror t_hi
ror t_lo
dec cnt
brne 7b
; add
add v_lo, t_lo
adc v_hi, t_hi
adc v_hlo, t_hlo
adc v_hhi, t_hhi
adc v_fifth, r0 ; here r0 == 0
ret
 
.size __ultoa_invert, . - __ultoa_invert
.end
 
#endif /* !__DOXYGEN__ */
/C-OSD/arducam-osd/libraries/FastSerial/vprintf.cpp
0,0 → 1,534
// -*- Mode: C++; c-basic-offset: 8; indent-tabs-mode: nil -*-
/*
Adapted from the avr-libc vfprintf:
 
Copyright (c) 2002, Alexander Popov (sasho@vip.bg)
Copyright (c) 2002,2004,2005 Joerg Wunsch
Copyright (c) 2005, Helmut Wallner
Copyright (c) 2007, Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
 
/* From: Id: printf_p_new.c,v 1.1.1.9 2002/10/15 20:10:28 joerg_wunsch Exp */
/* $Id: vfprintf.c,v 1.18.2.1 2009/04/01 23:12:06 arcanum Exp $ */
 
#include "BetterStream.h"
 
#include <avr/pgmspace.h>
#include <stdarg.h>
#include <string.h>
extern "C" {
#include "ftoa_engine.h"
#include "ntz.h"
#include "xtoa_fast.h"
}
 
// workaround for GCC bug c++/34734
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
#undef PSTR
#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];}))
 
#define GETBYTE(flag, mask, pnt) ({ \
unsigned char __c; \
asm ( \
"sbrc %2,%3 \n\t" \
"lpm %0,Z+ \n\t" \
"sbrs %2,%3 \n\t" \
"ld %0,Z+ " \
: "=r" (__c), \
"+z" (pnt) \
: "r" (flag), \
"I" (ntz(mask)) \
); \
__c; \
})
 
#define FL_ZFILL 0x01
#define FL_PLUS 0x02
#define FL_SPACE 0x04
#define FL_LPAD 0x08
#define FL_ALT 0x10
#define FL_WIDTH 0x20
#define FL_PREC 0x40
#define FL_LONG 0x80
 
#define FL_PGMSTRING FL_LONG
#define FL_NEGATIVE FL_LONG
 
#define FL_ALTUPP FL_PLUS
#define FL_ALTHEX FL_SPACE
 
#define FL_FLTUPP FL_ALT
#define FL_FLTEXP FL_PREC
#define FL_FLTFIX FL_LONG
 
#ifdef DESKTOP_BUILD
void
BetterStream::_vprintf (unsigned char in_progmem, const char *fmt, va_list ap)
{
char *str = NULL;
int i;
char *fmt2 = strdup(fmt);
for (i=0; fmt2[i]; i++) {
// cope with %S
if (fmt2[i] == '%' && fmt2[i+1] == 'S') {
fmt2[i+1] = 's';
}
}
vasprintf(&str, fmt2, ap);
for (i=0; str[i]; i++) {
write(str[i]);
}
free(str);
free(fmt2);
}
#else
void
BetterStream::_vprintf (unsigned char in_progmem, const char *fmt, va_list ap)
{
unsigned char c; /* holds a char from the format string */
unsigned char flags;
unsigned char width;
unsigned char prec;
unsigned char buf[11]; /* size for -1 in octal, without '\0' */
 
for (;;) {
 
/*
* Process non-format characters
*/
for (;;) {
c = GETBYTE (in_progmem, 1, fmt);
if (!c) return;
if (c == '%') {
c = GETBYTE (in_progmem, 1, fmt);
if (c != '%') break;
}
/* emit cr before lf to make most terminals happy */
if (c == '\n')
write('\r');
write(c);
}
 
flags = 0;
width = 0;
prec = 0;
/*
* Process format adjustment characters, precision, width.
*/
do {
if (flags < FL_WIDTH) {
switch (c) {
case '0':
flags |= FL_ZFILL;
continue;
case '+':
flags |= FL_PLUS;
/* FALLTHROUGH */
case ' ':
flags |= FL_SPACE;
continue;
case '-':
flags |= FL_LPAD;
continue;
case '#':
flags |= FL_ALT;
continue;
}
}
 
if (flags < FL_LONG) {
if (c >= '0' && c <= '9') {
c -= '0';
if (flags & FL_PREC) {
prec = 10*prec + c;
continue;
}
width = 10*width + c;
flags |= FL_WIDTH;
continue;
}
if (c == '.') {
if (flags & FL_PREC)
return;
flags |= FL_PREC;
continue;
}
if (c == 'l') {
flags |= FL_LONG;
continue;
}
if (c == 'h')
continue;
}
break;
} while ( (c = GETBYTE (in_progmem, 1, fmt)) != 0);
 
/*
* Handle floating-point formats E, F, G, e, f, g.
*/
if (c >= 'E' && c <= 'G') {
flags |= FL_FLTUPP;
c += 'e' - 'E';
goto flt_oper;
 
} else if (c >= 'e' && c <= 'g') {
 
int exp; /* exponent of master decimal digit */
int n;
unsigned char vtype; /* result of float value parse */
unsigned char sign; /* sign character (or 0) */
unsigned char ndigs;
 
flags &= ~FL_FLTUPP;
 
flt_oper:
if (!(flags & FL_PREC))
prec = 6;
flags &= ~(FL_FLTEXP | FL_FLTFIX);
if (c == 'e')
flags |= FL_FLTEXP;
else if (c == 'f')
flags |= FL_FLTFIX;
else if (prec > 0)
prec -= 1;
 
if (flags & FL_FLTFIX) {
vtype = 7; /* 'prec' arg for 'ftoa_engine' */
ndigs = prec < 60 ? prec + 1 : 60;
} else {
if (prec > 7) prec = 7;
vtype = prec;
ndigs = 0;
}
exp = __ftoa_engine (va_arg(ap,double), (char *)buf, vtype, ndigs);
vtype = buf[0];
sign = 0;
if ((vtype & FTOA_MINUS) && !(vtype & FTOA_NAN))
sign = '-';
else if (flags & FL_PLUS)
sign = '+';
else if (flags & FL_SPACE)
sign = ' ';
 
if (vtype & (FTOA_NAN | FTOA_INF)) {
const char *p;
ndigs = sign ? 4 : 3;
if (width > ndigs) {
width -= ndigs;
if (!(flags & FL_LPAD)) {
do {
write(' ');
} while (--width);
}
} else {
width = 0;
}
if (sign)
write(sign);
p = PSTR("inf");
if (vtype & FTOA_NAN)
p = PSTR("nan");
while ( (ndigs = pgm_read_byte((const prog_char *)p)) != 0) {
if (flags & FL_FLTUPP)
ndigs += 'I' - 'i';
write(ndigs);
p++;
}
goto tail;
}
 
/* Output format adjustment, number of decimal digits in buf[] */
if (flags & FL_FLTFIX) {
ndigs += exp;
if ((vtype & FTOA_CARRY) && buf[1] == '1')
ndigs -= 1;
if ((signed char)ndigs < 1)
ndigs = 1;
else if (ndigs > 8)
ndigs = 8;
} else if (!(flags & FL_FLTEXP)) { /* 'g(G)' format */
if (exp <= prec && exp >= -4)
flags |= FL_FLTFIX;
while (prec && buf[1+prec] == '0')
prec--;
if (flags & FL_FLTFIX) {
ndigs = prec + 1; /* number of digits in buf */
prec = prec > exp
? prec - exp : 0; /* fractional part length */
}
}
/* Conversion result length, width := free space length */
if (flags & FL_FLTFIX)
n = (exp>0 ? exp+1 : 1);
else
n = 5; /* 1e+00 */
if (sign) n += 1;
if (prec) n += prec + 1;
width = width > n ? width - n : 0;
/* Output before first digit */
if (!(flags & (FL_LPAD | FL_ZFILL))) {
while (width) {
write(' ');
width--;
}
}
if (sign) write(sign);
if (!(flags & FL_LPAD)) {
while (width) {
write('0');
width--;
}
}
if (flags & FL_FLTFIX) { /* 'f' format */
 
n = exp > 0 ? exp : 0; /* exponent of left digit */
do {
if (n == -1)
write('.');
flags = (n <= exp && n > exp - ndigs)
? buf[exp - n + 1] : '0';
if (--n < -prec)
break;
write(flags);
} while (1);
if (n == exp
&& (buf[1] > '5'
|| (buf[1] == '5' && !(vtype & FTOA_CARRY))) )
{
flags = '1';
}
write(flags);
} else { /* 'e(E)' format */
 
/* mantissa */
if (buf[1] != '1')
vtype &= ~FTOA_CARRY;
write(buf[1]);
if (prec) {
write('.');
sign = 2;
do {
write(buf[sign++]);
} while (--prec);
}
 
/* exponent */
write(flags & FL_FLTUPP ? 'E' : 'e');
ndigs = '+';
if (exp < 0 || (exp == 0 && (vtype & FTOA_CARRY) != 0)) {
exp = -exp;
ndigs = '-';
}
write(ndigs);
for (ndigs = '0'; exp >= 10; exp -= 10)
ndigs += 1;
write(ndigs);
write('0' + exp);
}
 
goto tail;
}
 
/*
* Handle string formats c, s, S.
*/
{
const char * pnt;
size_t size;
 
switch (c) {
 
case 'c':
buf[0] = va_arg (ap, int);
pnt = (char *)buf;
size = 1;
goto no_pgmstring;
 
case 's':
pnt = va_arg (ap, char *);
size = strnlen (pnt, (flags & FL_PREC) ? prec : ~0);
no_pgmstring:
flags &= ~FL_PGMSTRING;
goto str_lpad;
 
case 'S':
// pgmstring: // not yet used
pnt = va_arg (ap, char *);
size = strnlen_P (pnt, (flags & FL_PREC) ? prec : ~0);
flags |= FL_PGMSTRING;
 
str_lpad:
if (!(flags & FL_LPAD)) {
while (size < width) {
write(' ');
width--;
}
}
while (size) {
write(GETBYTE (flags, FL_PGMSTRING, pnt));
if (width) width -= 1;
size -= 1;
}
goto tail;
}
}
 
/*
* Handle integer formats variations for d/i, u, o, p, x, X.
*/
if (c == 'd' || c == 'i') {
long x = (flags & FL_LONG) ? va_arg(ap,long) : va_arg(ap,int);
flags &= ~(FL_NEGATIVE | FL_ALT);
if (x < 0) {
x = -x;
flags |= FL_NEGATIVE;
}
c = __ultoa_invert (x, (char *)buf, 10) - (char *)buf;
 
} else {
int base;
 
if (c == 'u') {
flags &= ~FL_ALT;
base = 10;
goto ultoa;
}
 
flags &= ~(FL_PLUS | FL_SPACE);
 
switch (c) {
case 'o':
base = 8;
goto ultoa;
case 'p':
flags |= FL_ALT;
/* no break */
case 'x':
if (flags & FL_ALT)
flags |= FL_ALTHEX;
base = 16;
goto ultoa;
case 'X':
if (flags & FL_ALT)
flags |= (FL_ALTHEX | FL_ALTUPP);
base = 16 | XTOA_UPPER;
ultoa:
c = __ultoa_invert ((flags & FL_LONG)
? va_arg(ap, unsigned long)
: va_arg(ap, unsigned int),
(char *)buf, base) - (char *)buf;
flags &= ~FL_NEGATIVE;
break;
 
default:
return;
}
}
 
/*
* Format integers.
*/
{
unsigned char len;
 
len = c;
if (flags & FL_PREC) {
flags &= ~FL_ZFILL;
if (len < prec) {
len = prec;
if ((flags & FL_ALT) && !(flags & FL_ALTHEX))
flags &= ~FL_ALT;
}
}
if (flags & FL_ALT) {
if (buf[c-1] == '0') {
flags &= ~(FL_ALT | FL_ALTHEX | FL_ALTUPP);
} else {
len += 1;
if (flags & FL_ALTHEX)
len += 1;
}
} else if (flags & (FL_NEGATIVE | FL_PLUS | FL_SPACE)) {
len += 1;
}
 
if (!(flags & FL_LPAD)) {
if (flags & FL_ZFILL) {
prec = c;
if (len < width) {
prec += width - len;
len = width;
}
}
while (len < width) {
write(' ');
len++;
}
}
width = (len < width) ? width - len : 0;
 
if (flags & FL_ALT) {
write('0');
if (flags & FL_ALTHEX)
write(flags & FL_ALTUPP ? 'X' : 'x');
} else if (flags & (FL_NEGATIVE | FL_PLUS | FL_SPACE)) {
unsigned char z = ' ';
if (flags & FL_PLUS) z = '+';
if (flags & FL_NEGATIVE) z = '-';
write(z);
}
while (prec > c) {
write('0');
prec--;
}
do {
write(buf[--c]);
} while (c);
}
tail:
/* Tail is possible. */
while (width) {
write(' ');
width--;
}
} /* for (;;) */
}
#endif // DESKTOP_BUILD
/C-OSD/arducam-osd/libraries/FastSerial/xtoa_fast.h
0,0 → 1,48
/*
Adapted from avr-libc:
 
Copyright (c) 2005, Dmitry Xmelkov
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holders nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. */
 
/* $Id: xtoa_fast.h 1223 2007-02-18 13:33:09Z dmix $ */
 
#ifndef _XTOA_FAST_H_
#define _XTOA_FAST_H_
 
#ifndef __ASSEMBLER__
 
/* Internal function for use from `printf'. */
char * __ultoa_invert (unsigned long val, char *s, int base);
 
#endif /* ifndef __ASSEMBLER__ */
 
/* Next flags are to use with `base'. Unused fields are reserved. */
#define XTOA_PREFIX 0x0100 /* put prefix for octal or hex */
#define XTOA_UPPER 0x0200 /* use upper case letters */
 
#endif /* _XTOA_FAST_H_ */
/C-OSD/arducam-osd/libraries/GCS_MAVLink/.gitignore
0,0 → 1,16
*~
doc/html
doc/*.log
 
include/mavlink/v0.9/slugs/
include/mavlink/v0.9/ualberta/
include/mavlink/v0.9/minimal/
include/mavlink/v0.9/test/
include/mavlink/v0.9/pixhawk/
 
include/mavlink/v1.0/slugs/
include/mavlink/v1.0/ualberta/
include/mavlink/v1.0/minimal/
include/mavlink/v1.0/test/
include/mavlink/v1.0/pixhawk/
include/mavlink/v1.0/sensoar/
/C-OSD/arducam-osd/libraries/GCS_MAVLink/GCS_MAVLink.h
0,0 → 1,130
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
 
/// @file GCS_MAVLink.h
/// @brief One size fits all header for MAVLink integration.
 
#ifndef GCS_MAVLink_h
#define GCS_MAVLink_h
 
#include <BetterStream.h>
 
// we have separate helpers disabled to make it possible
// to select MAVLink 1.0 in the arduino GUI build
//#define MAVLINK_SEPARATE_HELPERS
 
#ifdef MAVLINK10
# include "include/mavlink/v1.0/ardupilotmega/version.h"
#else
# include "include/mavlink/v0.9/ardupilotmega/version.h"
#endif
 
// this allows us to make mavlink_message_t much smaller
#define MAVLINK_MAX_PAYLOAD_LEN MAVLINK_MAX_DIALECT_PAYLOAD_SIZE
 
#define MAVLINK_COMM_NUM_BUFFERS 2
#ifdef MAVLINK10
# include "include/mavlink/v1.0/mavlink_types.h"
#else
# include "include/mavlink/v0.9/mavlink_types.h"
#endif
 
/// MAVLink stream used for HIL interaction
extern BetterStream *mavlink_comm_0_port;
 
/// MAVLink stream used for ground control communication
extern BetterStream *mavlink_comm_1_port;
 
/// MAVLink system definition
extern mavlink_system_t mavlink_system;
 
/// Send a byte to the nominated MAVLink channel
///
/// @param chan Channel to send to
/// @param ch Byte to send
///
static inline void comm_send_ch(mavlink_channel_t chan, uint8_t ch)
{
switch(chan) {
case MAVLINK_COMM_0:
mavlink_comm_0_port->write(ch);
break;
case MAVLINK_COMM_1:
mavlink_comm_1_port->write(ch);
break;
default:
break;
}
}
 
/// Read a byte from the nominated MAVLink channel
///
/// @param chan Channel to receive on
/// @returns Byte read
///
static inline uint8_t comm_receive_ch(mavlink_channel_t chan)
{
uint8_t data = 0;
 
switch(chan) {
case MAVLINK_COMM_0:
data = mavlink_comm_0_port->read();
break;
case MAVLINK_COMM_1:
data = mavlink_comm_1_port->read();
break;
default:
break;
}
return data;
}
 
/// Check for available data on the nominated MAVLink channel
///
/// @param chan Channel to check
/// @returns Number of bytes available
static inline uint16_t comm_get_available(mavlink_channel_t chan)
{
uint16_t bytes = 0;
switch(chan) {
case MAVLINK_COMM_0:
bytes = mavlink_comm_0_port->available();
break;
case MAVLINK_COMM_1:
bytes = mavlink_comm_1_port->available();
break;
default:
break;
}
return bytes;
}
 
 
/// Check for available transmit space on the nominated MAVLink channel
///
/// @param chan Channel to check
/// @returns Number of bytes available, -1 for error
static inline int comm_get_txspace(mavlink_channel_t chan)
{
switch(chan) {
case MAVLINK_COMM_0:
return mavlink_comm_0_port->txspace();
break;
case MAVLINK_COMM_1:
return mavlink_comm_1_port->txspace();
break;
default:
break;
}
return -1;
}
 
#define MAVLINK_USE_CONVENIENCE_FUNCTIONS
#ifdef MAVLINK10
# include "include/mavlink/v1.0/ardupilotmega/mavlink.h"
#else
# include "include/mavlink/v0.9/ardupilotmega/mavlink.h"
#endif
 
uint8_t mavlink_check_target(uint8_t sysid, uint8_t compid);
 
#endif // GCS_MAVLink_h
/C-OSD/arducam-osd/libraries/GCS_MAVLink/Mavlink_compat.h
0,0 → 1,174
/*
compatibility header during transition to MAVLink 1.0
*/
 
#ifdef MAVLINK10
// in MAVLink 1.0 'waypoint' becomes 'mission'. We can remove these
// mappings once we are not trying to support both protocols
 
#define MAVLINK_MSG_ID_WAYPOINT_CURRENT MAVLINK_MSG_ID_MISSION_CURRENT
#define MAVLINK_MSG_ID_WAYPOINT_CURRENT_LEN MAVLINK_MSG_ID_MISSION_CURRENT_LEN
#define mavlink_msg_waypoint_current_send mavlink_msg_mission_current_send
#define mavlink_msg_waypoint_current_decode mavlink_msg_mission_current_decode
 
#define MAVLINK_MSG_ID_WAYPOINT_COUNT MAVLINK_MSG_ID_MISSION_COUNT
#define MAVLINK_MSG_ID_WAYPOINT_COUNT_LEN MAVLINK_MSG_ID_MISSION_COUNT_LEN
#define mavlink_msg_waypoint_count_send mavlink_msg_mission_count_send
#define mavlink_msg_waypoint_count_decode mavlink_msg_mission_count_decode
#define mavlink_waypoint_count_t mavlink_mission_count_t
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST MAVLINK_MSG_ID_MISSION_REQUEST
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LEN MAVLINK_MSG_ID_MISSION_REQUEST_LEN
#define mavlink_msg_waypoint_request_send mavlink_msg_mission_request_send
#define mavlink_msg_waypoint_request_decode mavlink_msg_mission_request_decode
#define mavlink_waypoint_request_t mavlink_mission_request_t
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST MAVLINK_MSG_ID_MISSION_REQUEST_LIST
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST_LEN MAVLINK_MSG_ID_MISSION_REQUEST_LIST_LEN
#define mavlink_msg_waypoint_request_list_send mavlink_msg_mission_request_list_send
#define mavlink_msg_waypoint_request_list_decode mavlink_msg_mission_request_list_decode
#define mavlink_waypoint_request_list_t mavlink_mission_request_list_t
 
#define MAVLINK_MSG_ID_WAYPOINT MAVLINK_MSG_ID_MISSION_ITEM
#define MAVLINK_MSG_ID_WAYPOINT_LEN MAVLINK_MSG_ID_MISSION_ITEM_LEN
#define mavlink_msg_waypoint_send mavlink_msg_mission_item_send
#define mavlink_msg_waypoint_decode mavlink_msg_mission_item_decode
#define mavlink_waypoint_t mavlink_mission_item_t
 
#define MAVLINK_MSG_ID_WAYPOINT_ACK MAVLINK_MSG_ID_MISSION_ACK
#define MAVLINK_MSG_ID_WAYPOINT_ACK_LEN MAVLINK_MSG_ID_MISSION_ACK_LEN
#define mavlink_msg_waypoint_ack_send mavlink_msg_mission_ack_send
#define mavlink_msg_waypoint_ack_decode mavlink_msg_mission_ack_decode
#define mavlink_waypoint_ack_t mavlink_mission_ack_t
 
#define MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL MAVLINK_MSG_ID_MISSION_CLEAR_ALL
#define MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL_LEN MAVLINK_MSG_ID_MISSION_CLEAR_ALL_LEN
#define mavlink_msg_waypoint_clear_all_send mavlink_msg_mission_clear_all_send
#define mavlink_msg_waypoint_clear_all_decode mavlink_msg_mission_clear_all_decode
#define mavlink_waypoint_clear_all_t mavlink_mission_clear_all_t
 
#define MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT MAVLINK_MSG_ID_MISSION_SET_CURRENT
#define MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT_LEN MAVLINK_MSG_ID_MISSION_SET_CURRENT_LEN
#define mavlink_msg_waypoint_set_current_send mavlink_msg_mission_set_current_send
#define mavlink_msg_waypoint_set_current_decode mavlink_msg_mission_set_current_decode
#define mavlink_waypoint_set_current_t mavlink_mission_set_current_t
 
#define MAV_CMD_DO_SET_ROI MAV_CMD_NAV_ROI
 
static uint8_t mav_var_type(enum ap_var_type t)
{
if (t == AP_PARAM_INT8) {
return MAV_VAR_INT8;
}
if (t == AP_PARAM_INT16) {
return MAV_VAR_INT16;
}
if (t == AP_PARAM_INT32) {
return MAV_VAR_INT32;
}
// treat any others as float
return MAV_VAR_FLOAT;
}
 
#define MAV_FIXED_WING MAV_TYPE_FIXED_WING
 
#else // MAVLINK10
 
static uint8_t mav_var_type(enum ap_var_type t)
{
return 0;
}
 
#define MAV_MISSION_ACCEPTED 0
#define MAV_MISSION_UNSUPPORTED 1
#define MAV_MISSION_UNSUPPORTED_FRAME 1
#define MAV_MISSION_ERROR 1
#define MAV_MISSION_INVALID_SEQUENCE 1
 
/*
some functions have some extra params in MAVLink 1.0
*/
 
static void mavlink_msg_global_position_int_send(mavlink_channel_t chan, uint32_t time_boot_ms, int32_t lat, int32_t lon,
int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy,
int16_t vz, uint16_t hdg)
{
mavlink_msg_global_position_int_send(
chan,
lat,
lon,
alt,
vx, vy, vz);
}
 
static void mavlink_msg_rc_channels_scaled_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t port,
int16_t chan1_scaled, int16_t chan2_scaled, int16_t chan3_scaled,
int16_t chan4_scaled, int16_t chan5_scaled, int16_t chan6_scaled,
int16_t chan7_scaled, int16_t chan8_scaled, uint8_t rssi)
{
mavlink_msg_rc_channels_scaled_send(
chan,
chan1_scaled,
chan2_scaled,
chan3_scaled,
chan4_scaled,
chan5_scaled,
chan6_scaled,
chan7_scaled,
chan8_scaled,
rssi);
}
 
static void mavlink_msg_rc_channels_raw_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t port,
uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw,
uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw,
uint16_t chan7_raw, uint16_t chan8_raw, uint8_t rssi)
{
mavlink_msg_rc_channels_raw_send(
chan,
chan1_raw,
chan2_raw,
chan3_raw,
chan4_raw,
chan5_raw,
chan6_raw,
chan7_raw,
chan8_raw,
rssi);
}
 
 
static void mavlink_msg_servo_output_raw_send(mavlink_channel_t chan, uint32_t time_usec, uint8_t port,
uint16_t servo1_raw, uint16_t servo2_raw, uint16_t servo3_raw,
uint16_t servo4_raw, uint16_t servo5_raw, uint16_t servo6_raw,
uint16_t servo7_raw, uint16_t servo8_raw)
{
mavlink_msg_servo_output_raw_send(
chan,
servo1_raw,
servo2_raw,
servo3_raw,
servo4_raw,
servo5_raw,
servo6_raw,
servo7_raw,
servo8_raw);
}
 
static void mavlink_msg_statustext_send(mavlink_channel_t chan, uint8_t severity, const char *text)
{
mavlink_msg_statustext_send(chan, severity, (const int8_t*) text);
}
 
static void mavlink_msg_param_value_send(mavlink_channel_t chan, const char *param_id,
float param_value, uint8_t param_type,
uint16_t param_count, uint16_t param_index)
{
mavlink_msg_param_value_send(
chan,
(int8_t *)param_id,
param_value,
param_count,
param_index);
}
#endif // MAVLINK10
/C-OSD/arducam-osd/libraries/GCS_MAVLink/VERSION
0,0 → 1,0
1.0.7
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/config.h
0,0 → 1,0
#define MAVLINK_VERSION "1.0.7"
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/ardupilotmega.h
0,0 → 1,154
/** @file
* @brief MAVLink comm protocol generated from ardupilotmega.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef ARDUPILOTMEGA_H
#define ARDUPILOTMEGA_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {3, 4, 8, 14, 8, 28, 3, 32, 0, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 19, 2, 23, 21, 0, 37, 26, 101, 26, 16, 32, 32, 37, 32, 11, 17, 17, 16, 18, 36, 4, 4, 2, 2, 4, 2, 2, 3, 14, 12, 18, 16, 8, 27, 25, 18, 18, 24, 24, 0, 0, 0, 26, 16, 36, 5, 6, 56, 26, 21, 18, 0, 0, 18, 20, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 14, 14, 51, 5}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {72, 39, 190, 92, 191, 217, 104, 119, 0, 219, 60, 186, 10, 0, 0, 0, 0, 0, 0, 0, 89, 159, 162, 121, 0, 149, 222, 110, 179, 136, 66, 126, 185, 147, 112, 252, 162, 215, 229, 128, 9, 106, 101, 213, 4, 229, 21, 214, 215, 14, 206, 50, 157, 126, 108, 213, 95, 5, 127, 0, 0, 0, 57, 126, 130, 119, 193, 191, 236, 158, 143, 0, 0, 104, 123, 131, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 29, 208, 188, 118, 242, 19, 97, 233, 0, 18, 68, 136, 127, 42, 21, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 224, 60, 106, 7}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_BOOT, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_SYSTEM_TIME_UTC, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_ACTION_ACK, MAVLINK_MESSAGE_INFO_ACTION, MAVLINK_MESSAGE_INFO_SET_MODE, MAVLINK_MESSAGE_INFO_SET_NAV_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_LOCAL_POSITION, MAVLINK_MESSAGE_INFO_GPS_RAW, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_WAYPOINT, MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST, MAVLINK_MESSAGE_INFO_WAYPOINT_SET_CURRENT, MAVLINK_MESSAGE_INFO_WAYPOINT_CURRENT, MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST_LIST, MAVLINK_MESSAGE_INFO_WAYPOINT_COUNT, MAVLINK_MESSAGE_INFO_WAYPOINT_CLEAR_ALL, MAVLINK_MESSAGE_INFO_WAYPOINT_REACHED, MAVLINK_MESSAGE_INFO_WAYPOINT_ACK, MAVLINK_MESSAGE_INFO_GPS_SET_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_LOCAL_ORIGIN_SET, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT_SET, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_CONTROL_STATUS, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, MAVLINK_MESSAGE_INFO_POSITION_TARGET, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, MAVLINK_MESSAGE_INFO_SET_ALTITUDE, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_VFR_HUD, MAVLINK_MESSAGE_INFO_COMMAND, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBJECT_DETECTION_EVENT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SENSOR_OFFSETS, MAVLINK_MESSAGE_INFO_SET_MAG_OFFSETS, MAVLINK_MESSAGE_INFO_MEMINFO, MAVLINK_MESSAGE_INFO_AP_ADC, MAVLINK_MESSAGE_INFO_DIGICAM_CONFIGURE, MAVLINK_MESSAGE_INFO_DIGICAM_CONTROL, MAVLINK_MESSAGE_INFO_MOUNT_CONFIGURE, MAVLINK_MESSAGE_INFO_MOUNT_CONTROL, MAVLINK_MESSAGE_INFO_MOUNT_STATUS, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_FENCE_POINT, MAVLINK_MESSAGE_INFO_FENCE_FETCH_POINT, MAVLINK_MESSAGE_INFO_FENCE_STATUS, MAVLINK_MESSAGE_INFO_AHRS, MAVLINK_MESSAGE_INFO_SIMSTATE, MAVLINK_MESSAGE_INFO_HWSTATUS, MAVLINK_MESSAGE_INFO_RADIO, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_ARDUPILOTMEGA
 
// ENUM DEFINITIONS
 
 
/** @brief Enumeration of possible mount operation modes */
#ifndef HAVE_ENUM_MAV_MOUNT_MODE
#define HAVE_ENUM_MAV_MOUNT_MODE
enum MAV_MOUNT_MODE
{
MAV_MOUNT_MODE_RETRACT=0, /* Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | */
MAV_MOUNT_MODE_NEUTRAL=1, /* Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | */
MAV_MOUNT_MODE_MAVLINK_TARGETING=2, /* Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | */
MAV_MOUNT_MODE_RC_TARGETING=3, /* Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | */
MAV_MOUNT_MODE_GPS_POINT=4, /* Load neutral position and start to point to Lat,Lon,Alt | */
MAV_MOUNT_MODE_ENUM_END=5, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_CMD
#define HAVE_ENUM_MAV_CMD
enum MAV_CMD
{
MAV_CMD_NAV_WAYPOINT=16, /* Navigate to waypoint. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at waypoint for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the waypoint counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at waypoint (rotary wing)| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_UNLIM=17, /* Loiter around this waypoint an unlimited amount of time |Empty| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_TURNS=18, /* Loiter around this waypoint for X turns |Turns| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_TIME=19, /* Loiter around this waypoint for X seconds |Seconds (decimal)| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_RETURN_TO_LAUNCH=20, /* Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_NAV_LAND=21, /* Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_TAKEOFF=22, /* Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_ROI=80, /* Sets the region of interest (ROI) for a sensor set or the
vehicle itself. This can then be used by the vehicles control
system to control the vehicle attitude and the attitude of various
sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */
MAV_CMD_NAV_PATHPLANNING=81, /* Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| */
MAV_CMD_NAV_LAST=95, /* NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_DELAY=112, /* Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_CHANGE_ALT=113, /* Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| */
MAV_CMD_CONDITION_DISTANCE=114, /* Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_YAW=115, /* Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| */
MAV_CMD_CONDITION_LAST=159, /* NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_MODE=176, /* Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_JUMP=177, /* Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_CHANGE_SPEED=178, /* Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_HOME=179, /* Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| */
MAV_CMD_DO_SET_PARAMETER=180, /* Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_RELAY=181, /* Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_REPEAT_RELAY=182, /* Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_SERVO=183, /* Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_REPEAT_SERVO=184, /* Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| */
MAV_CMD_DO_CONTROL_VIDEO=200, /* Control onboard camera capturing. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| */
MAV_CMD_DO_SET_ROI=201, /* Sets the region of interest (ROI) for a sensor set or the
vehicle itself. This can then be used by the vehicles control
system to control the vehicle attitude and the attitude of various
devices such as cameras.
|Region of interest mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple cameras etc.)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */
MAV_CMD_DO_DIGICAM_CONFIGURE=202, /* Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| */
MAV_CMD_DO_DIGICAM_CONTROL=203, /* Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| */
MAV_CMD_DO_MOUNT_CONFIGURE=204, /* Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| */
MAV_CMD_DO_MOUNT_CONTROL=205, /* Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_LAST=240, /* NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_PREFLIGHT_CALIBRATION=241, /* Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| */
MAV_CMD_PREFLIGHT_STORAGE=245, /* Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| */
MAV_CMD_ENUM_END=246, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_FENCE_ACTION
#define HAVE_ENUM_FENCE_ACTION
enum FENCE_ACTION
{
FENCE_ACTION_NONE=0, /* Disable fenced mode | */
FENCE_ACTION_GUIDED=1, /* Switched to guided mode to return point (fence point 0) | */
FENCE_ACTION_ENUM_END=2, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_FENCE_BREACH
#define HAVE_ENUM_FENCE_BREACH
enum FENCE_BREACH
{
FENCE_BREACH_NONE=0, /* No last fence breach | */
FENCE_BREACH_MINALT=1, /* Breached minimum altitude | */
FENCE_BREACH_MAXALT=2, /* Breached minimum altitude | */
FENCE_BREACH_BOUNDARY=3, /* Breached fence boundary | */
FENCE_BREACH_ENUM_END=4, /* | */
};
#endif
 
#include "../common/common.h"
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
// MESSAGE DEFINITIONS
#include "./mavlink_msg_sensor_offsets.h"
#include "./mavlink_msg_set_mag_offsets.h"
#include "./mavlink_msg_meminfo.h"
#include "./mavlink_msg_ap_adc.h"
#include "./mavlink_msg_digicam_configure.h"
#include "./mavlink_msg_digicam_control.h"
#include "./mavlink_msg_mount_configure.h"
#include "./mavlink_msg_mount_control.h"
#include "./mavlink_msg_mount_status.h"
#include "./mavlink_msg_fence_point.h"
#include "./mavlink_msg_fence_fetch_point.h"
#include "./mavlink_msg_fence_status.h"
#include "./mavlink_msg_ahrs.h"
#include "./mavlink_msg_simstate.h"
#include "./mavlink_msg_hwstatus.h"
#include "./mavlink_msg_radio.h"
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // ARDUPILOTMEGA_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from ardupilotmega.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 85
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_BIG_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 0
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 0
#endif
 
#include "version.h"
#include "ardupilotmega.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_ahrs.h
0,0 → 1,276
// MESSAGE AHRS PACKING
 
#define MAVLINK_MSG_ID_AHRS 163
 
typedef struct __mavlink_ahrs_t
{
float omegaIx; ///< X gyro drift estimate rad/s
float omegaIy; ///< Y gyro drift estimate rad/s
float omegaIz; ///< Z gyro drift estimate rad/s
float accel_weight; ///< average accel_weight
float renorm_val; ///< average renormalisation value
float error_rp; ///< average error_roll_pitch value
float error_yaw; ///< average error_yaw value
} mavlink_ahrs_t;
 
#define MAVLINK_MSG_ID_AHRS_LEN 28
#define MAVLINK_MSG_ID_163_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_AHRS { \
"AHRS", \
7, \
{ { "omegaIx", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_ahrs_t, omegaIx) }, \
{ "omegaIy", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_ahrs_t, omegaIy) }, \
{ "omegaIz", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_ahrs_t, omegaIz) }, \
{ "accel_weight", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_ahrs_t, accel_weight) }, \
{ "renorm_val", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_ahrs_t, renorm_val) }, \
{ "error_rp", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_ahrs_t, error_rp) }, \
{ "error_yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_ahrs_t, error_yaw) }, \
} \
}
 
 
/**
* @brief Pack a ahrs message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ahrs_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float omegaIx, float omegaIy, float omegaIz, float accel_weight, float renorm_val, float error_rp, float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AHRS;
return mavlink_finalize_message(msg, system_id, component_id, 28);
}
 
/**
* @brief Pack a ahrs message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ahrs_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float omegaIx,float omegaIy,float omegaIz,float accel_weight,float renorm_val,float error_rp,float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AHRS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28);
}
 
/**
* @brief Encode a ahrs struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ahrs C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ahrs_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ahrs_t* ahrs)
{
return mavlink_msg_ahrs_pack(system_id, component_id, msg, ahrs->omegaIx, ahrs->omegaIy, ahrs->omegaIz, ahrs->accel_weight, ahrs->renorm_val, ahrs->error_rp, ahrs->error_yaw);
}
 
/**
* @brief Send a ahrs message
* @param chan MAVLink channel to send the message
*
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ahrs_send(mavlink_channel_t chan, float omegaIx, float omegaIy, float omegaIz, float accel_weight, float renorm_val, float error_rp, float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AHRS, buf, 28);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AHRS, (const char *)&packet, 28);
#endif
}
 
#endif
 
// MESSAGE AHRS UNPACKING
 
 
/**
* @brief Get field omegaIx from ahrs message
*
* @return X gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIx(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field omegaIy from ahrs message
*
* @return Y gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIy(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field omegaIz from ahrs message
*
* @return Z gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIz(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field accel_weight from ahrs message
*
* @return average accel_weight
*/
static inline float mavlink_msg_ahrs_get_accel_weight(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field renorm_val from ahrs message
*
* @return average renormalisation value
*/
static inline float mavlink_msg_ahrs_get_renorm_val(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field error_rp from ahrs message
*
* @return average error_roll_pitch value
*/
static inline float mavlink_msg_ahrs_get_error_rp(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field error_yaw from ahrs message
*
* @return average error_yaw value
*/
static inline float mavlink_msg_ahrs_get_error_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a ahrs message into a struct
*
* @param msg The message to decode
* @param ahrs C-struct to decode the message contents into
*/
static inline void mavlink_msg_ahrs_decode(const mavlink_message_t* msg, mavlink_ahrs_t* ahrs)
{
#if MAVLINK_NEED_BYTE_SWAP
ahrs->omegaIx = mavlink_msg_ahrs_get_omegaIx(msg);
ahrs->omegaIy = mavlink_msg_ahrs_get_omegaIy(msg);
ahrs->omegaIz = mavlink_msg_ahrs_get_omegaIz(msg);
ahrs->accel_weight = mavlink_msg_ahrs_get_accel_weight(msg);
ahrs->renorm_val = mavlink_msg_ahrs_get_renorm_val(msg);
ahrs->error_rp = mavlink_msg_ahrs_get_error_rp(msg);
ahrs->error_yaw = mavlink_msg_ahrs_get_error_yaw(msg);
#else
memcpy(ahrs, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_ap_adc.h
0,0 → 1,254
// MESSAGE AP_ADC PACKING
 
#define MAVLINK_MSG_ID_AP_ADC 153
 
typedef struct __mavlink_ap_adc_t
{
uint16_t adc1; ///< ADC output 1
uint16_t adc2; ///< ADC output 2
uint16_t adc3; ///< ADC output 3
uint16_t adc4; ///< ADC output 4
uint16_t adc5; ///< ADC output 5
uint16_t adc6; ///< ADC output 6
} mavlink_ap_adc_t;
 
#define MAVLINK_MSG_ID_AP_ADC_LEN 12
#define MAVLINK_MSG_ID_153_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_AP_ADC { \
"AP_ADC", \
6, \
{ { "adc1", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_ap_adc_t, adc1) }, \
{ "adc2", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_ap_adc_t, adc2) }, \
{ "adc3", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_ap_adc_t, adc3) }, \
{ "adc4", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_ap_adc_t, adc4) }, \
{ "adc5", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_ap_adc_t, adc5) }, \
{ "adc6", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_ap_adc_t, adc6) }, \
} \
}
 
 
/**
* @brief Pack a ap_adc message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ap_adc_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t adc1, uint16_t adc2, uint16_t adc3, uint16_t adc4, uint16_t adc5, uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AP_ADC;
return mavlink_finalize_message(msg, system_id, component_id, 12);
}
 
/**
* @brief Pack a ap_adc message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ap_adc_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t adc1,uint16_t adc2,uint16_t adc3,uint16_t adc4,uint16_t adc5,uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AP_ADC;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12);
}
 
/**
* @brief Encode a ap_adc struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ap_adc C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ap_adc_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ap_adc_t* ap_adc)
{
return mavlink_msg_ap_adc_pack(system_id, component_id, msg, ap_adc->adc1, ap_adc->adc2, ap_adc->adc3, ap_adc->adc4, ap_adc->adc5, ap_adc->adc6);
}
 
/**
* @brief Send a ap_adc message
* @param chan MAVLink channel to send the message
*
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ap_adc_send(mavlink_channel_t chan, uint16_t adc1, uint16_t adc2, uint16_t adc3, uint16_t adc4, uint16_t adc5, uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AP_ADC, buf, 12);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AP_ADC, (const char *)&packet, 12);
#endif
}
 
#endif
 
// MESSAGE AP_ADC UNPACKING
 
 
/**
* @brief Get field adc1 from ap_adc message
*
* @return ADC output 1
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc1(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field adc2 from ap_adc message
*
* @return ADC output 2
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc2(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field adc3 from ap_adc message
*
* @return ADC output 3
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc3(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field adc4 from ap_adc message
*
* @return ADC output 4
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc4(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field adc5 from ap_adc message
*
* @return ADC output 5
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc5(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field adc6 from ap_adc message
*
* @return ADC output 6
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc6(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Decode a ap_adc message into a struct
*
* @param msg The message to decode
* @param ap_adc C-struct to decode the message contents into
*/
static inline void mavlink_msg_ap_adc_decode(const mavlink_message_t* msg, mavlink_ap_adc_t* ap_adc)
{
#if MAVLINK_NEED_BYTE_SWAP
ap_adc->adc1 = mavlink_msg_ap_adc_get_adc1(msg);
ap_adc->adc2 = mavlink_msg_ap_adc_get_adc2(msg);
ap_adc->adc3 = mavlink_msg_ap_adc_get_adc3(msg);
ap_adc->adc4 = mavlink_msg_ap_adc_get_adc4(msg);
ap_adc->adc5 = mavlink_msg_ap_adc_get_adc5(msg);
ap_adc->adc6 = mavlink_msg_ap_adc_get_adc6(msg);
#else
memcpy(ap_adc, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_digicam_configure.h
0,0 → 1,364
// MESSAGE DIGICAM_CONFIGURE PACKING
 
#define MAVLINK_MSG_ID_DIGICAM_CONFIGURE 154
 
typedef struct __mavlink_digicam_configure_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t mode; ///< Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
uint16_t shutter_speed; ///< Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
uint8_t aperture; ///< F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
uint8_t iso; ///< ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
uint8_t exposure_type; ///< Exposure type enumeration from 1 to N (0 means ignore)
uint8_t command_id; ///< Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
uint8_t engine_cut_off; ///< Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
uint8_t extra_param; ///< Extra parameters enumeration (0 means ignore)
float extra_value; ///< Correspondent value to given extra_param
} mavlink_digicam_configure_t;
 
#define MAVLINK_MSG_ID_DIGICAM_CONFIGURE_LEN 15
#define MAVLINK_MSG_ID_154_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_DIGICAM_CONFIGURE { \
"DIGICAM_CONFIGURE", \
11, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_digicam_configure_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_digicam_configure_t, target_component) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_digicam_configure_t, mode) }, \
{ "shutter_speed", NULL, MAVLINK_TYPE_UINT16_T, 0, 3, offsetof(mavlink_digicam_configure_t, shutter_speed) }, \
{ "aperture", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_digicam_configure_t, aperture) }, \
{ "iso", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_digicam_configure_t, iso) }, \
{ "exposure_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_digicam_configure_t, exposure_type) }, \
{ "command_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_digicam_configure_t, command_id) }, \
{ "engine_cut_off", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_digicam_configure_t, engine_cut_off) }, \
{ "extra_param", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_digicam_configure_t, extra_param) }, \
{ "extra_value", NULL, MAVLINK_TYPE_FLOAT, 0, 11, offsetof(mavlink_digicam_configure_t, extra_value) }, \
} \
}
 
 
/**
* @brief Pack a digicam_configure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_configure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t mode, uint16_t shutter_speed, uint8_t aperture, uint8_t iso, uint8_t exposure_type, uint8_t command_id, uint8_t engine_cut_off, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mode);
_mav_put_uint16_t(buf, 3, shutter_speed);
_mav_put_uint8_t(buf, 5, aperture);
_mav_put_uint8_t(buf, 6, iso);
_mav_put_uint8_t(buf, 7, exposure_type);
_mav_put_uint8_t(buf, 8, command_id);
_mav_put_uint8_t(buf, 9, engine_cut_off);
_mav_put_uint8_t(buf, 10, extra_param);
_mav_put_float(buf, 11, extra_value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_digicam_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.shutter_speed = shutter_speed;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONFIGURE;
return mavlink_finalize_message(msg, system_id, component_id, 15);
}
 
/**
* @brief Pack a digicam_configure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_configure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t mode,uint16_t shutter_speed,uint8_t aperture,uint8_t iso,uint8_t exposure_type,uint8_t command_id,uint8_t engine_cut_off,uint8_t extra_param,float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mode);
_mav_put_uint16_t(buf, 3, shutter_speed);
_mav_put_uint8_t(buf, 5, aperture);
_mav_put_uint8_t(buf, 6, iso);
_mav_put_uint8_t(buf, 7, exposure_type);
_mav_put_uint8_t(buf, 8, command_id);
_mav_put_uint8_t(buf, 9, engine_cut_off);
_mav_put_uint8_t(buf, 10, extra_param);
_mav_put_float(buf, 11, extra_value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_digicam_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.shutter_speed = shutter_speed;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONFIGURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15);
}
 
/**
* @brief Encode a digicam_configure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param digicam_configure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_digicam_configure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_digicam_configure_t* digicam_configure)
{
return mavlink_msg_digicam_configure_pack(system_id, component_id, msg, digicam_configure->target_system, digicam_configure->target_component, digicam_configure->mode, digicam_configure->shutter_speed, digicam_configure->aperture, digicam_configure->iso, digicam_configure->exposure_type, digicam_configure->command_id, digicam_configure->engine_cut_off, digicam_configure->extra_param, digicam_configure->extra_value);
}
 
/**
* @brief Send a digicam_configure message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_digicam_configure_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t mode, uint16_t shutter_speed, uint8_t aperture, uint8_t iso, uint8_t exposure_type, uint8_t command_id, uint8_t engine_cut_off, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mode);
_mav_put_uint16_t(buf, 3, shutter_speed);
_mav_put_uint8_t(buf, 5, aperture);
_mav_put_uint8_t(buf, 6, iso);
_mav_put_uint8_t(buf, 7, exposure_type);
_mav_put_uint8_t(buf, 8, command_id);
_mav_put_uint8_t(buf, 9, engine_cut_off);
_mav_put_uint8_t(buf, 10, extra_param);
_mav_put_float(buf, 11, extra_value);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONFIGURE, buf, 15);
#else
mavlink_digicam_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.shutter_speed = shutter_speed;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONFIGURE, (const char *)&packet, 15);
#endif
}
 
#endif
 
// MESSAGE DIGICAM_CONFIGURE UNPACKING
 
 
/**
* @brief Get field target_system from digicam_configure message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_digicam_configure_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from digicam_configure message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_digicam_configure_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mode from digicam_configure message
*
* @return Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field shutter_speed from digicam_configure message
*
* @return Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
*/
static inline uint16_t mavlink_msg_digicam_configure_get_shutter_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 3);
}
 
/**
* @brief Get field aperture from digicam_configure message
*
* @return F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_aperture(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field iso from digicam_configure message
*
* @return ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_iso(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field exposure_type from digicam_configure message
*
* @return Exposure type enumeration from 1 to N (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_exposure_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field command_id from digicam_configure message
*
* @return Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
*/
static inline uint8_t mavlink_msg_digicam_configure_get_command_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field engine_cut_off from digicam_configure message
*
* @return Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_engine_cut_off(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 9);
}
 
/**
* @brief Get field extra_param from digicam_configure message
*
* @return Extra parameters enumeration (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_extra_param(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 10);
}
 
/**
* @brief Get field extra_value from digicam_configure message
*
* @return Correspondent value to given extra_param
*/
static inline float mavlink_msg_digicam_configure_get_extra_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 11);
}
 
/**
* @brief Decode a digicam_configure message into a struct
*
* @param msg The message to decode
* @param digicam_configure C-struct to decode the message contents into
*/
static inline void mavlink_msg_digicam_configure_decode(const mavlink_message_t* msg, mavlink_digicam_configure_t* digicam_configure)
{
#if MAVLINK_NEED_BYTE_SWAP
digicam_configure->target_system = mavlink_msg_digicam_configure_get_target_system(msg);
digicam_configure->target_component = mavlink_msg_digicam_configure_get_target_component(msg);
digicam_configure->mode = mavlink_msg_digicam_configure_get_mode(msg);
digicam_configure->shutter_speed = mavlink_msg_digicam_configure_get_shutter_speed(msg);
digicam_configure->aperture = mavlink_msg_digicam_configure_get_aperture(msg);
digicam_configure->iso = mavlink_msg_digicam_configure_get_iso(msg);
digicam_configure->exposure_type = mavlink_msg_digicam_configure_get_exposure_type(msg);
digicam_configure->command_id = mavlink_msg_digicam_configure_get_command_id(msg);
digicam_configure->engine_cut_off = mavlink_msg_digicam_configure_get_engine_cut_off(msg);
digicam_configure->extra_param = mavlink_msg_digicam_configure_get_extra_param(msg);
digicam_configure->extra_value = mavlink_msg_digicam_configure_get_extra_value(msg);
#else
memcpy(digicam_configure, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_digicam_control.h
0,0 → 1,342
// MESSAGE DIGICAM_CONTROL PACKING
 
#define MAVLINK_MSG_ID_DIGICAM_CONTROL 155
 
typedef struct __mavlink_digicam_control_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t session; ///< 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
uint8_t zoom_pos; ///< 1 to N //Zoom's absolute position (0 means ignore)
int8_t zoom_step; ///< -100 to 100 //Zooming step value to offset zoom from the current position
uint8_t focus_lock; ///< 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
uint8_t shot; ///< 0: ignore, 1: shot or start filming
uint8_t command_id; ///< Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
uint8_t extra_param; ///< Extra parameters enumeration (0 means ignore)
float extra_value; ///< Correspondent value to given extra_param
} mavlink_digicam_control_t;
 
#define MAVLINK_MSG_ID_DIGICAM_CONTROL_LEN 13
#define MAVLINK_MSG_ID_155_LEN 13
 
 
 
#define MAVLINK_MESSAGE_INFO_DIGICAM_CONTROL { \
"DIGICAM_CONTROL", \
10, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_digicam_control_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_digicam_control_t, target_component) }, \
{ "session", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_digicam_control_t, session) }, \
{ "zoom_pos", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_digicam_control_t, zoom_pos) }, \
{ "zoom_step", NULL, MAVLINK_TYPE_INT8_T, 0, 4, offsetof(mavlink_digicam_control_t, zoom_step) }, \
{ "focus_lock", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_digicam_control_t, focus_lock) }, \
{ "shot", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_digicam_control_t, shot) }, \
{ "command_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_digicam_control_t, command_id) }, \
{ "extra_param", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_digicam_control_t, extra_param) }, \
{ "extra_value", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_digicam_control_t, extra_value) }, \
} \
}
 
 
/**
* @brief Pack a digicam_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t session, uint8_t zoom_pos, int8_t zoom_step, uint8_t focus_lock, uint8_t shot, uint8_t command_id, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, session);
_mav_put_uint8_t(buf, 3, zoom_pos);
_mav_put_int8_t(buf, 4, zoom_step);
_mav_put_uint8_t(buf, 5, focus_lock);
_mav_put_uint8_t(buf, 6, shot);
_mav_put_uint8_t(buf, 7, command_id);
_mav_put_uint8_t(buf, 8, extra_param);
_mav_put_float(buf, 9, extra_value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_digicam_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 13);
}
 
/**
* @brief Pack a digicam_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t session,uint8_t zoom_pos,int8_t zoom_step,uint8_t focus_lock,uint8_t shot,uint8_t command_id,uint8_t extra_param,float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, session);
_mav_put_uint8_t(buf, 3, zoom_pos);
_mav_put_int8_t(buf, 4, zoom_step);
_mav_put_uint8_t(buf, 5, focus_lock);
_mav_put_uint8_t(buf, 6, shot);
_mav_put_uint8_t(buf, 7, command_id);
_mav_put_uint8_t(buf, 8, extra_param);
_mav_put_float(buf, 9, extra_value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_digicam_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 13);
}
 
/**
* @brief Encode a digicam_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param digicam_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_digicam_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_digicam_control_t* digicam_control)
{
return mavlink_msg_digicam_control_pack(system_id, component_id, msg, digicam_control->target_system, digicam_control->target_component, digicam_control->session, digicam_control->zoom_pos, digicam_control->zoom_step, digicam_control->focus_lock, digicam_control->shot, digicam_control->command_id, digicam_control->extra_param, digicam_control->extra_value);
}
 
/**
* @brief Send a digicam_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_digicam_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t session, uint8_t zoom_pos, int8_t zoom_step, uint8_t focus_lock, uint8_t shot, uint8_t command_id, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, session);
_mav_put_uint8_t(buf, 3, zoom_pos);
_mav_put_int8_t(buf, 4, zoom_step);
_mav_put_uint8_t(buf, 5, focus_lock);
_mav_put_uint8_t(buf, 6, shot);
_mav_put_uint8_t(buf, 7, command_id);
_mav_put_uint8_t(buf, 8, extra_param);
_mav_put_float(buf, 9, extra_value);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONTROL, buf, 13);
#else
mavlink_digicam_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
packet.extra_value = extra_value;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONTROL, (const char *)&packet, 13);
#endif
}
 
#endif
 
// MESSAGE DIGICAM_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from digicam_control message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_digicam_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from digicam_control message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_digicam_control_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field session from digicam_control message
*
* @return 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
*/
static inline uint8_t mavlink_msg_digicam_control_get_session(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field zoom_pos from digicam_control message
*
* @return 1 to N //Zoom's absolute position (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_control_get_zoom_pos(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field zoom_step from digicam_control message
*
* @return -100 to 100 //Zooming step value to offset zoom from the current position
*/
static inline int8_t mavlink_msg_digicam_control_get_zoom_step(const mavlink_message_t* msg)
{
return _MAV_RETURN_int8_t(msg, 4);
}
 
/**
* @brief Get field focus_lock from digicam_control message
*
* @return 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
*/
static inline uint8_t mavlink_msg_digicam_control_get_focus_lock(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field shot from digicam_control message
*
* @return 0: ignore, 1: shot or start filming
*/
static inline uint8_t mavlink_msg_digicam_control_get_shot(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field command_id from digicam_control message
*
* @return Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
*/
static inline uint8_t mavlink_msg_digicam_control_get_command_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field extra_param from digicam_control message
*
* @return Extra parameters enumeration (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_control_get_extra_param(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field extra_value from digicam_control message
*
* @return Correspondent value to given extra_param
*/
static inline float mavlink_msg_digicam_control_get_extra_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 9);
}
 
/**
* @brief Decode a digicam_control message into a struct
*
* @param msg The message to decode
* @param digicam_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_digicam_control_decode(const mavlink_message_t* msg, mavlink_digicam_control_t* digicam_control)
{
#if MAVLINK_NEED_BYTE_SWAP
digicam_control->target_system = mavlink_msg_digicam_control_get_target_system(msg);
digicam_control->target_component = mavlink_msg_digicam_control_get_target_component(msg);
digicam_control->session = mavlink_msg_digicam_control_get_session(msg);
digicam_control->zoom_pos = mavlink_msg_digicam_control_get_zoom_pos(msg);
digicam_control->zoom_step = mavlink_msg_digicam_control_get_zoom_step(msg);
digicam_control->focus_lock = mavlink_msg_digicam_control_get_focus_lock(msg);
digicam_control->shot = mavlink_msg_digicam_control_get_shot(msg);
digicam_control->command_id = mavlink_msg_digicam_control_get_command_id(msg);
digicam_control->extra_param = mavlink_msg_digicam_control_get_extra_param(msg);
digicam_control->extra_value = mavlink_msg_digicam_control_get_extra_value(msg);
#else
memcpy(digicam_control, _MAV_PAYLOAD(msg), 13);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_fence_fetch_point.h
0,0 → 1,188
// MESSAGE FENCE_FETCH_POINT PACKING
 
#define MAVLINK_MSG_ID_FENCE_FETCH_POINT 161
 
typedef struct __mavlink_fence_fetch_point_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t idx; ///< point index (first point is 1, 0 is for return point)
} mavlink_fence_fetch_point_t;
 
#define MAVLINK_MSG_ID_FENCE_FETCH_POINT_LEN 3
#define MAVLINK_MSG_ID_161_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_FETCH_POINT { \
"FENCE_FETCH_POINT", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_fence_fetch_point_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_fence_fetch_point_t, target_component) }, \
{ "idx", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_fence_fetch_point_t, idx) }, \
} \
}
 
 
/**
* @brief Pack a fence_fetch_point message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_fetch_point_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_FETCH_POINT;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a fence_fetch_point message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_fetch_point_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_FETCH_POINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a fence_fetch_point struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_fetch_point C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_fetch_point_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_fetch_point_t* fence_fetch_point)
{
return mavlink_msg_fence_fetch_point_pack(system_id, component_id, msg, fence_fetch_point->target_system, fence_fetch_point->target_component, fence_fetch_point->idx);
}
 
/**
* @brief Send a fence_fetch_point message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_fetch_point_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_FETCH_POINT, buf, 3);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_FETCH_POINT, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE FENCE_FETCH_POINT UNPACKING
 
 
/**
* @brief Get field target_system from fence_fetch_point message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from fence_fetch_point message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field idx from fence_fetch_point message
*
* @return point index (first point is 1, 0 is for return point)
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_idx(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a fence_fetch_point message into a struct
*
* @param msg The message to decode
* @param fence_fetch_point C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_fetch_point_decode(const mavlink_message_t* msg, mavlink_fence_fetch_point_t* fence_fetch_point)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_fetch_point->target_system = mavlink_msg_fence_fetch_point_get_target_system(msg);
fence_fetch_point->target_component = mavlink_msg_fence_fetch_point_get_target_component(msg);
fence_fetch_point->idx = mavlink_msg_fence_fetch_point_get_idx(msg);
#else
memcpy(fence_fetch_point, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_fence_point.h
0,0 → 1,254
// MESSAGE FENCE_POINT PACKING
 
#define MAVLINK_MSG_ID_FENCE_POINT 160
 
typedef struct __mavlink_fence_point_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t idx; ///< point index (first point is 1, 0 is for return point)
uint8_t count; ///< total number of points (for sanity checking)
float lat; ///< Latitude of point
float lng; ///< Longitude of point
} mavlink_fence_point_t;
 
#define MAVLINK_MSG_ID_FENCE_POINT_LEN 12
#define MAVLINK_MSG_ID_160_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_POINT { \
"FENCE_POINT", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_fence_point_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_fence_point_t, target_component) }, \
{ "idx", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_fence_point_t, idx) }, \
{ "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_fence_point_t, count) }, \
{ "lat", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_fence_point_t, lat) }, \
{ "lng", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_fence_point_t, lng) }, \
} \
}
 
 
/**
* @brief Pack a fence_point message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_point_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t idx, uint8_t count, float lat, float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
_mav_put_uint8_t(buf, 3, count);
_mav_put_float(buf, 4, lat);
_mav_put_float(buf, 8, lng);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_fence_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
packet.lat = lat;
packet.lng = lng;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_POINT;
return mavlink_finalize_message(msg, system_id, component_id, 12);
}
 
/**
* @brief Pack a fence_point message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_point_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t idx,uint8_t count,float lat,float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
_mav_put_uint8_t(buf, 3, count);
_mav_put_float(buf, 4, lat);
_mav_put_float(buf, 8, lng);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_fence_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
packet.lat = lat;
packet.lng = lng;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_POINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12);
}
 
/**
* @brief Encode a fence_point struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_point C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_point_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_point_t* fence_point)
{
return mavlink_msg_fence_point_pack(system_id, component_id, msg, fence_point->target_system, fence_point->target_component, fence_point->idx, fence_point->count, fence_point->lat, fence_point->lng);
}
 
/**
* @brief Send a fence_point message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_point_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t idx, uint8_t count, float lat, float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
_mav_put_uint8_t(buf, 3, count);
_mav_put_float(buf, 4, lat);
_mav_put_float(buf, 8, lng);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_POINT, buf, 12);
#else
mavlink_fence_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
packet.lat = lat;
packet.lng = lng;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_POINT, (const char *)&packet, 12);
#endif
}
 
#endif
 
// MESSAGE FENCE_POINT UNPACKING
 
 
/**
* @brief Get field target_system from fence_point message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_fence_point_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from fence_point message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_fence_point_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field idx from fence_point message
*
* @return point index (first point is 1, 0 is for return point)
*/
static inline uint8_t mavlink_msg_fence_point_get_idx(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field count from fence_point message
*
* @return total number of points (for sanity checking)
*/
static inline uint8_t mavlink_msg_fence_point_get_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field lat from fence_point message
*
* @return Latitude of point
*/
static inline float mavlink_msg_fence_point_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field lng from fence_point message
*
* @return Longitude of point
*/
static inline float mavlink_msg_fence_point_get_lng(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Decode a fence_point message into a struct
*
* @param msg The message to decode
* @param fence_point C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_point_decode(const mavlink_message_t* msg, mavlink_fence_point_t* fence_point)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_point->target_system = mavlink_msg_fence_point_get_target_system(msg);
fence_point->target_component = mavlink_msg_fence_point_get_target_component(msg);
fence_point->idx = mavlink_msg_fence_point_get_idx(msg);
fence_point->count = mavlink_msg_fence_point_get_count(msg);
fence_point->lat = mavlink_msg_fence_point_get_lat(msg);
fence_point->lng = mavlink_msg_fence_point_get_lng(msg);
#else
memcpy(fence_point, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_fence_status.h
0,0 → 1,210
// MESSAGE FENCE_STATUS PACKING
 
#define MAVLINK_MSG_ID_FENCE_STATUS 162
 
typedef struct __mavlink_fence_status_t
{
uint8_t breach_status; ///< 0 if currently inside fence, 1 if outside
uint16_t breach_count; ///< number of fence breaches
uint8_t breach_type; ///< last breach type (see FENCE_BREACH_* enum)
uint32_t breach_time; ///< time of last breach in milliseconds since boot
} mavlink_fence_status_t;
 
#define MAVLINK_MSG_ID_FENCE_STATUS_LEN 8
#define MAVLINK_MSG_ID_162_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_STATUS { \
"FENCE_STATUS", \
4, \
{ { "breach_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_fence_status_t, breach_status) }, \
{ "breach_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 1, offsetof(mavlink_fence_status_t, breach_count) }, \
{ "breach_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_fence_status_t, breach_type) }, \
{ "breach_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_fence_status_t, breach_time) }, \
} \
}
 
 
/**
* @brief Pack a fence_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, breach_status);
_mav_put_uint16_t(buf, 1, breach_count);
_mav_put_uint8_t(buf, 3, breach_type);
_mav_put_uint32_t(buf, 4, breach_time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_fence_status_t packet;
packet.breach_status = breach_status;
packet.breach_count = breach_count;
packet.breach_type = breach_type;
packet.breach_time = breach_time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a fence_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t breach_status,uint16_t breach_count,uint8_t breach_type,uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, breach_status);
_mav_put_uint16_t(buf, 1, breach_count);
_mav_put_uint8_t(buf, 3, breach_type);
_mav_put_uint32_t(buf, 4, breach_time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_fence_status_t packet;
packet.breach_status = breach_status;
packet.breach_count = breach_count;
packet.breach_type = breach_type;
packet.breach_time = breach_time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a fence_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_status_t* fence_status)
{
return mavlink_msg_fence_status_pack(system_id, component_id, msg, fence_status->breach_status, fence_status->breach_count, fence_status->breach_type, fence_status->breach_time);
}
 
/**
* @brief Send a fence_status message
* @param chan MAVLink channel to send the message
*
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_status_send(mavlink_channel_t chan, uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, breach_status);
_mav_put_uint16_t(buf, 1, breach_count);
_mav_put_uint8_t(buf, 3, breach_type);
_mav_put_uint32_t(buf, 4, breach_time);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, buf, 8);
#else
mavlink_fence_status_t packet;
packet.breach_status = breach_status;
packet.breach_count = breach_count;
packet.breach_type = breach_type;
packet.breach_time = breach_time;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE FENCE_STATUS UNPACKING
 
 
/**
* @brief Get field breach_status from fence_status message
*
* @return 0 if currently inside fence, 1 if outside
*/
static inline uint8_t mavlink_msg_fence_status_get_breach_status(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field breach_count from fence_status message
*
* @return number of fence breaches
*/
static inline uint16_t mavlink_msg_fence_status_get_breach_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 1);
}
 
/**
* @brief Get field breach_type from fence_status message
*
* @return last breach type (see FENCE_BREACH_* enum)
*/
static inline uint8_t mavlink_msg_fence_status_get_breach_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field breach_time from fence_status message
*
* @return time of last breach in milliseconds since boot
*/
static inline uint32_t mavlink_msg_fence_status_get_breach_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 4);
}
 
/**
* @brief Decode a fence_status message into a struct
*
* @param msg The message to decode
* @param fence_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_status_decode(const mavlink_message_t* msg, mavlink_fence_status_t* fence_status)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_status->breach_status = mavlink_msg_fence_status_get_breach_status(msg);
fence_status->breach_count = mavlink_msg_fence_status_get_breach_count(msg);
fence_status->breach_type = mavlink_msg_fence_status_get_breach_type(msg);
fence_status->breach_time = mavlink_msg_fence_status_get_breach_time(msg);
#else
memcpy(fence_status, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_hwstatus.h
0,0 → 1,166
// MESSAGE HWSTATUS PACKING
 
#define MAVLINK_MSG_ID_HWSTATUS 165
 
typedef struct __mavlink_hwstatus_t
{
uint16_t Vcc; ///< board voltage (mV)
uint8_t I2Cerr; ///< I2C error count
} mavlink_hwstatus_t;
 
#define MAVLINK_MSG_ID_HWSTATUS_LEN 3
#define MAVLINK_MSG_ID_165_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_HWSTATUS { \
"HWSTATUS", \
2, \
{ { "Vcc", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_hwstatus_t, Vcc) }, \
{ "I2Cerr", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_hwstatus_t, I2Cerr) }, \
} \
}
 
 
/**
* @brief Pack a hwstatus message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hwstatus_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t Vcc, uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HWSTATUS;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a hwstatus message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hwstatus_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t Vcc,uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HWSTATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a hwstatus struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hwstatus C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hwstatus_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hwstatus_t* hwstatus)
{
return mavlink_msg_hwstatus_pack(system_id, component_id, msg, hwstatus->Vcc, hwstatus->I2Cerr);
}
 
/**
* @brief Send a hwstatus message
* @param chan MAVLink channel to send the message
*
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hwstatus_send(mavlink_channel_t chan, uint16_t Vcc, uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HWSTATUS, buf, 3);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HWSTATUS, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE HWSTATUS UNPACKING
 
 
/**
* @brief Get field Vcc from hwstatus message
*
* @return board voltage (mV)
*/
static inline uint16_t mavlink_msg_hwstatus_get_Vcc(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field I2Cerr from hwstatus message
*
* @return I2C error count
*/
static inline uint8_t mavlink_msg_hwstatus_get_I2Cerr(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a hwstatus message into a struct
*
* @param msg The message to decode
* @param hwstatus C-struct to decode the message contents into
*/
static inline void mavlink_msg_hwstatus_decode(const mavlink_message_t* msg, mavlink_hwstatus_t* hwstatus)
{
#if MAVLINK_NEED_BYTE_SWAP
hwstatus->Vcc = mavlink_msg_hwstatus_get_Vcc(msg);
hwstatus->I2Cerr = mavlink_msg_hwstatus_get_I2Cerr(msg);
#else
memcpy(hwstatus, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_meminfo.h
0,0 → 1,166
// MESSAGE MEMINFO PACKING
 
#define MAVLINK_MSG_ID_MEMINFO 152
 
typedef struct __mavlink_meminfo_t
{
uint16_t brkval; ///< heap top
uint16_t freemem; ///< free memory
} mavlink_meminfo_t;
 
#define MAVLINK_MSG_ID_MEMINFO_LEN 4
#define MAVLINK_MSG_ID_152_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_MEMINFO { \
"MEMINFO", \
2, \
{ { "brkval", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_meminfo_t, brkval) }, \
{ "freemem", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_meminfo_t, freemem) }, \
} \
}
 
 
/**
* @brief Pack a meminfo message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param brkval heap top
* @param freemem free memory
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_meminfo_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t brkval, uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMINFO;
return mavlink_finalize_message(msg, system_id, component_id, 4);
}
 
/**
* @brief Pack a meminfo message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param brkval heap top
* @param freemem free memory
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_meminfo_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t brkval,uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMINFO;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4);
}
 
/**
* @brief Encode a meminfo struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param meminfo C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_meminfo_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_meminfo_t* meminfo)
{
return mavlink_msg_meminfo_pack(system_id, component_id, msg, meminfo->brkval, meminfo->freemem);
}
 
/**
* @brief Send a meminfo message
* @param chan MAVLink channel to send the message
*
* @param brkval heap top
* @param freemem free memory
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_meminfo_send(mavlink_channel_t chan, uint16_t brkval, uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMINFO, buf, 4);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMINFO, (const char *)&packet, 4);
#endif
}
 
#endif
 
// MESSAGE MEMINFO UNPACKING
 
 
/**
* @brief Get field brkval from meminfo message
*
* @return heap top
*/
static inline uint16_t mavlink_msg_meminfo_get_brkval(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field freemem from meminfo message
*
* @return free memory
*/
static inline uint16_t mavlink_msg_meminfo_get_freemem(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a meminfo message into a struct
*
* @param msg The message to decode
* @param meminfo C-struct to decode the message contents into
*/
static inline void mavlink_msg_meminfo_decode(const mavlink_message_t* msg, mavlink_meminfo_t* meminfo)
{
#if MAVLINK_NEED_BYTE_SWAP
meminfo->brkval = mavlink_msg_meminfo_get_brkval(msg);
meminfo->freemem = mavlink_msg_meminfo_get_freemem(msg);
#else
memcpy(meminfo, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_mount_configure.h
0,0 → 1,254
// MESSAGE MOUNT_CONFIGURE PACKING
 
#define MAVLINK_MSG_ID_MOUNT_CONFIGURE 156
 
typedef struct __mavlink_mount_configure_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t mount_mode; ///< mount operating mode (see MAV_MOUNT_MODE enum)
uint8_t stab_roll; ///< (1 = yes, 0 = no)
uint8_t stab_pitch; ///< (1 = yes, 0 = no)
uint8_t stab_yaw; ///< (1 = yes, 0 = no)
} mavlink_mount_configure_t;
 
#define MAVLINK_MSG_ID_MOUNT_CONFIGURE_LEN 6
#define MAVLINK_MSG_ID_156_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_CONFIGURE { \
"MOUNT_CONFIGURE", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mount_configure_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mount_configure_t, target_component) }, \
{ "mount_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mount_configure_t, mount_mode) }, \
{ "stab_roll", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_mount_configure_t, stab_roll) }, \
{ "stab_pitch", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_mount_configure_t, stab_pitch) }, \
{ "stab_yaw", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_mount_configure_t, stab_yaw) }, \
} \
}
 
 
/**
* @brief Pack a mount_configure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_configure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t mount_mode, uint8_t stab_roll, uint8_t stab_pitch, uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONFIGURE;
return mavlink_finalize_message(msg, system_id, component_id, 6);
}
 
/**
* @brief Pack a mount_configure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_configure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t mount_mode,uint8_t stab_roll,uint8_t stab_pitch,uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONFIGURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6);
}
 
/**
* @brief Encode a mount_configure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_configure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_configure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_configure_t* mount_configure)
{
return mavlink_msg_mount_configure_pack(system_id, component_id, msg, mount_configure->target_system, mount_configure->target_component, mount_configure->mount_mode, mount_configure->stab_roll, mount_configure->stab_pitch, mount_configure->stab_yaw);
}
 
/**
* @brief Send a mount_configure message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_configure_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t mount_mode, uint8_t stab_roll, uint8_t stab_pitch, uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONFIGURE, buf, 6);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONFIGURE, (const char *)&packet, 6);
#endif
}
 
#endif
 
// MESSAGE MOUNT_CONFIGURE UNPACKING
 
 
/**
* @brief Get field target_system from mount_configure message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_configure_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mount_configure message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_configure_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mount_mode from mount_configure message
*
* @return mount operating mode (see MAV_MOUNT_MODE enum)
*/
static inline uint8_t mavlink_msg_mount_configure_get_mount_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field stab_roll from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field stab_pitch from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field stab_yaw from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Decode a mount_configure message into a struct
*
* @param msg The message to decode
* @param mount_configure C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_configure_decode(const mavlink_message_t* msg, mavlink_mount_configure_t* mount_configure)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_configure->target_system = mavlink_msg_mount_configure_get_target_system(msg);
mount_configure->target_component = mavlink_msg_mount_configure_get_target_component(msg);
mount_configure->mount_mode = mavlink_msg_mount_configure_get_mount_mode(msg);
mount_configure->stab_roll = mavlink_msg_mount_configure_get_stab_roll(msg);
mount_configure->stab_pitch = mavlink_msg_mount_configure_get_stab_pitch(msg);
mount_configure->stab_yaw = mavlink_msg_mount_configure_get_stab_yaw(msg);
#else
memcpy(mount_configure, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_mount_control.h
0,0 → 1,254
// MESSAGE MOUNT_CONTROL PACKING
 
#define MAVLINK_MSG_ID_MOUNT_CONTROL 157
 
typedef struct __mavlink_mount_control_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int32_t input_a; ///< pitch(deg*100) or lat, depending on mount mode
int32_t input_b; ///< roll(deg*100) or lon depending on mount mode
int32_t input_c; ///< yaw(deg*100) or alt (in cm) depending on mount mode
uint8_t save_position; ///< if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
} mavlink_mount_control_t;
 
#define MAVLINK_MSG_ID_MOUNT_CONTROL_LEN 15
#define MAVLINK_MSG_ID_157_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_CONTROL { \
"MOUNT_CONTROL", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mount_control_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mount_control_t, target_component) }, \
{ "input_a", NULL, MAVLINK_TYPE_INT32_T, 0, 2, offsetof(mavlink_mount_control_t, input_a) }, \
{ "input_b", NULL, MAVLINK_TYPE_INT32_T, 0, 6, offsetof(mavlink_mount_control_t, input_b) }, \
{ "input_c", NULL, MAVLINK_TYPE_INT32_T, 0, 10, offsetof(mavlink_mount_control_t, input_c) }, \
{ "save_position", NULL, MAVLINK_TYPE_UINT8_T, 0, 14, offsetof(mavlink_mount_control_t, save_position) }, \
} \
}
 
 
/**
* @brief Pack a mount_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int32_t input_a, int32_t input_b, int32_t input_c, uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, input_a);
_mav_put_int32_t(buf, 6, input_b);
_mav_put_int32_t(buf, 10, input_c);
_mav_put_uint8_t(buf, 14, save_position);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_mount_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.save_position = save_position;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 15);
}
 
/**
* @brief Pack a mount_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int32_t input_a,int32_t input_b,int32_t input_c,uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, input_a);
_mav_put_int32_t(buf, 6, input_b);
_mav_put_int32_t(buf, 10, input_c);
_mav_put_uint8_t(buf, 14, save_position);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_mount_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.save_position = save_position;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15);
}
 
/**
* @brief Encode a mount_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_control_t* mount_control)
{
return mavlink_msg_mount_control_pack(system_id, component_id, msg, mount_control->target_system, mount_control->target_component, mount_control->input_a, mount_control->input_b, mount_control->input_c, mount_control->save_position);
}
 
/**
* @brief Send a mount_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int32_t input_a, int32_t input_b, int32_t input_c, uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, input_a);
_mav_put_int32_t(buf, 6, input_b);
_mav_put_int32_t(buf, 10, input_c);
_mav_put_uint8_t(buf, 14, save_position);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONTROL, buf, 15);
#else
mavlink_mount_control_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.save_position = save_position;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONTROL, (const char *)&packet, 15);
#endif
}
 
#endif
 
// MESSAGE MOUNT_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from mount_control message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mount_control message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_control_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field input_a from mount_control message
*
* @return pitch(deg*100) or lat, depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_a(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 2);
}
 
/**
* @brief Get field input_b from mount_control message
*
* @return roll(deg*100) or lon depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_b(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 6);
}
 
/**
* @brief Get field input_c from mount_control message
*
* @return yaw(deg*100) or alt (in cm) depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_c(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 10);
}
 
/**
* @brief Get field save_position from mount_control message
*
* @return if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
*/
static inline uint8_t mavlink_msg_mount_control_get_save_position(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 14);
}
 
/**
* @brief Decode a mount_control message into a struct
*
* @param msg The message to decode
* @param mount_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_control_decode(const mavlink_message_t* msg, mavlink_mount_control_t* mount_control)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_control->target_system = mavlink_msg_mount_control_get_target_system(msg);
mount_control->target_component = mavlink_msg_mount_control_get_target_component(msg);
mount_control->input_a = mavlink_msg_mount_control_get_input_a(msg);
mount_control->input_b = mavlink_msg_mount_control_get_input_b(msg);
mount_control->input_c = mavlink_msg_mount_control_get_input_c(msg);
mount_control->save_position = mavlink_msg_mount_control_get_save_position(msg);
#else
memcpy(mount_control, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_mount_status.h
0,0 → 1,232
// MESSAGE MOUNT_STATUS PACKING
 
#define MAVLINK_MSG_ID_MOUNT_STATUS 158
 
typedef struct __mavlink_mount_status_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int32_t pointing_a; ///< pitch(deg*100) or lat, depending on mount mode
int32_t pointing_b; ///< roll(deg*100) or lon depending on mount mode
int32_t pointing_c; ///< yaw(deg*100) or alt (in cm) depending on mount mode
} mavlink_mount_status_t;
 
#define MAVLINK_MSG_ID_MOUNT_STATUS_LEN 14
#define MAVLINK_MSG_ID_158_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_STATUS { \
"MOUNT_STATUS", \
5, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mount_status_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mount_status_t, target_component) }, \
{ "pointing_a", NULL, MAVLINK_TYPE_INT32_T, 0, 2, offsetof(mavlink_mount_status_t, pointing_a) }, \
{ "pointing_b", NULL, MAVLINK_TYPE_INT32_T, 0, 6, offsetof(mavlink_mount_status_t, pointing_b) }, \
{ "pointing_c", NULL, MAVLINK_TYPE_INT32_T, 0, 10, offsetof(mavlink_mount_status_t, pointing_c) }, \
} \
}
 
 
/**
* @brief Pack a mount_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int32_t pointing_a, int32_t pointing_b, int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, pointing_a);
_mav_put_int32_t(buf, 6, pointing_b);
_mav_put_int32_t(buf, 10, pointing_c);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_mount_status_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 14);
}
 
/**
* @brief Pack a mount_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int32_t pointing_a,int32_t pointing_b,int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, pointing_a);
_mav_put_int32_t(buf, 6, pointing_b);
_mav_put_int32_t(buf, 10, pointing_c);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_mount_status_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14);
}
 
/**
* @brief Encode a mount_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_status_t* mount_status)
{
return mavlink_msg_mount_status_pack(system_id, component_id, msg, mount_status->target_system, mount_status->target_component, mount_status->pointing_a, mount_status->pointing_b, mount_status->pointing_c);
}
 
/**
* @brief Send a mount_status message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_status_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int32_t pointing_a, int32_t pointing_b, int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, pointing_a);
_mav_put_int32_t(buf, 6, pointing_b);
_mav_put_int32_t(buf, 10, pointing_c);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_STATUS, buf, 14);
#else
mavlink_mount_status_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_STATUS, (const char *)&packet, 14);
#endif
}
 
#endif
 
// MESSAGE MOUNT_STATUS UNPACKING
 
 
/**
* @brief Get field target_system from mount_status message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_status_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mount_status message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_status_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field pointing_a from mount_status message
*
* @return pitch(deg*100) or lat, depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_a(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 2);
}
 
/**
* @brief Get field pointing_b from mount_status message
*
* @return roll(deg*100) or lon depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_b(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 6);
}
 
/**
* @brief Get field pointing_c from mount_status message
*
* @return yaw(deg*100) or alt (in cm) depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_c(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 10);
}
 
/**
* @brief Decode a mount_status message into a struct
*
* @param msg The message to decode
* @param mount_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_status_decode(const mavlink_message_t* msg, mavlink_mount_status_t* mount_status)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_status->target_system = mavlink_msg_mount_status_get_target_system(msg);
mount_status->target_component = mavlink_msg_mount_status_get_target_component(msg);
mount_status->pointing_a = mavlink_msg_mount_status_get_pointing_a(msg);
mount_status->pointing_b = mavlink_msg_mount_status_get_pointing_b(msg);
mount_status->pointing_c = mavlink_msg_mount_status_get_pointing_c(msg);
#else
memcpy(mount_status, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_radio.h
0,0 → 1,276
// MESSAGE RADIO PACKING
 
#define MAVLINK_MSG_ID_RADIO 166
 
typedef struct __mavlink_radio_t
{
uint8_t rssi; ///< local signal strength
uint8_t remrssi; ///< remote signal strength
uint8_t txbuf; ///< how full the tx buffer is as a percentage
uint8_t noise; ///< background noise level
uint8_t remnoise; ///< remote background noise level
uint16_t rxerrors; ///< receive errors
uint16_t fixed; ///< count of error corrected packets
} mavlink_radio_t;
 
#define MAVLINK_MSG_ID_RADIO_LEN 9
#define MAVLINK_MSG_ID_166_LEN 9
 
 
 
#define MAVLINK_MESSAGE_INFO_RADIO { \
"RADIO", \
7, \
{ { "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_radio_t, rssi) }, \
{ "remrssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_radio_t, remrssi) }, \
{ "txbuf", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_radio_t, txbuf) }, \
{ "noise", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_radio_t, noise) }, \
{ "remnoise", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_radio_t, remnoise) }, \
{ "rxerrors", NULL, MAVLINK_TYPE_UINT16_T, 0, 5, offsetof(mavlink_radio_t, rxerrors) }, \
{ "fixed", NULL, MAVLINK_TYPE_UINT16_T, 0, 7, offsetof(mavlink_radio_t, fixed) }, \
} \
}
 
 
/**
* @brief Pack a radio message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_radio_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t rssi, uint8_t remrssi, uint8_t txbuf, uint8_t noise, uint8_t remnoise, uint16_t rxerrors, uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint8_t(buf, 0, rssi);
_mav_put_uint8_t(buf, 1, remrssi);
_mav_put_uint8_t(buf, 2, txbuf);
_mav_put_uint8_t(buf, 3, noise);
_mav_put_uint8_t(buf, 4, remnoise);
_mav_put_uint16_t(buf, 5, rxerrors);
_mav_put_uint16_t(buf, 7, fixed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_radio_t packet;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RADIO;
return mavlink_finalize_message(msg, system_id, component_id, 9);
}
 
/**
* @brief Pack a radio message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_radio_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t rssi,uint8_t remrssi,uint8_t txbuf,uint8_t noise,uint8_t remnoise,uint16_t rxerrors,uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint8_t(buf, 0, rssi);
_mav_put_uint8_t(buf, 1, remrssi);
_mav_put_uint8_t(buf, 2, txbuf);
_mav_put_uint8_t(buf, 3, noise);
_mav_put_uint8_t(buf, 4, remnoise);
_mav_put_uint16_t(buf, 5, rxerrors);
_mav_put_uint16_t(buf, 7, fixed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_radio_t packet;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RADIO;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 9);
}
 
/**
* @brief Encode a radio struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param radio C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_radio_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_radio_t* radio)
{
return mavlink_msg_radio_pack(system_id, component_id, msg, radio->rssi, radio->remrssi, radio->txbuf, radio->noise, radio->remnoise, radio->rxerrors, radio->fixed);
}
 
/**
* @brief Send a radio message
* @param chan MAVLink channel to send the message
*
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_radio_send(mavlink_channel_t chan, uint8_t rssi, uint8_t remrssi, uint8_t txbuf, uint8_t noise, uint8_t remnoise, uint16_t rxerrors, uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint8_t(buf, 0, rssi);
_mav_put_uint8_t(buf, 1, remrssi);
_mav_put_uint8_t(buf, 2, txbuf);
_mav_put_uint8_t(buf, 3, noise);
_mav_put_uint8_t(buf, 4, remnoise);
_mav_put_uint16_t(buf, 5, rxerrors);
_mav_put_uint16_t(buf, 7, fixed);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RADIO, buf, 9);
#else
mavlink_radio_t packet;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RADIO, (const char *)&packet, 9);
#endif
}
 
#endif
 
// MESSAGE RADIO UNPACKING
 
 
/**
* @brief Get field rssi from radio message
*
* @return local signal strength
*/
static inline uint8_t mavlink_msg_radio_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field remrssi from radio message
*
* @return remote signal strength
*/
static inline uint8_t mavlink_msg_radio_get_remrssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field txbuf from radio message
*
* @return how full the tx buffer is as a percentage
*/
static inline uint8_t mavlink_msg_radio_get_txbuf(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field noise from radio message
*
* @return background noise level
*/
static inline uint8_t mavlink_msg_radio_get_noise(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field remnoise from radio message
*
* @return remote background noise level
*/
static inline uint8_t mavlink_msg_radio_get_remnoise(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field rxerrors from radio message
*
* @return receive errors
*/
static inline uint16_t mavlink_msg_radio_get_rxerrors(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 5);
}
 
/**
* @brief Get field fixed from radio message
*
* @return count of error corrected packets
*/
static inline uint16_t mavlink_msg_radio_get_fixed(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 7);
}
 
/**
* @brief Decode a radio message into a struct
*
* @param msg The message to decode
* @param radio C-struct to decode the message contents into
*/
static inline void mavlink_msg_radio_decode(const mavlink_message_t* msg, mavlink_radio_t* radio)
{
#if MAVLINK_NEED_BYTE_SWAP
radio->rssi = mavlink_msg_radio_get_rssi(msg);
radio->remrssi = mavlink_msg_radio_get_remrssi(msg);
radio->txbuf = mavlink_msg_radio_get_txbuf(msg);
radio->noise = mavlink_msg_radio_get_noise(msg);
radio->remnoise = mavlink_msg_radio_get_remnoise(msg);
radio->rxerrors = mavlink_msg_radio_get_rxerrors(msg);
radio->fixed = mavlink_msg_radio_get_fixed(msg);
#else
memcpy(radio, _MAV_PAYLOAD(msg), 9);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_sensor_offsets.h
0,0 → 1,386
// MESSAGE SENSOR_OFFSETS PACKING
 
#define MAVLINK_MSG_ID_SENSOR_OFFSETS 150
 
typedef struct __mavlink_sensor_offsets_t
{
int16_t mag_ofs_x; ///< magnetometer X offset
int16_t mag_ofs_y; ///< magnetometer Y offset
int16_t mag_ofs_z; ///< magnetometer Z offset
float mag_declination; ///< magnetic declination (radians)
int32_t raw_press; ///< raw pressure from barometer
int32_t raw_temp; ///< raw temperature from barometer
float gyro_cal_x; ///< gyro X calibration
float gyro_cal_y; ///< gyro Y calibration
float gyro_cal_z; ///< gyro Z calibration
float accel_cal_x; ///< accel X calibration
float accel_cal_y; ///< accel Y calibration
float accel_cal_z; ///< accel Z calibration
} mavlink_sensor_offsets_t;
 
#define MAVLINK_MSG_ID_SENSOR_OFFSETS_LEN 42
#define MAVLINK_MSG_ID_150_LEN 42
 
 
 
#define MAVLINK_MESSAGE_INFO_SENSOR_OFFSETS { \
"SENSOR_OFFSETS", \
12, \
{ { "mag_ofs_x", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_sensor_offsets_t, mag_ofs_x) }, \
{ "mag_ofs_y", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_sensor_offsets_t, mag_ofs_y) }, \
{ "mag_ofs_z", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_sensor_offsets_t, mag_ofs_z) }, \
{ "mag_declination", NULL, MAVLINK_TYPE_FLOAT, 0, 6, offsetof(mavlink_sensor_offsets_t, mag_declination) }, \
{ "raw_press", NULL, MAVLINK_TYPE_INT32_T, 0, 10, offsetof(mavlink_sensor_offsets_t, raw_press) }, \
{ "raw_temp", NULL, MAVLINK_TYPE_INT32_T, 0, 14, offsetof(mavlink_sensor_offsets_t, raw_temp) }, \
{ "gyro_cal_x", NULL, MAVLINK_TYPE_FLOAT, 0, 18, offsetof(mavlink_sensor_offsets_t, gyro_cal_x) }, \
{ "gyro_cal_y", NULL, MAVLINK_TYPE_FLOAT, 0, 22, offsetof(mavlink_sensor_offsets_t, gyro_cal_y) }, \
{ "gyro_cal_z", NULL, MAVLINK_TYPE_FLOAT, 0, 26, offsetof(mavlink_sensor_offsets_t, gyro_cal_z) }, \
{ "accel_cal_x", NULL, MAVLINK_TYPE_FLOAT, 0, 30, offsetof(mavlink_sensor_offsets_t, accel_cal_x) }, \
{ "accel_cal_y", NULL, MAVLINK_TYPE_FLOAT, 0, 34, offsetof(mavlink_sensor_offsets_t, accel_cal_y) }, \
{ "accel_cal_z", NULL, MAVLINK_TYPE_FLOAT, 0, 38, offsetof(mavlink_sensor_offsets_t, accel_cal_z) }, \
} \
}
 
 
/**
* @brief Pack a sensor_offsets message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sensor_offsets_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z, float mag_declination, int32_t raw_press, int32_t raw_temp, float gyro_cal_x, float gyro_cal_y, float gyro_cal_z, float accel_cal_x, float accel_cal_y, float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_float(buf, 6, mag_declination);
_mav_put_int32_t(buf, 10, raw_press);
_mav_put_int32_t(buf, 14, raw_temp);
_mav_put_float(buf, 18, gyro_cal_x);
_mav_put_float(buf, 22, gyro_cal_y);
_mav_put_float(buf, 26, gyro_cal_z);
_mav_put_float(buf, 30, accel_cal_x);
_mav_put_float(buf, 34, accel_cal_y);
_mav_put_float(buf, 38, accel_cal_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_sensor_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SENSOR_OFFSETS;
return mavlink_finalize_message(msg, system_id, component_id, 42);
}
 
/**
* @brief Pack a sensor_offsets message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sensor_offsets_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int16_t mag_ofs_x,int16_t mag_ofs_y,int16_t mag_ofs_z,float mag_declination,int32_t raw_press,int32_t raw_temp,float gyro_cal_x,float gyro_cal_y,float gyro_cal_z,float accel_cal_x,float accel_cal_y,float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_float(buf, 6, mag_declination);
_mav_put_int32_t(buf, 10, raw_press);
_mav_put_int32_t(buf, 14, raw_temp);
_mav_put_float(buf, 18, gyro_cal_x);
_mav_put_float(buf, 22, gyro_cal_y);
_mav_put_float(buf, 26, gyro_cal_z);
_mav_put_float(buf, 30, accel_cal_x);
_mav_put_float(buf, 34, accel_cal_y);
_mav_put_float(buf, 38, accel_cal_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_sensor_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SENSOR_OFFSETS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 42);
}
 
/**
* @brief Encode a sensor_offsets struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param sensor_offsets C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_sensor_offsets_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_sensor_offsets_t* sensor_offsets)
{
return mavlink_msg_sensor_offsets_pack(system_id, component_id, msg, sensor_offsets->mag_ofs_x, sensor_offsets->mag_ofs_y, sensor_offsets->mag_ofs_z, sensor_offsets->mag_declination, sensor_offsets->raw_press, sensor_offsets->raw_temp, sensor_offsets->gyro_cal_x, sensor_offsets->gyro_cal_y, sensor_offsets->gyro_cal_z, sensor_offsets->accel_cal_x, sensor_offsets->accel_cal_y, sensor_offsets->accel_cal_z);
}
 
/**
* @brief Send a sensor_offsets message
* @param chan MAVLink channel to send the message
*
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_sensor_offsets_send(mavlink_channel_t chan, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z, float mag_declination, int32_t raw_press, int32_t raw_temp, float gyro_cal_x, float gyro_cal_y, float gyro_cal_z, float accel_cal_x, float accel_cal_y, float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_float(buf, 6, mag_declination);
_mav_put_int32_t(buf, 10, raw_press);
_mav_put_int32_t(buf, 14, raw_temp);
_mav_put_float(buf, 18, gyro_cal_x);
_mav_put_float(buf, 22, gyro_cal_y);
_mav_put_float(buf, 26, gyro_cal_z);
_mav_put_float(buf, 30, accel_cal_x);
_mav_put_float(buf, 34, accel_cal_y);
_mav_put_float(buf, 38, accel_cal_z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SENSOR_OFFSETS, buf, 42);
#else
mavlink_sensor_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SENSOR_OFFSETS, (const char *)&packet, 42);
#endif
}
 
#endif
 
// MESSAGE SENSOR_OFFSETS UNPACKING
 
 
/**
* @brief Get field mag_ofs_x from sensor_offsets message
*
* @return magnetometer X offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Get field mag_ofs_y from sensor_offsets message
*
* @return magnetometer Y offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Get field mag_ofs_z from sensor_offsets message
*
* @return magnetometer Z offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Get field mag_declination from sensor_offsets message
*
* @return magnetic declination (radians)
*/
static inline float mavlink_msg_sensor_offsets_get_mag_declination(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 6);
}
 
/**
* @brief Get field raw_press from sensor_offsets message
*
* @return raw pressure from barometer
*/
static inline int32_t mavlink_msg_sensor_offsets_get_raw_press(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 10);
}
 
/**
* @brief Get field raw_temp from sensor_offsets message
*
* @return raw temperature from barometer
*/
static inline int32_t mavlink_msg_sensor_offsets_get_raw_temp(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 14);
}
 
/**
* @brief Get field gyro_cal_x from sensor_offsets message
*
* @return gyro X calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 18);
}
 
/**
* @brief Get field gyro_cal_y from sensor_offsets message
*
* @return gyro Y calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 22);
}
 
/**
* @brief Get field gyro_cal_z from sensor_offsets message
*
* @return gyro Z calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 26);
}
 
/**
* @brief Get field accel_cal_x from sensor_offsets message
*
* @return accel X calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 30);
}
 
/**
* @brief Get field accel_cal_y from sensor_offsets message
*
* @return accel Y calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 34);
}
 
/**
* @brief Get field accel_cal_z from sensor_offsets message
*
* @return accel Z calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 38);
}
 
/**
* @brief Decode a sensor_offsets message into a struct
*
* @param msg The message to decode
* @param sensor_offsets C-struct to decode the message contents into
*/
static inline void mavlink_msg_sensor_offsets_decode(const mavlink_message_t* msg, mavlink_sensor_offsets_t* sensor_offsets)
{
#if MAVLINK_NEED_BYTE_SWAP
sensor_offsets->mag_ofs_x = mavlink_msg_sensor_offsets_get_mag_ofs_x(msg);
sensor_offsets->mag_ofs_y = mavlink_msg_sensor_offsets_get_mag_ofs_y(msg);
sensor_offsets->mag_ofs_z = mavlink_msg_sensor_offsets_get_mag_ofs_z(msg);
sensor_offsets->mag_declination = mavlink_msg_sensor_offsets_get_mag_declination(msg);
sensor_offsets->raw_press = mavlink_msg_sensor_offsets_get_raw_press(msg);
sensor_offsets->raw_temp = mavlink_msg_sensor_offsets_get_raw_temp(msg);
sensor_offsets->gyro_cal_x = mavlink_msg_sensor_offsets_get_gyro_cal_x(msg);
sensor_offsets->gyro_cal_y = mavlink_msg_sensor_offsets_get_gyro_cal_y(msg);
sensor_offsets->gyro_cal_z = mavlink_msg_sensor_offsets_get_gyro_cal_z(msg);
sensor_offsets->accel_cal_x = mavlink_msg_sensor_offsets_get_accel_cal_x(msg);
sensor_offsets->accel_cal_y = mavlink_msg_sensor_offsets_get_accel_cal_y(msg);
sensor_offsets->accel_cal_z = mavlink_msg_sensor_offsets_get_accel_cal_z(msg);
#else
memcpy(sensor_offsets, _MAV_PAYLOAD(msg), 42);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_set_mag_offsets.h
0,0 → 1,232
// MESSAGE SET_MAG_OFFSETS PACKING
 
#define MAVLINK_MSG_ID_SET_MAG_OFFSETS 151
 
typedef struct __mavlink_set_mag_offsets_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int16_t mag_ofs_x; ///< magnetometer X offset
int16_t mag_ofs_y; ///< magnetometer Y offset
int16_t mag_ofs_z; ///< magnetometer Z offset
} mavlink_set_mag_offsets_t;
 
#define MAVLINK_MSG_ID_SET_MAG_OFFSETS_LEN 8
#define MAVLINK_MSG_ID_151_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_MAG_OFFSETS { \
"SET_MAG_OFFSETS", \
5, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_mag_offsets_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_set_mag_offsets_t, target_component) }, \
{ "mag_ofs_x", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_set_mag_offsets_t, mag_ofs_x) }, \
{ "mag_ofs_y", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_set_mag_offsets_t, mag_ofs_y) }, \
{ "mag_ofs_z", NULL, MAVLINK_TYPE_INT16_T, 0, 6, offsetof(mavlink_set_mag_offsets_t, mag_ofs_z) }, \
} \
}
 
 
/**
* @brief Pack a set_mag_offsets message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mag_offsets_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 2, mag_ofs_x);
_mav_put_int16_t(buf, 4, mag_ofs_y);
_mav_put_int16_t(buf, 6, mag_ofs_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_set_mag_offsets_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MAG_OFFSETS;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a set_mag_offsets message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mag_offsets_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int16_t mag_ofs_x,int16_t mag_ofs_y,int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 2, mag_ofs_x);
_mav_put_int16_t(buf, 4, mag_ofs_y);
_mav_put_int16_t(buf, 6, mag_ofs_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_set_mag_offsets_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MAG_OFFSETS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a set_mag_offsets struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_mag_offsets C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_mag_offsets_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_mag_offsets_t* set_mag_offsets)
{
return mavlink_msg_set_mag_offsets_pack(system_id, component_id, msg, set_mag_offsets->target_system, set_mag_offsets->target_component, set_mag_offsets->mag_ofs_x, set_mag_offsets->mag_ofs_y, set_mag_offsets->mag_ofs_z);
}
 
/**
* @brief Send a set_mag_offsets message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_mag_offsets_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 2, mag_ofs_x);
_mav_put_int16_t(buf, 4, mag_ofs_y);
_mav_put_int16_t(buf, 6, mag_ofs_z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MAG_OFFSETS, buf, 8);
#else
mavlink_set_mag_offsets_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MAG_OFFSETS, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE SET_MAG_OFFSETS UNPACKING
 
 
/**
* @brief Get field target_system from set_mag_offsets message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_mag_offsets_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from set_mag_offsets message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_mag_offsets_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mag_ofs_x from set_mag_offsets message
*
* @return magnetometer X offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Get field mag_ofs_y from set_mag_offsets message
*
* @return magnetometer Y offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Get field mag_ofs_z from set_mag_offsets message
*
* @return magnetometer Z offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 6);
}
 
/**
* @brief Decode a set_mag_offsets message into a struct
*
* @param msg The message to decode
* @param set_mag_offsets C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_mag_offsets_decode(const mavlink_message_t* msg, mavlink_set_mag_offsets_t* set_mag_offsets)
{
#if MAVLINK_NEED_BYTE_SWAP
set_mag_offsets->target_system = mavlink_msg_set_mag_offsets_get_target_system(msg);
set_mag_offsets->target_component = mavlink_msg_set_mag_offsets_get_target_component(msg);
set_mag_offsets->mag_ofs_x = mavlink_msg_set_mag_offsets_get_mag_ofs_x(msg);
set_mag_offsets->mag_ofs_y = mavlink_msg_set_mag_offsets_get_mag_ofs_y(msg);
set_mag_offsets->mag_ofs_z = mavlink_msg_set_mag_offsets_get_mag_ofs_z(msg);
#else
memcpy(set_mag_offsets, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/mavlink_msg_simstate.h
0,0 → 1,320
// MESSAGE SIMSTATE PACKING
 
#define MAVLINK_MSG_ID_SIMSTATE 164
 
typedef struct __mavlink_simstate_t
{
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float xacc; ///< X acceleration m/s/s
float yacc; ///< Y acceleration m/s/s
float zacc; ///< Z acceleration m/s/s
float xgyro; ///< Angular speed around X axis rad/s
float ygyro; ///< Angular speed around Y axis rad/s
float zgyro; ///< Angular speed around Z axis rad/s
} mavlink_simstate_t;
 
#define MAVLINK_MSG_ID_SIMSTATE_LEN 36
#define MAVLINK_MSG_ID_164_LEN 36
 
 
 
#define MAVLINK_MESSAGE_INFO_SIMSTATE { \
"SIMSTATE", \
9, \
{ { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_simstate_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_simstate_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_simstate_t, yaw) }, \
{ "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_simstate_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_simstate_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_simstate_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_simstate_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_simstate_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_simstate_t, zgyro) }, \
} \
}
 
 
/**
* @brief Pack a simstate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_simstate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float roll, float pitch, float yaw, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SIMSTATE;
return mavlink_finalize_message(msg, system_id, component_id, 36);
}
 
/**
* @brief Pack a simstate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_simstate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float roll,float pitch,float yaw,float xacc,float yacc,float zacc,float xgyro,float ygyro,float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SIMSTATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36);
}
 
/**
* @brief Encode a simstate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param simstate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_simstate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_simstate_t* simstate)
{
return mavlink_msg_simstate_pack(system_id, component_id, msg, simstate->roll, simstate->pitch, simstate->yaw, simstate->xacc, simstate->yacc, simstate->zacc, simstate->xgyro, simstate->ygyro, simstate->zgyro);
}
 
/**
* @brief Send a simstate message
* @param chan MAVLink channel to send the message
*
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_simstate_send(mavlink_channel_t chan, float roll, float pitch, float yaw, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SIMSTATE, buf, 36);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SIMSTATE, (const char *)&packet, 36);
#endif
}
 
#endif
 
// MESSAGE SIMSTATE UNPACKING
 
 
/**
* @brief Get field roll from simstate message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_simstate_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field pitch from simstate message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_simstate_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field yaw from simstate message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_simstate_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field xacc from simstate message
*
* @return X acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yacc from simstate message
*
* @return Y acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field zacc from simstate message
*
* @return Z acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field xgyro from simstate message
*
* @return Angular speed around X axis rad/s
*/
static inline float mavlink_msg_simstate_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field ygyro from simstate message
*
* @return Angular speed around Y axis rad/s
*/
static inline float mavlink_msg_simstate_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field zgyro from simstate message
*
* @return Angular speed around Z axis rad/s
*/
static inline float mavlink_msg_simstate_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a simstate message into a struct
*
* @param msg The message to decode
* @param simstate C-struct to decode the message contents into
*/
static inline void mavlink_msg_simstate_decode(const mavlink_message_t* msg, mavlink_simstate_t* simstate)
{
#if MAVLINK_NEED_BYTE_SWAP
simstate->roll = mavlink_msg_simstate_get_roll(msg);
simstate->pitch = mavlink_msg_simstate_get_pitch(msg);
simstate->yaw = mavlink_msg_simstate_get_yaw(msg);
simstate->xacc = mavlink_msg_simstate_get_xacc(msg);
simstate->yacc = mavlink_msg_simstate_get_yacc(msg);
simstate->zacc = mavlink_msg_simstate_get_zacc(msg);
simstate->xgyro = mavlink_msg_simstate_get_xgyro(msg);
simstate->ygyro = mavlink_msg_simstate_get_ygyro(msg);
simstate->zgyro = mavlink_msg_simstate_get_zgyro(msg);
#else
memcpy(simstate, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/testsuite.h
0,0 → 1,908
/** @file
* @brief MAVLink comm protocol testsuite generated from ardupilotmega.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef ARDUPILOTMEGA_TESTSUITE_H
#define ARDUPILOTMEGA_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
static void mavlink_test_ardupilotmega(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_common(system_id, component_id, last_msg);
mavlink_test_ardupilotmega(system_id, component_id, last_msg);
}
#endif
 
#include "../common/testsuite.h"
 
 
static void mavlink_test_sensor_offsets(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_sensor_offsets_t packet_in = {
17235,
17339,
17443,
59.0,
963497984,
963498192,
143.0,
171.0,
199.0,
227.0,
255.0,
283.0,
};
mavlink_sensor_offsets_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.mag_ofs_x = packet_in.mag_ofs_x;
packet1.mag_ofs_y = packet_in.mag_ofs_y;
packet1.mag_ofs_z = packet_in.mag_ofs_z;
packet1.mag_declination = packet_in.mag_declination;
packet1.raw_press = packet_in.raw_press;
packet1.raw_temp = packet_in.raw_temp;
packet1.gyro_cal_x = packet_in.gyro_cal_x;
packet1.gyro_cal_y = packet_in.gyro_cal_y;
packet1.gyro_cal_z = packet_in.gyro_cal_z;
packet1.accel_cal_x = packet_in.accel_cal_x;
packet1.accel_cal_y = packet_in.accel_cal_y;
packet1.accel_cal_z = packet_in.accel_cal_z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_pack(system_id, component_id, &msg , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_sensor_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_send(MAVLINK_COMM_1 , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_mag_offsets(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_mag_offsets_t packet_in = {
5,
72,
17339,
17443,
17547,
};
mavlink_set_mag_offsets_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.mag_ofs_x = packet_in.mag_ofs_x;
packet1.mag_ofs_y = packet_in.mag_ofs_y;
packet1.mag_ofs_z = packet_in.mag_ofs_z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_mag_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_meminfo(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_meminfo_t packet_in = {
17235,
17339,
};
mavlink_meminfo_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.brkval = packet_in.brkval;
packet1.freemem = packet_in.freemem;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_pack(system_id, component_id, &msg , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_meminfo_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_send(MAVLINK_COMM_1 , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ap_adc(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ap_adc_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
};
mavlink_ap_adc_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.adc1 = packet_in.adc1;
packet1.adc2 = packet_in.adc2;
packet1.adc3 = packet_in.adc3;
packet1.adc4 = packet_in.adc4;
packet1.adc5 = packet_in.adc5;
packet1.adc6 = packet_in.adc6;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_pack(system_id, component_id, &msg , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ap_adc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_send(MAVLINK_COMM_1 , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_digicam_configure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_digicam_configure_t packet_in = {
5,
72,
139,
17391,
84,
151,
218,
29,
96,
163,
94.0,
};
mavlink_digicam_configure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.mode = packet_in.mode;
packet1.shutter_speed = packet_in.shutter_speed;
packet1.aperture = packet_in.aperture;
packet1.iso = packet_in.iso;
packet1.exposure_type = packet_in.exposure_type;
packet1.command_id = packet_in.command_id;
packet1.engine_cut_off = packet_in.engine_cut_off;
packet1.extra_param = packet_in.extra_param;
packet1.extra_value = packet_in.extra_value;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_digicam_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_digicam_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_digicam_control_t packet_in = {
5,
72,
139,
206,
17,
84,
151,
218,
29,
80.0,
};
mavlink_digicam_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.session = packet_in.session;
packet1.zoom_pos = packet_in.zoom_pos;
packet1.zoom_step = packet_in.zoom_step;
packet1.focus_lock = packet_in.focus_lock;
packet1.shot = packet_in.shot;
packet1.command_id = packet_in.command_id;
packet1.extra_param = packet_in.extra_param;
packet1.extra_value = packet_in.extra_value;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_digicam_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_configure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_configure_t packet_in = {
5,
72,
139,
206,
17,
84,
};
mavlink_mount_configure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.mount_mode = packet_in.mount_mode;
packet1.stab_roll = packet_in.stab_roll;
packet1.stab_pitch = packet_in.stab_pitch;
packet1.stab_yaw = packet_in.stab_yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_control_t packet_in = {
5,
72,
963497568,
963497776,
963497984,
175,
};
mavlink_mount_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.input_a = packet_in.input_a;
packet1.input_b = packet_in.input_b;
packet1.input_c = packet_in.input_c;
packet1.save_position = packet_in.save_position;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_status_t packet_in = {
5,
72,
963497568,
963497776,
963497984,
};
mavlink_mount_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.pointing_a = packet_in.pointing_a;
packet1.pointing_b = packet_in.pointing_b;
packet1.pointing_c = packet_in.pointing_c;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_point(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_point_t packet_in = {
5,
72,
139,
206,
45.0,
73.0,
};
mavlink_fence_point_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.idx = packet_in.idx;
packet1.count = packet_in.count;
packet1.lat = packet_in.lat;
packet1.lng = packet_in.lng;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_fetch_point(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_fetch_point_t packet_in = {
5,
72,
139,
};
mavlink_fence_fetch_point_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.idx = packet_in.idx;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_fetch_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_status_t packet_in = {
5,
17287,
206,
963497672,
};
mavlink_fence_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.breach_status = packet_in.breach_status;
packet1.breach_count = packet_in.breach_count;
packet1.breach_type = packet_in.breach_type;
packet1.breach_time = packet_in.breach_time;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_pack(system_id, component_id, &msg , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_send(MAVLINK_COMM_1 , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ahrs(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ahrs_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
};
mavlink_ahrs_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.omegaIx = packet_in.omegaIx;
packet1.omegaIy = packet_in.omegaIy;
packet1.omegaIz = packet_in.omegaIz;
packet1.accel_weight = packet_in.accel_weight;
packet1.renorm_val = packet_in.renorm_val;
packet1.error_rp = packet_in.error_rp;
packet1.error_yaw = packet_in.error_yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_pack(system_id, component_id, &msg , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ahrs_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_send(MAVLINK_COMM_1 , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_simstate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_simstate_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
};
mavlink_simstate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_pack(system_id, component_id, &msg , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_simstate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_send(MAVLINK_COMM_1 , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hwstatus(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hwstatus_t packet_in = {
17235,
139,
};
mavlink_hwstatus_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.Vcc = packet_in.Vcc;
packet1.I2Cerr = packet_in.I2Cerr;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_pack(system_id, component_id, &msg , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hwstatus_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_send(MAVLINK_COMM_1 , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_radio(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_radio_t packet_in = {
5,
72,
139,
206,
17,
17495,
17599,
};
mavlink_radio_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.rssi = packet_in.rssi;
packet1.remrssi = packet_in.remrssi;
packet1.txbuf = packet_in.txbuf;
packet1.noise = packet_in.noise;
packet1.remnoise = packet_in.remnoise;
packet1.rxerrors = packet_in.rxerrors;
packet1.fixed = packet_in.fixed;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_pack(system_id, component_id, &msg , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_radio_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_send(MAVLINK_COMM_1 , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ardupilotmega(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_sensor_offsets(system_id, component_id, last_msg);
mavlink_test_set_mag_offsets(system_id, component_id, last_msg);
mavlink_test_meminfo(system_id, component_id, last_msg);
mavlink_test_ap_adc(system_id, component_id, last_msg);
mavlink_test_digicam_configure(system_id, component_id, last_msg);
mavlink_test_digicam_control(system_id, component_id, last_msg);
mavlink_test_mount_configure(system_id, component_id, last_msg);
mavlink_test_mount_control(system_id, component_id, last_msg);
mavlink_test_mount_status(system_id, component_id, last_msg);
mavlink_test_fence_point(system_id, component_id, last_msg);
mavlink_test_fence_fetch_point(system_id, component_id, last_msg);
mavlink_test_fence_status(system_id, component_id, last_msg);
mavlink_test_ahrs(system_id, component_id, last_msg);
mavlink_test_simstate(system_id, component_id, last_msg);
mavlink_test_hwstatus(system_id, component_id, last_msg);
mavlink_test_radio(system_id, component_id, last_msg);
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // ARDUPILOTMEGA_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/ardupilotmega/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from ardupilotmega.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Mon Apr 30 11:40:11 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "0.9"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/checksum.h
0,0 → 1,89
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef _CHECKSUM_H_
#define _CHECKSUM_H_
 
 
/**
*
* CALCULATE THE CHECKSUM
*
*/
 
#define X25_INIT_CRC 0xffff
#define X25_VALIDATE_CRC 0xf0b8
 
/**
* @brief Accumulate the X.25 CRC by adding one char at a time.
*
* The checksum function adds the hash of one char at a time to the
* 16 bit checksum (uint16_t).
*
* @param data new char to hash
* @param crcAccum the already accumulated checksum
**/
static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
/*Accumulate one byte of data into the CRC*/
uint8_t tmp;
 
tmp = data ^ (uint8_t)(*crcAccum &0xff);
tmp ^= (tmp<<4);
*crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
 
/**
* @brief Initiliaze the buffer for the X.25 CRC
*
* @param crcAccum the 16 bit X.25 CRC
*/
static inline void crc_init(uint16_t* crcAccum)
{
*crcAccum = X25_INIT_CRC;
}
 
 
/**
* @brief Calculates the X.25 checksum on a byte buffer
*
* @param pBuffer buffer containing the byte array to hash
* @param length length of the byte array
* @return the checksum over the buffer bytes
**/
static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length)
{
uint16_t crcTmp;
crc_init(&crcTmp);
while (length--) {
crc_accumulate(*pBuffer++, &crcTmp);
}
return crcTmp;
}
 
/**
* @brief Accumulate the X.25 CRC by adding an array of bytes
*
* The checksum function adds the hash of one char at a time to the
* 16 bit checksum (uint16_t).
*
* @param data new bytes to hash
* @param crcAccum the already accumulated checksum
**/
static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint8_t length)
{
const uint8_t *p = (const uint8_t *)pBuffer;
while (length--) {
crc_accumulate(*p++, crcAccum);
}
}
 
 
 
 
#endif /* _CHECKSUM_H_ */
 
#ifdef __cplusplus
}
#endif
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/common.h
0,0 → 1,159
/** @file
* @brief MAVLink comm protocol generated from common.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef COMMON_H
#define COMMON_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {3, 4, 8, 14, 8, 28, 3, 32, 0, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 19, 2, 23, 21, 0, 37, 26, 101, 26, 16, 32, 32, 37, 32, 11, 17, 17, 16, 18, 36, 4, 4, 2, 2, 4, 2, 2, 3, 14, 12, 18, 16, 8, 27, 25, 18, 18, 24, 24, 0, 0, 0, 26, 16, 36, 5, 6, 56, 26, 21, 18, 0, 0, 18, 20, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 14, 14, 51, 5}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {72, 39, 190, 92, 191, 217, 104, 119, 0, 219, 60, 186, 10, 0, 0, 0, 0, 0, 0, 0, 89, 159, 162, 121, 0, 149, 222, 110, 179, 136, 66, 126, 185, 147, 112, 252, 162, 215, 229, 128, 9, 106, 101, 213, 4, 229, 21, 214, 215, 14, 206, 50, 157, 126, 108, 213, 95, 5, 127, 0, 0, 0, 57, 126, 130, 119, 193, 191, 236, 158, 143, 0, 0, 104, 123, 131, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 224, 60, 106, 7}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_BOOT, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_SYSTEM_TIME_UTC, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_ACTION_ACK, MAVLINK_MESSAGE_INFO_ACTION, MAVLINK_MESSAGE_INFO_SET_MODE, MAVLINK_MESSAGE_INFO_SET_NAV_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_LOCAL_POSITION, MAVLINK_MESSAGE_INFO_GPS_RAW, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_WAYPOINT, MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST, MAVLINK_MESSAGE_INFO_WAYPOINT_SET_CURRENT, MAVLINK_MESSAGE_INFO_WAYPOINT_CURRENT, MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST_LIST, MAVLINK_MESSAGE_INFO_WAYPOINT_COUNT, MAVLINK_MESSAGE_INFO_WAYPOINT_CLEAR_ALL, MAVLINK_MESSAGE_INFO_WAYPOINT_REACHED, MAVLINK_MESSAGE_INFO_WAYPOINT_ACK, MAVLINK_MESSAGE_INFO_GPS_SET_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_LOCAL_ORIGIN_SET, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT_SET, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_CONTROL_STATUS, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, MAVLINK_MESSAGE_INFO_POSITION_TARGET, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, MAVLINK_MESSAGE_INFO_SET_ALTITUDE, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_VFR_HUD, MAVLINK_MESSAGE_INFO_COMMAND, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBJECT_DETECTION_EVENT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_COMMON
 
// ENUM DEFINITIONS
 
 
/** @brief Data stream IDs. A data stream is not a fixed set of messages, but rather a
recommendation to the autopilot software. Individual autopilots may or may not obey
the recommended messages.
*/
#ifndef HAVE_ENUM_MAV_DATA_STREAM
#define HAVE_ENUM_MAV_DATA_STREAM
enum MAV_DATA_STREAM
{
MAV_DATA_STREAM_ALL=0, /* Enable all data streams | */
MAV_DATA_STREAM_RAW_SENSORS=1, /* Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. | */
MAV_DATA_STREAM_EXTENDED_STATUS=2, /* Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS | */
MAV_DATA_STREAM_RC_CHANNELS=3, /* Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW | */
MAV_DATA_STREAM_RAW_CONTROLLER=4, /* Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. | */
MAV_DATA_STREAM_POSITION=6, /* Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. | */
MAV_DATA_STREAM_EXTRA1=10, /* Dependent on the autopilot | */
MAV_DATA_STREAM_EXTRA2=11, /* Dependent on the autopilot | */
MAV_DATA_STREAM_EXTRA3=12, /* Dependent on the autopilot | */
MAV_DATA_STREAM_ENUM_END=13, /* | */
};
#endif
 
/** @brief The ROI (region of interest) for the vehicle. This can be
be used by the vehicle for camera/vehicle attitude alignment (see
MAV_CMD_NAV_ROI).
*/
#ifndef HAVE_ENUM_MAV_ROI
#define HAVE_ENUM_MAV_ROI
enum MAV_ROI
{
MAV_ROI_NONE=0, /* No region of interest. | */
MAV_ROI_WPNEXT=1, /* Point toward next waypoint. | */
MAV_ROI_WPINDEX=2, /* Point toward given waypoint. | */
MAV_ROI_LOCATION=3, /* Point toward fixed location. | */
MAV_ROI_TARGET=4, /* Point toward of given id. | */
MAV_ROI_ENUM_END=5, /* | */
};
#endif
 
 
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
// MESSAGE DEFINITIONS
#include "./mavlink_msg_heartbeat.h"
#include "./mavlink_msg_boot.h"
#include "./mavlink_msg_system_time.h"
#include "./mavlink_msg_ping.h"
#include "./mavlink_msg_system_time_utc.h"
#include "./mavlink_msg_change_operator_control.h"
#include "./mavlink_msg_change_operator_control_ack.h"
#include "./mavlink_msg_auth_key.h"
#include "./mavlink_msg_action_ack.h"
#include "./mavlink_msg_action.h"
#include "./mavlink_msg_set_mode.h"
#include "./mavlink_msg_set_nav_mode.h"
#include "./mavlink_msg_param_request_read.h"
#include "./mavlink_msg_param_request_list.h"
#include "./mavlink_msg_param_value.h"
#include "./mavlink_msg_param_set.h"
#include "./mavlink_msg_gps_raw_int.h"
#include "./mavlink_msg_scaled_imu.h"
#include "./mavlink_msg_gps_status.h"
#include "./mavlink_msg_raw_imu.h"
#include "./mavlink_msg_raw_pressure.h"
#include "./mavlink_msg_scaled_pressure.h"
#include "./mavlink_msg_attitude.h"
#include "./mavlink_msg_local_position.h"
#include "./mavlink_msg_global_position.h"
#include "./mavlink_msg_gps_raw.h"
#include "./mavlink_msg_sys_status.h"
#include "./mavlink_msg_rc_channels_raw.h"
#include "./mavlink_msg_rc_channels_scaled.h"
#include "./mavlink_msg_servo_output_raw.h"
#include "./mavlink_msg_waypoint.h"
#include "./mavlink_msg_waypoint_request.h"
#include "./mavlink_msg_waypoint_set_current.h"
#include "./mavlink_msg_waypoint_current.h"
#include "./mavlink_msg_waypoint_request_list.h"
#include "./mavlink_msg_waypoint_count.h"
#include "./mavlink_msg_waypoint_clear_all.h"
#include "./mavlink_msg_waypoint_reached.h"
#include "./mavlink_msg_waypoint_ack.h"
#include "./mavlink_msg_gps_set_global_origin.h"
#include "./mavlink_msg_gps_local_origin_set.h"
#include "./mavlink_msg_local_position_setpoint_set.h"
#include "./mavlink_msg_local_position_setpoint.h"
#include "./mavlink_msg_control_status.h"
#include "./mavlink_msg_safety_set_allowed_area.h"
#include "./mavlink_msg_safety_allowed_area.h"
#include "./mavlink_msg_set_roll_pitch_yaw_thrust.h"
#include "./mavlink_msg_set_roll_pitch_yaw_speed_thrust.h"
#include "./mavlink_msg_roll_pitch_yaw_thrust_setpoint.h"
#include "./mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint.h"
#include "./mavlink_msg_nav_controller_output.h"
#include "./mavlink_msg_position_target.h"
#include "./mavlink_msg_state_correction.h"
#include "./mavlink_msg_set_altitude.h"
#include "./mavlink_msg_request_data_stream.h"
#include "./mavlink_msg_hil_state.h"
#include "./mavlink_msg_hil_controls.h"
#include "./mavlink_msg_manual_control.h"
#include "./mavlink_msg_rc_channels_override.h"
#include "./mavlink_msg_global_position_int.h"
#include "./mavlink_msg_vfr_hud.h"
#include "./mavlink_msg_command.h"
#include "./mavlink_msg_command_ack.h"
#include "./mavlink_msg_optical_flow.h"
#include "./mavlink_msg_object_detection_event.h"
#include "./mavlink_msg_debug_vect.h"
#include "./mavlink_msg_named_value_float.h"
#include "./mavlink_msg_named_value_int.h"
#include "./mavlink_msg_statustext.h"
#include "./mavlink_msg_debug.h"
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // COMMON_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from common.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 85
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_BIG_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 0
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 0
#endif
 
#include "version.h"
#include "common.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_action.h
0,0 → 1,188
// MESSAGE ACTION PACKING
 
#define MAVLINK_MSG_ID_ACTION 10
 
typedef struct __mavlink_action_t
{
uint8_t target; ///< The system executing the action
uint8_t target_component; ///< The component executing the action
uint8_t action; ///< The action id
} mavlink_action_t;
 
#define MAVLINK_MSG_ID_ACTION_LEN 3
#define MAVLINK_MSG_ID_10_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_ACTION { \
"ACTION", \
3, \
{ { "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_action_t, target) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_action_t, target_component) }, \
{ "action", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_action_t, action) }, \
} \
}
 
 
/**
* @brief Pack a action message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system executing the action
* @param target_component The component executing the action
* @param action The action id
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_action_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, uint8_t target_component, uint8_t action)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, action);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_action_t packet;
packet.target = target;
packet.target_component = target_component;
packet.action = action;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ACTION;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a action message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system executing the action
* @param target_component The component executing the action
* @param action The action id
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_action_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,uint8_t target_component,uint8_t action)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, action);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_action_t packet;
packet.target = target;
packet.target_component = target_component;
packet.action = action;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ACTION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a action struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param action C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_action_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_action_t* action)
{
return mavlink_msg_action_pack(system_id, component_id, msg, action->target, action->target_component, action->action);
}
 
/**
* @brief Send a action message
* @param chan MAVLink channel to send the message
*
* @param target The system executing the action
* @param target_component The component executing the action
* @param action The action id
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_action_send(mavlink_channel_t chan, uint8_t target, uint8_t target_component, uint8_t action)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, action);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTION, buf, 3);
#else
mavlink_action_t packet;
packet.target = target;
packet.target_component = target_component;
packet.action = action;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTION, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE ACTION UNPACKING
 
 
/**
* @brief Get field target from action message
*
* @return The system executing the action
*/
static inline uint8_t mavlink_msg_action_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from action message
*
* @return The component executing the action
*/
static inline uint8_t mavlink_msg_action_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field action from action message
*
* @return The action id
*/
static inline uint8_t mavlink_msg_action_get_action(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a action message into a struct
*
* @param msg The message to decode
* @param action C-struct to decode the message contents into
*/
static inline void mavlink_msg_action_decode(const mavlink_message_t* msg, mavlink_action_t* action)
{
#if MAVLINK_NEED_BYTE_SWAP
action->target = mavlink_msg_action_get_target(msg);
action->target_component = mavlink_msg_action_get_target_component(msg);
action->action = mavlink_msg_action_get_action(msg);
#else
memcpy(action, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_action_ack.h
0,0 → 1,166
// MESSAGE ACTION_ACK PACKING
 
#define MAVLINK_MSG_ID_ACTION_ACK 9
 
typedef struct __mavlink_action_ack_t
{
uint8_t action; ///< The action id
uint8_t result; ///< 0: Action DENIED, 1: Action executed
} mavlink_action_ack_t;
 
#define MAVLINK_MSG_ID_ACTION_ACK_LEN 2
#define MAVLINK_MSG_ID_9_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_ACTION_ACK { \
"ACTION_ACK", \
2, \
{ { "action", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_action_ack_t, action) }, \
{ "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_action_ack_t, result) }, \
} \
}
 
 
/**
* @brief Pack a action_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param action The action id
* @param result 0: Action DENIED, 1: Action executed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_action_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t action, uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, action);
_mav_put_uint8_t(buf, 1, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_action_ack_t packet;
packet.action = action;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ACTION_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a action_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param action The action id
* @param result 0: Action DENIED, 1: Action executed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_action_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t action,uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, action);
_mav_put_uint8_t(buf, 1, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_action_ack_t packet;
packet.action = action;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ACTION_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a action_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param action_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_action_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_action_ack_t* action_ack)
{
return mavlink_msg_action_ack_pack(system_id, component_id, msg, action_ack->action, action_ack->result);
}
 
/**
* @brief Send a action_ack message
* @param chan MAVLink channel to send the message
*
* @param action The action id
* @param result 0: Action DENIED, 1: Action executed
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_action_ack_send(mavlink_channel_t chan, uint8_t action, uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, action);
_mav_put_uint8_t(buf, 1, result);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTION_ACK, buf, 2);
#else
mavlink_action_ack_t packet;
packet.action = action;
packet.result = result;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTION_ACK, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE ACTION_ACK UNPACKING
 
 
/**
* @brief Get field action from action_ack message
*
* @return The action id
*/
static inline uint8_t mavlink_msg_action_ack_get_action(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field result from action_ack message
*
* @return 0: Action DENIED, 1: Action executed
*/
static inline uint8_t mavlink_msg_action_ack_get_result(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a action_ack message into a struct
*
* @param msg The message to decode
* @param action_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_action_ack_decode(const mavlink_message_t* msg, mavlink_action_ack_t* action_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
action_ack->action = mavlink_msg_action_ack_get_action(msg);
action_ack->result = mavlink_msg_action_ack_get_result(msg);
#else
memcpy(action_ack, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_attitude.h
0,0 → 1,276
// MESSAGE ATTITUDE PACKING
 
#define MAVLINK_MSG_ID_ATTITUDE 30
 
typedef struct __mavlink_attitude_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float rollspeed; ///< Roll angular speed (rad/s)
float pitchspeed; ///< Pitch angular speed (rad/s)
float yawspeed; ///< Yaw angular speed (rad/s)
} mavlink_attitude_t;
 
#define MAVLINK_MSG_ID_ATTITUDE_LEN 32
#define MAVLINK_MSG_ID_30_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_ATTITUDE { \
"ATTITUDE", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_attitude_t, usec) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_t, yaw) }, \
{ "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_t, rollspeed) }, \
{ "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_t, pitchspeed) }, \
{ "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_t, yawspeed) }, \
} \
}
 
 
/**
* @brief Pack a attitude message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_attitude_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
return mavlink_finalize_message(msg, system_id, component_id, 32);
}
 
/**
* @brief Pack a attitude message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float roll,float pitch,float yaw,float rollspeed,float pitchspeed,float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_attitude_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32);
}
 
/**
* @brief Encode a attitude struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param attitude C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_t* attitude)
{
return mavlink_msg_attitude_pack(system_id, component_id, msg, attitude->usec, attitude->roll, attitude->pitch, attitude->yaw, attitude->rollspeed, attitude->pitchspeed, attitude->yawspeed);
}
 
/**
* @brief Send a attitude message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_attitude_send(mavlink_channel_t chan, uint64_t usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, buf, 32);
#else
mavlink_attitude_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, (const char *)&packet, 32);
#endif
}
 
#endif
 
// MESSAGE ATTITUDE UNPACKING
 
 
/**
* @brief Get field usec from attitude message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_attitude_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll from attitude message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_attitude_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch from attitude message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_attitude_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw from attitude message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_attitude_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field rollspeed from attitude message
*
* @return Roll angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_rollspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitchspeed from attitude message
*
* @return Pitch angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_pitchspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yawspeed from attitude message
*
* @return Yaw angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_yawspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a attitude message into a struct
*
* @param msg The message to decode
* @param attitude C-struct to decode the message contents into
*/
static inline void mavlink_msg_attitude_decode(const mavlink_message_t* msg, mavlink_attitude_t* attitude)
{
#if MAVLINK_NEED_BYTE_SWAP
attitude->usec = mavlink_msg_attitude_get_usec(msg);
attitude->roll = mavlink_msg_attitude_get_roll(msg);
attitude->pitch = mavlink_msg_attitude_get_pitch(msg);
attitude->yaw = mavlink_msg_attitude_get_yaw(msg);
attitude->rollspeed = mavlink_msg_attitude_get_rollspeed(msg);
attitude->pitchspeed = mavlink_msg_attitude_get_pitchspeed(msg);
attitude->yawspeed = mavlink_msg_attitude_get_yawspeed(msg);
#else
memcpy(attitude, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_auth_key.h
0,0 → 1,144
// MESSAGE AUTH_KEY PACKING
 
#define MAVLINK_MSG_ID_AUTH_KEY 7
 
typedef struct __mavlink_auth_key_t
{
char key[32]; ///< key
} mavlink_auth_key_t;
 
#define MAVLINK_MSG_ID_AUTH_KEY_LEN 32
#define MAVLINK_MSG_ID_7_LEN 32
 
#define MAVLINK_MSG_AUTH_KEY_FIELD_KEY_LEN 32
 
#define MAVLINK_MESSAGE_INFO_AUTH_KEY { \
"AUTH_KEY", \
1, \
{ { "key", NULL, MAVLINK_TYPE_CHAR, 32, 0, offsetof(mavlink_auth_key_t, key) }, \
} \
}
 
 
/**
* @brief Pack a auth_key message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param key key
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_auth_key_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
return mavlink_finalize_message(msg, system_id, component_id, 32);
}
 
/**
* @brief Pack a auth_key message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param key key
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_auth_key_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32);
}
 
/**
* @brief Encode a auth_key struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param auth_key C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_auth_key_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_auth_key_t* auth_key)
{
return mavlink_msg_auth_key_pack(system_id, component_id, msg, auth_key->key);
}
 
/**
* @brief Send a auth_key message
* @param chan MAVLink channel to send the message
*
* @param key key
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_auth_key_send(mavlink_channel_t chan, const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, buf, 32);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, (const char *)&packet, 32);
#endif
}
 
#endif
 
// MESSAGE AUTH_KEY UNPACKING
 
 
/**
* @brief Get field key from auth_key message
*
* @return key
*/
static inline uint16_t mavlink_msg_auth_key_get_key(const mavlink_message_t* msg, char *key)
{
return _MAV_RETURN_char_array(msg, key, 32, 0);
}
 
/**
* @brief Decode a auth_key message into a struct
*
* @param msg The message to decode
* @param auth_key C-struct to decode the message contents into
*/
static inline void mavlink_msg_auth_key_decode(const mavlink_message_t* msg, mavlink_auth_key_t* auth_key)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_auth_key_get_key(msg, auth_key->key);
#else
memcpy(auth_key, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_boot.h
0,0 → 1,144
// MESSAGE BOOT PACKING
 
#define MAVLINK_MSG_ID_BOOT 1
 
typedef struct __mavlink_boot_t
{
uint32_t version; ///< The onboard software version
} mavlink_boot_t;
 
#define MAVLINK_MSG_ID_BOOT_LEN 4
#define MAVLINK_MSG_ID_1_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_BOOT { \
"BOOT", \
1, \
{ { "version", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_boot_t, version) }, \
} \
}
 
 
/**
* @brief Pack a boot message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param version The onboard software version
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_boot_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t version)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint32_t(buf, 0, version);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_boot_t packet;
packet.version = version;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_BOOT;
return mavlink_finalize_message(msg, system_id, component_id, 4);
}
 
/**
* @brief Pack a boot message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param version The onboard software version
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_boot_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t version)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint32_t(buf, 0, version);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_boot_t packet;
packet.version = version;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_BOOT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4);
}
 
/**
* @brief Encode a boot struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param boot C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_boot_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_boot_t* boot)
{
return mavlink_msg_boot_pack(system_id, component_id, msg, boot->version);
}
 
/**
* @brief Send a boot message
* @param chan MAVLink channel to send the message
*
* @param version The onboard software version
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_boot_send(mavlink_channel_t chan, uint32_t version)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint32_t(buf, 0, version);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BOOT, buf, 4);
#else
mavlink_boot_t packet;
packet.version = version;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BOOT, (const char *)&packet, 4);
#endif
}
 
#endif
 
// MESSAGE BOOT UNPACKING
 
 
/**
* @brief Get field version from boot message
*
* @return The onboard software version
*/
static inline uint32_t mavlink_msg_boot_get_version(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Decode a boot message into a struct
*
* @param msg The message to decode
* @param boot C-struct to decode the message contents into
*/
static inline void mavlink_msg_boot_decode(const mavlink_message_t* msg, mavlink_boot_t* boot)
{
#if MAVLINK_NEED_BYTE_SWAP
boot->version = mavlink_msg_boot_get_version(msg);
#else
memcpy(boot, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_change_operator_control.h
0,0 → 1,204
// MESSAGE CHANGE_OPERATOR_CONTROL PACKING
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL 5
 
typedef struct __mavlink_change_operator_control_t
{
uint8_t target_system; ///< System the GCS requests control for
uint8_t control_request; ///< 0: request control of this MAV, 1: Release control of this MAV
uint8_t version; ///< 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
char passkey[25]; ///< Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
} mavlink_change_operator_control_t;
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN 28
#define MAVLINK_MSG_ID_5_LEN 28
 
#define MAVLINK_MSG_CHANGE_OPERATOR_CONTROL_FIELD_PASSKEY_LEN 25
 
#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL { \
"CHANGE_OPERATOR_CONTROL", \
4, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_t, target_system) }, \
{ "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_t, control_request) }, \
{ "version", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_t, version) }, \
{ "passkey", NULL, MAVLINK_TYPE_CHAR, 25, 3, offsetof(mavlink_change_operator_control_t, passkey) }, \
} \
}
 
 
/**
* @brief Pack a change_operator_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 28);
}
 
/**
* @brief Pack a change_operator_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t control_request,uint8_t version,const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28);
}
 
/**
* @brief Encode a change_operator_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param change_operator_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_change_operator_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_t* change_operator_control)
{
return mavlink_msg_change_operator_control_pack(system_id, component_id, msg, change_operator_control->target_system, change_operator_control->control_request, change_operator_control->version, change_operator_control->passkey);
}
 
/**
* @brief Send a change_operator_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_change_operator_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, buf, 28);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, (const char *)&packet, 28);
#endif
}
 
#endif
 
// MESSAGE CHANGE_OPERATOR_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from change_operator_control message
*
* @return System the GCS requests control for
*/
static inline uint8_t mavlink_msg_change_operator_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field control_request from change_operator_control message
*
* @return 0: request control of this MAV, 1: Release control of this MAV
*/
static inline uint8_t mavlink_msg_change_operator_control_get_control_request(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field version from change_operator_control message
*
* @return 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
*/
static inline uint8_t mavlink_msg_change_operator_control_get_version(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field passkey from change_operator_control message
*
* @return Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
*/
static inline uint16_t mavlink_msg_change_operator_control_get_passkey(const mavlink_message_t* msg, char *passkey)
{
return _MAV_RETURN_char_array(msg, passkey, 25, 3);
}
 
/**
* @brief Decode a change_operator_control message into a struct
*
* @param msg The message to decode
* @param change_operator_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_change_operator_control_decode(const mavlink_message_t* msg, mavlink_change_operator_control_t* change_operator_control)
{
#if MAVLINK_NEED_BYTE_SWAP
change_operator_control->target_system = mavlink_msg_change_operator_control_get_target_system(msg);
change_operator_control->control_request = mavlink_msg_change_operator_control_get_control_request(msg);
change_operator_control->version = mavlink_msg_change_operator_control_get_version(msg);
mavlink_msg_change_operator_control_get_passkey(msg, change_operator_control->passkey);
#else
memcpy(change_operator_control, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_change_operator_control_ack.h
0,0 → 1,188
// MESSAGE CHANGE_OPERATOR_CONTROL_ACK PACKING
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK 6
 
typedef struct __mavlink_change_operator_control_ack_t
{
uint8_t gcs_system_id; ///< ID of the GCS this message
uint8_t control_request; ///< 0: request control of this MAV, 1: Release control of this MAV
uint8_t ack; ///< 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
} mavlink_change_operator_control_ack_t;
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN 3
#define MAVLINK_MSG_ID_6_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK { \
"CHANGE_OPERATOR_CONTROL_ACK", \
3, \
{ { "gcs_system_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_ack_t, gcs_system_id) }, \
{ "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_ack_t, control_request) }, \
{ "ack", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_ack_t, ack) }, \
} \
}
 
 
/**
* @brief Pack a change_operator_control_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a change_operator_control_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t gcs_system_id,uint8_t control_request,uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a change_operator_control_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param change_operator_control_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_ack_t* change_operator_control_ack)
{
return mavlink_msg_change_operator_control_ack_pack(system_id, component_id, msg, change_operator_control_ack->gcs_system_id, change_operator_control_ack->control_request, change_operator_control_ack->ack);
}
 
/**
* @brief Send a change_operator_control_ack message
* @param chan MAVLink channel to send the message
*
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_change_operator_control_ack_send(mavlink_channel_t chan, uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, buf, 3);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE CHANGE_OPERATOR_CONTROL_ACK UNPACKING
 
 
/**
* @brief Get field gcs_system_id from change_operator_control_ack message
*
* @return ID of the GCS this message
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_gcs_system_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field control_request from change_operator_control_ack message
*
* @return 0: request control of this MAV, 1: Release control of this MAV
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_control_request(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field ack from change_operator_control_ack message
*
* @return 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_ack(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a change_operator_control_ack message into a struct
*
* @param msg The message to decode
* @param change_operator_control_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_change_operator_control_ack_decode(const mavlink_message_t* msg, mavlink_change_operator_control_ack_t* change_operator_control_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
change_operator_control_ack->gcs_system_id = mavlink_msg_change_operator_control_ack_get_gcs_system_id(msg);
change_operator_control_ack->control_request = mavlink_msg_change_operator_control_ack_get_control_request(msg);
change_operator_control_ack->ack = mavlink_msg_change_operator_control_ack_get_ack(msg);
#else
memcpy(change_operator_control_ack, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_command.h
0,0 → 1,298
// MESSAGE COMMAND PACKING
 
#define MAVLINK_MSG_ID_COMMAND 75
 
typedef struct __mavlink_command_t
{
uint8_t target_system; ///< System which should execute the command
uint8_t target_component; ///< Component which should execute the command, 0 for all components
uint8_t command; ///< Command ID, as defined by MAV_CMD enum.
uint8_t confirmation; ///< 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
float param1; ///< Parameter 1, as defined by MAV_CMD enum.
float param2; ///< Parameter 2, as defined by MAV_CMD enum.
float param3; ///< Parameter 3, as defined by MAV_CMD enum.
float param4; ///< Parameter 4, as defined by MAV_CMD enum.
} mavlink_command_t;
 
#define MAVLINK_MSG_ID_COMMAND_LEN 20
#define MAVLINK_MSG_ID_75_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_COMMAND { \
"COMMAND", \
8, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_command_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_command_t, target_component) }, \
{ "command", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_t, command) }, \
{ "confirmation", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_command_t, confirmation) }, \
{ "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_t, param1) }, \
{ "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_t, param2) }, \
{ "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_t, param3) }, \
{ "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_command_t, param4) }, \
} \
}
 
 
/**
* @brief Pack a command message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t command, uint8_t confirmation, float param1, float param2, float param3, float param4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, command);
_mav_put_uint8_t(buf, 3, confirmation);
_mav_put_float(buf, 4, param1);
_mav_put_float(buf, 8, param2);
_mav_put_float(buf, 12, param3);
_mav_put_float(buf, 16, param4);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_command_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.command = command;
packet.confirmation = confirmation;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND;
return mavlink_finalize_message(msg, system_id, component_id, 20);
}
 
/**
* @brief Pack a command message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t command,uint8_t confirmation,float param1,float param2,float param3,float param4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, command);
_mav_put_uint8_t(buf, 3, confirmation);
_mav_put_float(buf, 4, param1);
_mav_put_float(buf, 8, param2);
_mav_put_float(buf, 12, param3);
_mav_put_float(buf, 16, param4);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_command_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.command = command;
packet.confirmation = confirmation;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20);
}
 
/**
* @brief Encode a command struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param command C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_command_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_t* command)
{
return mavlink_msg_command_pack(system_id, component_id, msg, command->target_system, command->target_component, command->command, command->confirmation, command->param1, command->param2, command->param3, command->param4);
}
 
/**
* @brief Send a command message
* @param chan MAVLink channel to send the message
*
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_command_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t command, uint8_t confirmation, float param1, float param2, float param3, float param4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, command);
_mav_put_uint8_t(buf, 3, confirmation);
_mav_put_float(buf, 4, param1);
_mav_put_float(buf, 8, param2);
_mav_put_float(buf, 12, param3);
_mav_put_float(buf, 16, param4);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND, buf, 20);
#else
mavlink_command_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.command = command;
packet.confirmation = confirmation;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND, (const char *)&packet, 20);
#endif
}
 
#endif
 
// MESSAGE COMMAND UNPACKING
 
 
/**
* @brief Get field target_system from command message
*
* @return System which should execute the command
*/
static inline uint8_t mavlink_msg_command_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from command message
*
* @return Component which should execute the command, 0 for all components
*/
static inline uint8_t mavlink_msg_command_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field command from command message
*
* @return Command ID, as defined by MAV_CMD enum.
*/
static inline uint8_t mavlink_msg_command_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field confirmation from command message
*
* @return 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
*/
static inline uint8_t mavlink_msg_command_get_confirmation(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field param1 from command message
*
* @return Parameter 1, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_get_param1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field param2 from command message
*
* @return Parameter 2, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_get_param2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field param3 from command message
*
* @return Parameter 3, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_get_param3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field param4 from command message
*
* @return Parameter 4, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_get_param4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a command message into a struct
*
* @param msg The message to decode
* @param command C-struct to decode the message contents into
*/
static inline void mavlink_msg_command_decode(const mavlink_message_t* msg, mavlink_command_t* command)
{
#if MAVLINK_NEED_BYTE_SWAP
command->target_system = mavlink_msg_command_get_target_system(msg);
command->target_component = mavlink_msg_command_get_target_component(msg);
command->command = mavlink_msg_command_get_command(msg);
command->confirmation = mavlink_msg_command_get_confirmation(msg);
command->param1 = mavlink_msg_command_get_param1(msg);
command->param2 = mavlink_msg_command_get_param2(msg);
command->param3 = mavlink_msg_command_get_param3(msg);
command->param4 = mavlink_msg_command_get_param4(msg);
#else
memcpy(command, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_command_ack.h
0,0 → 1,166
// MESSAGE COMMAND_ACK PACKING
 
#define MAVLINK_MSG_ID_COMMAND_ACK 76
 
typedef struct __mavlink_command_ack_t
{
float command; ///< Current airspeed in m/s
float result; ///< 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION
} mavlink_command_ack_t;
 
#define MAVLINK_MSG_ID_COMMAND_ACK_LEN 8
#define MAVLINK_MSG_ID_76_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_COMMAND_ACK { \
"COMMAND_ACK", \
2, \
{ { "command", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_ack_t, command) }, \
{ "result", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_ack_t, result) }, \
} \
}
 
 
/**
* @brief Pack a command_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param command Current airspeed in m/s
* @param result 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float command, float result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_float(buf, 0, command);
_mav_put_float(buf, 4, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a command_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param command Current airspeed in m/s
* @param result 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float command,float result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_float(buf, 0, command);
_mav_put_float(buf, 4, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a command_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param command_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_command_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_ack_t* command_ack)
{
return mavlink_msg_command_ack_pack(system_id, component_id, msg, command_ack->command, command_ack->result);
}
 
/**
* @brief Send a command_ack message
* @param chan MAVLink channel to send the message
*
* @param command Current airspeed in m/s
* @param result 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_command_ack_send(mavlink_channel_t chan, float command, float result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_float(buf, 0, command);
_mav_put_float(buf, 4, result);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, buf, 8);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE COMMAND_ACK UNPACKING
 
 
/**
* @brief Get field command from command_ack message
*
* @return Current airspeed in m/s
*/
static inline float mavlink_msg_command_ack_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field result from command_ack message
*
* @return 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION
*/
static inline float mavlink_msg_command_ack_get_result(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Decode a command_ack message into a struct
*
* @param msg The message to decode
* @param command_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_command_ack_decode(const mavlink_message_t* msg, mavlink_command_ack_t* command_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
command_ack->command = mavlink_msg_command_ack_get_command(msg);
command_ack->result = mavlink_msg_command_ack_get_result(msg);
#else
memcpy(command_ack, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_control_status.h
0,0 → 1,298
// MESSAGE CONTROL_STATUS PACKING
 
#define MAVLINK_MSG_ID_CONTROL_STATUS 52
 
typedef struct __mavlink_control_status_t
{
uint8_t position_fix; ///< Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix
uint8_t vision_fix; ///< Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix
uint8_t gps_fix; ///< GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix
uint8_t ahrs_health; ///< Attitude estimation health: 0: poor, 255: excellent
uint8_t control_att; ///< 0: Attitude control disabled, 1: enabled
uint8_t control_pos_xy; ///< 0: X, Y position control disabled, 1: enabled
uint8_t control_pos_z; ///< 0: Z position control disabled, 1: enabled
uint8_t control_pos_yaw; ///< 0: Yaw angle control disabled, 1: enabled
} mavlink_control_status_t;
 
#define MAVLINK_MSG_ID_CONTROL_STATUS_LEN 8
#define MAVLINK_MSG_ID_52_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_CONTROL_STATUS { \
"CONTROL_STATUS", \
8, \
{ { "position_fix", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_control_status_t, position_fix) }, \
{ "vision_fix", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_control_status_t, vision_fix) }, \
{ "gps_fix", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_control_status_t, gps_fix) }, \
{ "ahrs_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_control_status_t, ahrs_health) }, \
{ "control_att", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_control_status_t, control_att) }, \
{ "control_pos_xy", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_control_status_t, control_pos_xy) }, \
{ "control_pos_z", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_control_status_t, control_pos_z) }, \
{ "control_pos_yaw", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_control_status_t, control_pos_yaw) }, \
} \
}
 
 
/**
* @brief Pack a control_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param position_fix Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix
* @param vision_fix Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix
* @param gps_fix GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix
* @param ahrs_health Attitude estimation health: 0: poor, 255: excellent
* @param control_att 0: Attitude control disabled, 1: enabled
* @param control_pos_xy 0: X, Y position control disabled, 1: enabled
* @param control_pos_z 0: Z position control disabled, 1: enabled
* @param control_pos_yaw 0: Yaw angle control disabled, 1: enabled
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_control_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t position_fix, uint8_t vision_fix, uint8_t gps_fix, uint8_t ahrs_health, uint8_t control_att, uint8_t control_pos_xy, uint8_t control_pos_z, uint8_t control_pos_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, position_fix);
_mav_put_uint8_t(buf, 1, vision_fix);
_mav_put_uint8_t(buf, 2, gps_fix);
_mav_put_uint8_t(buf, 3, ahrs_health);
_mav_put_uint8_t(buf, 4, control_att);
_mav_put_uint8_t(buf, 5, control_pos_xy);
_mav_put_uint8_t(buf, 6, control_pos_z);
_mav_put_uint8_t(buf, 7, control_pos_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_control_status_t packet;
packet.position_fix = position_fix;
packet.vision_fix = vision_fix;
packet.gps_fix = gps_fix;
packet.ahrs_health = ahrs_health;
packet.control_att = control_att;
packet.control_pos_xy = control_pos_xy;
packet.control_pos_z = control_pos_z;
packet.control_pos_yaw = control_pos_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CONTROL_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a control_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param position_fix Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix
* @param vision_fix Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix
* @param gps_fix GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix
* @param ahrs_health Attitude estimation health: 0: poor, 255: excellent
* @param control_att 0: Attitude control disabled, 1: enabled
* @param control_pos_xy 0: X, Y position control disabled, 1: enabled
* @param control_pos_z 0: Z position control disabled, 1: enabled
* @param control_pos_yaw 0: Yaw angle control disabled, 1: enabled
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_control_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t position_fix,uint8_t vision_fix,uint8_t gps_fix,uint8_t ahrs_health,uint8_t control_att,uint8_t control_pos_xy,uint8_t control_pos_z,uint8_t control_pos_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, position_fix);
_mav_put_uint8_t(buf, 1, vision_fix);
_mav_put_uint8_t(buf, 2, gps_fix);
_mav_put_uint8_t(buf, 3, ahrs_health);
_mav_put_uint8_t(buf, 4, control_att);
_mav_put_uint8_t(buf, 5, control_pos_xy);
_mav_put_uint8_t(buf, 6, control_pos_z);
_mav_put_uint8_t(buf, 7, control_pos_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_control_status_t packet;
packet.position_fix = position_fix;
packet.vision_fix = vision_fix;
packet.gps_fix = gps_fix;
packet.ahrs_health = ahrs_health;
packet.control_att = control_att;
packet.control_pos_xy = control_pos_xy;
packet.control_pos_z = control_pos_z;
packet.control_pos_yaw = control_pos_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CONTROL_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a control_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param control_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_control_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_control_status_t* control_status)
{
return mavlink_msg_control_status_pack(system_id, component_id, msg, control_status->position_fix, control_status->vision_fix, control_status->gps_fix, control_status->ahrs_health, control_status->control_att, control_status->control_pos_xy, control_status->control_pos_z, control_status->control_pos_yaw);
}
 
/**
* @brief Send a control_status message
* @param chan MAVLink channel to send the message
*
* @param position_fix Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix
* @param vision_fix Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix
* @param gps_fix GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix
* @param ahrs_health Attitude estimation health: 0: poor, 255: excellent
* @param control_att 0: Attitude control disabled, 1: enabled
* @param control_pos_xy 0: X, Y position control disabled, 1: enabled
* @param control_pos_z 0: Z position control disabled, 1: enabled
* @param control_pos_yaw 0: Yaw angle control disabled, 1: enabled
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_control_status_send(mavlink_channel_t chan, uint8_t position_fix, uint8_t vision_fix, uint8_t gps_fix, uint8_t ahrs_health, uint8_t control_att, uint8_t control_pos_xy, uint8_t control_pos_z, uint8_t control_pos_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint8_t(buf, 0, position_fix);
_mav_put_uint8_t(buf, 1, vision_fix);
_mav_put_uint8_t(buf, 2, gps_fix);
_mav_put_uint8_t(buf, 3, ahrs_health);
_mav_put_uint8_t(buf, 4, control_att);
_mav_put_uint8_t(buf, 5, control_pos_xy);
_mav_put_uint8_t(buf, 6, control_pos_z);
_mav_put_uint8_t(buf, 7, control_pos_yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_STATUS, buf, 8);
#else
mavlink_control_status_t packet;
packet.position_fix = position_fix;
packet.vision_fix = vision_fix;
packet.gps_fix = gps_fix;
packet.ahrs_health = ahrs_health;
packet.control_att = control_att;
packet.control_pos_xy = control_pos_xy;
packet.control_pos_z = control_pos_z;
packet.control_pos_yaw = control_pos_yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_STATUS, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE CONTROL_STATUS UNPACKING
 
 
/**
* @brief Get field position_fix from control_status message
*
* @return Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix
*/
static inline uint8_t mavlink_msg_control_status_get_position_fix(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field vision_fix from control_status message
*
* @return Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix
*/
static inline uint8_t mavlink_msg_control_status_get_vision_fix(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field gps_fix from control_status message
*
* @return GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix
*/
static inline uint8_t mavlink_msg_control_status_get_gps_fix(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field ahrs_health from control_status message
*
* @return Attitude estimation health: 0: poor, 255: excellent
*/
static inline uint8_t mavlink_msg_control_status_get_ahrs_health(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field control_att from control_status message
*
* @return 0: Attitude control disabled, 1: enabled
*/
static inline uint8_t mavlink_msg_control_status_get_control_att(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field control_pos_xy from control_status message
*
* @return 0: X, Y position control disabled, 1: enabled
*/
static inline uint8_t mavlink_msg_control_status_get_control_pos_xy(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field control_pos_z from control_status message
*
* @return 0: Z position control disabled, 1: enabled
*/
static inline uint8_t mavlink_msg_control_status_get_control_pos_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field control_pos_yaw from control_status message
*
* @return 0: Yaw angle control disabled, 1: enabled
*/
static inline uint8_t mavlink_msg_control_status_get_control_pos_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Decode a control_status message into a struct
*
* @param msg The message to decode
* @param control_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_control_status_decode(const mavlink_message_t* msg, mavlink_control_status_t* control_status)
{
#if MAVLINK_NEED_BYTE_SWAP
control_status->position_fix = mavlink_msg_control_status_get_position_fix(msg);
control_status->vision_fix = mavlink_msg_control_status_get_vision_fix(msg);
control_status->gps_fix = mavlink_msg_control_status_get_gps_fix(msg);
control_status->ahrs_health = mavlink_msg_control_status_get_ahrs_health(msg);
control_status->control_att = mavlink_msg_control_status_get_control_att(msg);
control_status->control_pos_xy = mavlink_msg_control_status_get_control_pos_xy(msg);
control_status->control_pos_z = mavlink_msg_control_status_get_control_pos_z(msg);
control_status->control_pos_yaw = mavlink_msg_control_status_get_control_pos_yaw(msg);
#else
memcpy(control_status, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_debug.h
0,0 → 1,166
// MESSAGE DEBUG PACKING
 
#define MAVLINK_MSG_ID_DEBUG 255
 
typedef struct __mavlink_debug_t
{
uint8_t ind; ///< index of debug variable
float value; ///< DEBUG value
} mavlink_debug_t;
 
#define MAVLINK_MSG_ID_DEBUG_LEN 5
#define MAVLINK_MSG_ID_255_LEN 5
 
 
 
#define MAVLINK_MESSAGE_INFO_DEBUG { \
"DEBUG", \
2, \
{ { "ind", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_debug_t, ind) }, \
{ "value", NULL, MAVLINK_TYPE_FLOAT, 0, 1, offsetof(mavlink_debug_t, value) }, \
} \
}
 
 
/**
* @brief Pack a debug message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param ind index of debug variable
* @param value DEBUG value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t ind, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, ind);
_mav_put_float(buf, 1, value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_debug_t packet;
packet.ind = ind;
packet.value = value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG;
return mavlink_finalize_message(msg, system_id, component_id, 5);
}
 
/**
* @brief Pack a debug message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param ind index of debug variable
* @param value DEBUG value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t ind,float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, ind);
_mav_put_float(buf, 1, value);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_debug_t packet;
packet.ind = ind;
packet.value = value;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 5);
}
 
/**
* @brief Encode a debug struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param debug C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_debug_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_t* debug)
{
return mavlink_msg_debug_pack(system_id, component_id, msg, debug->ind, debug->value);
}
 
/**
* @brief Send a debug message
* @param chan MAVLink channel to send the message
*
* @param ind index of debug variable
* @param value DEBUG value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_debug_send(mavlink_channel_t chan, uint8_t ind, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, ind);
_mav_put_float(buf, 1, value);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, buf, 5);
#else
mavlink_debug_t packet;
packet.ind = ind;
packet.value = value;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, (const char *)&packet, 5);
#endif
}
 
#endif
 
// MESSAGE DEBUG UNPACKING
 
 
/**
* @brief Get field ind from debug message
*
* @return index of debug variable
*/
static inline uint8_t mavlink_msg_debug_get_ind(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field value from debug message
*
* @return DEBUG value
*/
static inline float mavlink_msg_debug_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 1);
}
 
/**
* @brief Decode a debug message into a struct
*
* @param msg The message to decode
* @param debug C-struct to decode the message contents into
*/
static inline void mavlink_msg_debug_decode(const mavlink_message_t* msg, mavlink_debug_t* debug)
{
#if MAVLINK_NEED_BYTE_SWAP
debug->ind = mavlink_msg_debug_get_ind(msg);
debug->value = mavlink_msg_debug_get_value(msg);
#else
memcpy(debug, _MAV_PAYLOAD(msg), 5);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_debug_vect.h
0,0 → 1,226
// MESSAGE DEBUG_VECT PACKING
 
#define MAVLINK_MSG_ID_DEBUG_VECT 251
 
typedef struct __mavlink_debug_vect_t
{
char name[10]; ///< Name
uint64_t usec; ///< Timestamp
float x; ///< x
float y; ///< y
float z; ///< z
} mavlink_debug_vect_t;
 
#define MAVLINK_MSG_ID_DEBUG_VECT_LEN 30
#define MAVLINK_MSG_ID_251_LEN 30
 
#define MAVLINK_MSG_DEBUG_VECT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_DEBUG_VECT { \
"DEBUG_VECT", \
5, \
{ { "name", NULL, MAVLINK_TYPE_CHAR, 10, 0, offsetof(mavlink_debug_vect_t, name) }, \
{ "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 10, offsetof(mavlink_debug_vect_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 18, offsetof(mavlink_debug_vect_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 22, offsetof(mavlink_debug_vect_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 26, offsetof(mavlink_debug_vect_t, z) }, \
} \
}
 
 
/**
* @brief Pack a debug_vect message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param name Name
* @param usec Timestamp
* @param x x
* @param y y
* @param z z
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_vect_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *name, uint64_t usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 10, usec);
_mav_put_float(buf, 18, x);
_mav_put_float(buf, 22, y);
_mav_put_float(buf, 26, z);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_debug_vect_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
return mavlink_finalize_message(msg, system_id, component_id, 30);
}
 
/**
* @brief Pack a debug_vect message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param name Name
* @param usec Timestamp
* @param x x
* @param y y
* @param z z
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_vect_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *name,uint64_t usec,float x,float y,float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 10, usec);
_mav_put_float(buf, 18, x);
_mav_put_float(buf, 22, y);
_mav_put_float(buf, 26, z);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_debug_vect_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 30);
}
 
/**
* @brief Encode a debug_vect struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param debug_vect C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_debug_vect_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_vect_t* debug_vect)
{
return mavlink_msg_debug_vect_pack(system_id, component_id, msg, debug_vect->name, debug_vect->usec, debug_vect->x, debug_vect->y, debug_vect->z);
}
 
/**
* @brief Send a debug_vect message
* @param chan MAVLink channel to send the message
*
* @param name Name
* @param usec Timestamp
* @param x x
* @param y y
* @param z z
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_debug_vect_send(mavlink_channel_t chan, const char *name, uint64_t usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 10, usec);
_mav_put_float(buf, 18, x);
_mav_put_float(buf, 22, y);
_mav_put_float(buf, 26, z);
_mav_put_char_array(buf, 0, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, buf, 30);
#else
mavlink_debug_vect_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, (const char *)&packet, 30);
#endif
}
 
#endif
 
// MESSAGE DEBUG_VECT UNPACKING
 
 
/**
* @brief Get field name from debug_vect message
*
* @return Name
*/
static inline uint16_t mavlink_msg_debug_vect_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 0);
}
 
/**
* @brief Get field usec from debug_vect message
*
* @return Timestamp
*/
static inline uint64_t mavlink_msg_debug_vect_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 10);
}
 
/**
* @brief Get field x from debug_vect message
*
* @return x
*/
static inline float mavlink_msg_debug_vect_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 18);
}
 
/**
* @brief Get field y from debug_vect message
*
* @return y
*/
static inline float mavlink_msg_debug_vect_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 22);
}
 
/**
* @brief Get field z from debug_vect message
*
* @return z
*/
static inline float mavlink_msg_debug_vect_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 26);
}
 
/**
* @brief Decode a debug_vect message into a struct
*
* @param msg The message to decode
* @param debug_vect C-struct to decode the message contents into
*/
static inline void mavlink_msg_debug_vect_decode(const mavlink_message_t* msg, mavlink_debug_vect_t* debug_vect)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_debug_vect_get_name(msg, debug_vect->name);
debug_vect->usec = mavlink_msg_debug_vect_get_usec(msg);
debug_vect->x = mavlink_msg_debug_vect_get_x(msg);
debug_vect->y = mavlink_msg_debug_vect_get_y(msg);
debug_vect->z = mavlink_msg_debug_vect_get_z(msg);
#else
memcpy(debug_vect, _MAV_PAYLOAD(msg), 30);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_global_position.h
0,0 → 1,276
// MESSAGE GLOBAL_POSITION PACKING
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION 33
 
typedef struct __mavlink_global_position_t
{
uint64_t usec; ///< Timestamp (microseconds since unix epoch)
float lat; ///< Latitude, in degrees
float lon; ///< Longitude, in degrees
float alt; ///< Absolute altitude, in meters
float vx; ///< X Speed (in Latitude direction, positive: going north)
float vy; ///< Y Speed (in Longitude direction, positive: going east)
float vz; ///< Z Speed (in Altitude direction, positive: going up)
} mavlink_global_position_t;
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_LEN 32
#define MAVLINK_MSG_ID_33_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION { \
"GLOBAL_POSITION", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_position_t, usec) }, \
{ "lat", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_global_position_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_global_position_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_global_position_t, alt) }, \
{ "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_global_position_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_position_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_position_t, vz) }, \
} \
}
 
 
/**
* @brief Pack a global_position message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since unix epoch)
* @param lat Latitude, in degrees
* @param lon Longitude, in degrees
* @param alt Absolute altitude, in meters
* @param vx X Speed (in Latitude direction, positive: going north)
* @param vy Y Speed (in Longitude direction, positive: going east)
* @param vz Z Speed (in Altitude direction, positive: going up)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float lat, float lon, float alt, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, lat);
_mav_put_float(buf, 12, lon);
_mav_put_float(buf, 16, alt);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_global_position_t packet;
packet.usec = usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION;
return mavlink_finalize_message(msg, system_id, component_id, 32);
}
 
/**
* @brief Pack a global_position message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since unix epoch)
* @param lat Latitude, in degrees
* @param lon Longitude, in degrees
* @param alt Absolute altitude, in meters
* @param vx X Speed (in Latitude direction, positive: going north)
* @param vy Y Speed (in Longitude direction, positive: going east)
* @param vz Z Speed (in Altitude direction, positive: going up)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float lat,float lon,float alt,float vx,float vy,float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, lat);
_mav_put_float(buf, 12, lon);
_mav_put_float(buf, 16, alt);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_global_position_t packet;
packet.usec = usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32);
}
 
/**
* @brief Encode a global_position struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param global_position C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_global_position_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_t* global_position)
{
return mavlink_msg_global_position_pack(system_id, component_id, msg, global_position->usec, global_position->lat, global_position->lon, global_position->alt, global_position->vx, global_position->vy, global_position->vz);
}
 
/**
* @brief Send a global_position message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since unix epoch)
* @param lat Latitude, in degrees
* @param lon Longitude, in degrees
* @param alt Absolute altitude, in meters
* @param vx X Speed (in Latitude direction, positive: going north)
* @param vy Y Speed (in Longitude direction, positive: going east)
* @param vz Z Speed (in Altitude direction, positive: going up)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_global_position_send(mavlink_channel_t chan, uint64_t usec, float lat, float lon, float alt, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, lat);
_mav_put_float(buf, 12, lon);
_mav_put_float(buf, 16, alt);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION, buf, 32);
#else
mavlink_global_position_t packet;
packet.usec = usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION, (const char *)&packet, 32);
#endif
}
 
#endif
 
// MESSAGE GLOBAL_POSITION UNPACKING
 
 
/**
* @brief Get field usec from global_position message
*
* @return Timestamp (microseconds since unix epoch)
*/
static inline uint64_t mavlink_msg_global_position_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field lat from global_position message
*
* @return Latitude, in degrees
*/
static inline float mavlink_msg_global_position_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field lon from global_position message
*
* @return Longitude, in degrees
*/
static inline float mavlink_msg_global_position_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field alt from global_position message
*
* @return Absolute altitude, in meters
*/
static inline float mavlink_msg_global_position_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field vx from global_position message
*
* @return X Speed (in Latitude direction, positive: going north)
*/
static inline float mavlink_msg_global_position_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field vy from global_position message
*
* @return Y Speed (in Longitude direction, positive: going east)
*/
static inline float mavlink_msg_global_position_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field vz from global_position message
*
* @return Z Speed (in Altitude direction, positive: going up)
*/
static inline float mavlink_msg_global_position_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a global_position message into a struct
*
* @param msg The message to decode
* @param global_position C-struct to decode the message contents into
*/
static inline void mavlink_msg_global_position_decode(const mavlink_message_t* msg, mavlink_global_position_t* global_position)
{
#if MAVLINK_NEED_BYTE_SWAP
global_position->usec = mavlink_msg_global_position_get_usec(msg);
global_position->lat = mavlink_msg_global_position_get_lat(msg);
global_position->lon = mavlink_msg_global_position_get_lon(msg);
global_position->alt = mavlink_msg_global_position_get_alt(msg);
global_position->vx = mavlink_msg_global_position_get_vx(msg);
global_position->vy = mavlink_msg_global_position_get_vy(msg);
global_position->vz = mavlink_msg_global_position_get_vz(msg);
#else
memcpy(global_position, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_global_position_int.h
0,0 → 1,254
// MESSAGE GLOBAL_POSITION_INT PACKING
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT 73
 
typedef struct __mavlink_global_position_int_t
{
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
} mavlink_global_position_int_t;
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN 18
#define MAVLINK_MSG_ID_73_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT { \
"GLOBAL_POSITION_INT", \
6, \
{ { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_global_position_int_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_global_position_int_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_t, alt) }, \
{ "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_global_position_int_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_global_position_int_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_global_position_int_t, vz) }, \
} \
}
 
 
/**
* @brief Pack a global_position_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_int32_t(buf, 0, lat);
_mav_put_int32_t(buf, 4, lon);
_mav_put_int32_t(buf, 8, alt);
_mav_put_int16_t(buf, 12, vx);
_mav_put_int16_t(buf, 14, vy);
_mav_put_int16_t(buf, 16, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_global_position_int_t packet;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a global_position_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int32_t lat,int32_t lon,int32_t alt,int16_t vx,int16_t vy,int16_t vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_int32_t(buf, 0, lat);
_mav_put_int32_t(buf, 4, lon);
_mav_put_int32_t(buf, 8, alt);
_mav_put_int16_t(buf, 12, vx);
_mav_put_int16_t(buf, 14, vy);
_mav_put_int16_t(buf, 16, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_global_position_int_t packet;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a global_position_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param global_position_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_global_position_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_int_t* global_position_int)
{
return mavlink_msg_global_position_int_pack(system_id, component_id, msg, global_position_int->lat, global_position_int->lon, global_position_int->alt, global_position_int->vx, global_position_int->vy, global_position_int->vz);
}
 
/**
* @brief Send a global_position_int message
* @param chan MAVLink channel to send the message
*
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_global_position_int_send(mavlink_channel_t chan, int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_int32_t(buf, 0, lat);
_mav_put_int32_t(buf, 4, lon);
_mav_put_int32_t(buf, 8, alt);
_mav_put_int16_t(buf, 12, vx);
_mav_put_int16_t(buf, 14, vy);
_mav_put_int16_t(buf, 16, vz);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, buf, 18);
#else
mavlink_global_position_int_t packet;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE GLOBAL_POSITION_INT UNPACKING
 
 
/**
* @brief Get field lat from global_position_int message
*
* @return Latitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_global_position_int_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field lon from global_position_int message
*
* @return Longitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_global_position_int_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field alt from global_position_int message
*
* @return Altitude in meters, expressed as * 1000 (millimeters)
*/
static inline int32_t mavlink_msg_global_position_int_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field vx from global_position_int message
*
* @return Ground X Speed (Latitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field vy from global_position_int message
*
* @return Ground Y Speed (Longitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field vz from global_position_int message
*
* @return Ground Z Speed (Altitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Decode a global_position_int message into a struct
*
* @param msg The message to decode
* @param global_position_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_global_position_int_decode(const mavlink_message_t* msg, mavlink_global_position_int_t* global_position_int)
{
#if MAVLINK_NEED_BYTE_SWAP
global_position_int->lat = mavlink_msg_global_position_int_get_lat(msg);
global_position_int->lon = mavlink_msg_global_position_int_get_lon(msg);
global_position_int->alt = mavlink_msg_global_position_int_get_alt(msg);
global_position_int->vx = mavlink_msg_global_position_int_get_vx(msg);
global_position_int->vy = mavlink_msg_global_position_int_get_vy(msg);
global_position_int->vz = mavlink_msg_global_position_int_get_vz(msg);
#else
memcpy(global_position_int, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_gps_local_origin_set.h
0,0 → 1,188
// MESSAGE GPS_LOCAL_ORIGIN_SET PACKING
 
#define MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET 49
 
typedef struct __mavlink_gps_local_origin_set_t
{
int32_t latitude; ///< Latitude (WGS84), expressed as * 1E7
int32_t longitude; ///< Longitude (WGS84), expressed as * 1E7
int32_t altitude; ///< Altitude(WGS84), expressed as * 1000
} mavlink_gps_local_origin_set_t;
 
#define MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET_LEN 12
#define MAVLINK_MSG_ID_49_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_LOCAL_ORIGIN_SET { \
"GPS_LOCAL_ORIGIN_SET", \
3, \
{ { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_gps_local_origin_set_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_gps_local_origin_set_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_local_origin_set_t, altitude) }, \
} \
}
 
 
/**
* @brief Pack a gps_local_origin_set message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_local_origin_set_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_gps_local_origin_set_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET;
return mavlink_finalize_message(msg, system_id, component_id, 12);
}
 
/**
* @brief Pack a gps_local_origin_set message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_local_origin_set_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int32_t latitude,int32_t longitude,int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_gps_local_origin_set_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12);
}
 
/**
* @brief Encode a gps_local_origin_set struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_local_origin_set C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_local_origin_set_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_local_origin_set_t* gps_local_origin_set)
{
return mavlink_msg_gps_local_origin_set_pack(system_id, component_id, msg, gps_local_origin_set->latitude, gps_local_origin_set->longitude, gps_local_origin_set->altitude);
}
 
/**
* @brief Send a gps_local_origin_set message
* @param chan MAVLink channel to send the message
*
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_local_origin_set_send(mavlink_channel_t chan, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET, buf, 12);
#else
mavlink_gps_local_origin_set_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET, (const char *)&packet, 12);
#endif
}
 
#endif
 
// MESSAGE GPS_LOCAL_ORIGIN_SET UNPACKING
 
 
/**
* @brief Get field latitude from gps_local_origin_set message
*
* @return Latitude (WGS84), expressed as * 1E7
*/
static inline int32_t mavlink_msg_gps_local_origin_set_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field longitude from gps_local_origin_set message
*
* @return Longitude (WGS84), expressed as * 1E7
*/
static inline int32_t mavlink_msg_gps_local_origin_set_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field altitude from gps_local_origin_set message
*
* @return Altitude(WGS84), expressed as * 1000
*/
static inline int32_t mavlink_msg_gps_local_origin_set_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Decode a gps_local_origin_set message into a struct
*
* @param msg The message to decode
* @param gps_local_origin_set C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_local_origin_set_decode(const mavlink_message_t* msg, mavlink_gps_local_origin_set_t* gps_local_origin_set)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_local_origin_set->latitude = mavlink_msg_gps_local_origin_set_get_latitude(msg);
gps_local_origin_set->longitude = mavlink_msg_gps_local_origin_set_get_longitude(msg);
gps_local_origin_set->altitude = mavlink_msg_gps_local_origin_set_get_altitude(msg);
#else
memcpy(gps_local_origin_set, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_gps_raw.h
0,0 → 1,320
// MESSAGE GPS_RAW PACKING
 
#define MAVLINK_MSG_ID_GPS_RAW 32
 
typedef struct __mavlink_gps_raw_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
uint8_t fix_type; ///< 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
float lat; ///< Latitude in degrees
float lon; ///< Longitude in degrees
float alt; ///< Altitude in meters
float eph; ///< GPS HDOP
float epv; ///< GPS VDOP
float v; ///< GPS ground speed
float hdg; ///< Compass heading in degrees, 0..360 degrees
} mavlink_gps_raw_t;
 
#define MAVLINK_MSG_ID_GPS_RAW_LEN 37
#define MAVLINK_MSG_ID_32_LEN 37
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_RAW { \
"GPS_RAW", \
9, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_raw_t, usec) }, \
{ "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_gps_raw_t, fix_type) }, \
{ "lat", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_gps_raw_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_FLOAT, 0, 13, offsetof(mavlink_gps_raw_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 17, offsetof(mavlink_gps_raw_t, alt) }, \
{ "eph", NULL, MAVLINK_TYPE_FLOAT, 0, 21, offsetof(mavlink_gps_raw_t, eph) }, \
{ "epv", NULL, MAVLINK_TYPE_FLOAT, 0, 25, offsetof(mavlink_gps_raw_t, epv) }, \
{ "v", NULL, MAVLINK_TYPE_FLOAT, 0, 29, offsetof(mavlink_gps_raw_t, v) }, \
{ "hdg", NULL, MAVLINK_TYPE_FLOAT, 0, 33, offsetof(mavlink_gps_raw_t, hdg) }, \
} \
}
 
 
/**
* @brief Pack a gps_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in degrees
* @param lon Longitude in degrees
* @param alt Altitude in meters
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed
* @param hdg Compass heading in degrees, 0..360 degrees
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, uint8_t fix_type, float lat, float lon, float alt, float eph, float epv, float v, float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_float(buf, 9, lat);
_mav_put_float(buf, 13, lon);
_mav_put_float(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_gps_raw_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 37);
}
 
/**
* @brief Pack a gps_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in degrees
* @param lon Longitude in degrees
* @param alt Altitude in meters
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed
* @param hdg Compass heading in degrees, 0..360 degrees
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,uint8_t fix_type,float lat,float lon,float alt,float eph,float epv,float v,float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_float(buf, 9, lat);
_mav_put_float(buf, 13, lon);
_mav_put_float(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_gps_raw_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 37);
}
 
/**
* @brief Encode a gps_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_raw_t* gps_raw)
{
return mavlink_msg_gps_raw_pack(system_id, component_id, msg, gps_raw->usec, gps_raw->fix_type, gps_raw->lat, gps_raw->lon, gps_raw->alt, gps_raw->eph, gps_raw->epv, gps_raw->v, gps_raw->hdg);
}
 
/**
* @brief Send a gps_raw message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in degrees
* @param lon Longitude in degrees
* @param alt Altitude in meters
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed
* @param hdg Compass heading in degrees, 0..360 degrees
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_raw_send(mavlink_channel_t chan, uint64_t usec, uint8_t fix_type, float lat, float lon, float alt, float eph, float epv, float v, float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_float(buf, 9, lat);
_mav_put_float(buf, 13, lon);
_mav_put_float(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW, buf, 37);
#else
mavlink_gps_raw_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW, (const char *)&packet, 37);
#endif
}
 
#endif
 
// MESSAGE GPS_RAW UNPACKING
 
 
/**
* @brief Get field usec from gps_raw message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_gps_raw_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field fix_type from gps_raw message
*
* @return 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
*/
static inline uint8_t mavlink_msg_gps_raw_get_fix_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field lat from gps_raw message
*
* @return Latitude in degrees
*/
static inline float mavlink_msg_gps_raw_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 9);
}
 
/**
* @brief Get field lon from gps_raw message
*
* @return Longitude in degrees
*/
static inline float mavlink_msg_gps_raw_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 13);
}
 
/**
* @brief Get field alt from gps_raw message
*
* @return Altitude in meters
*/
static inline float mavlink_msg_gps_raw_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 17);
}
 
/**
* @brief Get field eph from gps_raw message
*
* @return GPS HDOP
*/
static inline float mavlink_msg_gps_raw_get_eph(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 21);
}
 
/**
* @brief Get field epv from gps_raw message
*
* @return GPS VDOP
*/
static inline float mavlink_msg_gps_raw_get_epv(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 25);
}
 
/**
* @brief Get field v from gps_raw message
*
* @return GPS ground speed
*/
static inline float mavlink_msg_gps_raw_get_v(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 29);
}
 
/**
* @brief Get field hdg from gps_raw message
*
* @return Compass heading in degrees, 0..360 degrees
*/
static inline float mavlink_msg_gps_raw_get_hdg(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 33);
}
 
/**
* @brief Decode a gps_raw message into a struct
*
* @param msg The message to decode
* @param gps_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_raw_decode(const mavlink_message_t* msg, mavlink_gps_raw_t* gps_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_raw->usec = mavlink_msg_gps_raw_get_usec(msg);
gps_raw->fix_type = mavlink_msg_gps_raw_get_fix_type(msg);
gps_raw->lat = mavlink_msg_gps_raw_get_lat(msg);
gps_raw->lon = mavlink_msg_gps_raw_get_lon(msg);
gps_raw->alt = mavlink_msg_gps_raw_get_alt(msg);
gps_raw->eph = mavlink_msg_gps_raw_get_eph(msg);
gps_raw->epv = mavlink_msg_gps_raw_get_epv(msg);
gps_raw->v = mavlink_msg_gps_raw_get_v(msg);
gps_raw->hdg = mavlink_msg_gps_raw_get_hdg(msg);
#else
memcpy(gps_raw, _MAV_PAYLOAD(msg), 37);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_gps_raw_int.h
0,0 → 1,320
// MESSAGE GPS_RAW_INT PACKING
 
#define MAVLINK_MSG_ID_GPS_RAW_INT 25
 
typedef struct __mavlink_gps_raw_int_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
uint8_t fix_type; ///< 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
int32_t lat; ///< Latitude in 1E7 degrees
int32_t lon; ///< Longitude in 1E7 degrees
int32_t alt; ///< Altitude in 1E3 meters (millimeters)
float eph; ///< GPS HDOP
float epv; ///< GPS VDOP
float v; ///< GPS ground speed (m/s)
float hdg; ///< Compass heading in degrees, 0..360 degrees
} mavlink_gps_raw_int_t;
 
#define MAVLINK_MSG_ID_GPS_RAW_INT_LEN 37
#define MAVLINK_MSG_ID_25_LEN 37
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_RAW_INT { \
"GPS_RAW_INT", \
9, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_raw_int_t, usec) }, \
{ "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_gps_raw_int_t, fix_type) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 9, offsetof(mavlink_gps_raw_int_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 13, offsetof(mavlink_gps_raw_int_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 17, offsetof(mavlink_gps_raw_int_t, alt) }, \
{ "eph", NULL, MAVLINK_TYPE_FLOAT, 0, 21, offsetof(mavlink_gps_raw_int_t, eph) }, \
{ "epv", NULL, MAVLINK_TYPE_FLOAT, 0, 25, offsetof(mavlink_gps_raw_int_t, epv) }, \
{ "v", NULL, MAVLINK_TYPE_FLOAT, 0, 29, offsetof(mavlink_gps_raw_int_t, v) }, \
{ "hdg", NULL, MAVLINK_TYPE_FLOAT, 0, 33, offsetof(mavlink_gps_raw_int_t, hdg) }, \
} \
}
 
 
/**
* @brief Pack a gps_raw_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters)
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed (m/s)
* @param hdg Compass heading in degrees, 0..360 degrees
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, float eph, float epv, float v, float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_int32_t(buf, 9, lat);
_mav_put_int32_t(buf, 13, lon);
_mav_put_int32_t(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_gps_raw_int_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
return mavlink_finalize_message(msg, system_id, component_id, 37);
}
 
/**
* @brief Pack a gps_raw_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters)
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed (m/s)
* @param hdg Compass heading in degrees, 0..360 degrees
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,float eph,float epv,float v,float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_int32_t(buf, 9, lat);
_mav_put_int32_t(buf, 13, lon);
_mav_put_int32_t(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_gps_raw_int_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 37);
}
 
/**
* @brief Encode a gps_raw_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_raw_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_raw_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_raw_int_t* gps_raw_int)
{
return mavlink_msg_gps_raw_int_pack(system_id, component_id, msg, gps_raw_int->usec, gps_raw_int->fix_type, gps_raw_int->lat, gps_raw_int->lon, gps_raw_int->alt, gps_raw_int->eph, gps_raw_int->epv, gps_raw_int->v, gps_raw_int->hdg);
}
 
/**
* @brief Send a gps_raw_int message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters)
* @param eph GPS HDOP
* @param epv GPS VDOP
* @param v GPS ground speed (m/s)
* @param hdg Compass heading in degrees, 0..360 degrees
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_raw_int_send(mavlink_channel_t chan, uint64_t usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, float eph, float epv, float v, float hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_uint8_t(buf, 8, fix_type);
_mav_put_int32_t(buf, 9, lat);
_mav_put_int32_t(buf, 13, lon);
_mav_put_int32_t(buf, 17, alt);
_mav_put_float(buf, 21, eph);
_mav_put_float(buf, 25, epv);
_mav_put_float(buf, 29, v);
_mav_put_float(buf, 33, hdg);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, buf, 37);
#else
mavlink_gps_raw_int_t packet;
packet.usec = usec;
packet.fix_type = fix_type;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.v = v;
packet.hdg = hdg;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, (const char *)&packet, 37);
#endif
}
 
#endif
 
// MESSAGE GPS_RAW_INT UNPACKING
 
 
/**
* @brief Get field usec from gps_raw_int message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_gps_raw_int_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field fix_type from gps_raw_int message
*
* @return 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
*/
static inline uint8_t mavlink_msg_gps_raw_int_get_fix_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field lat from gps_raw_int message
*
* @return Latitude in 1E7 degrees
*/
static inline int32_t mavlink_msg_gps_raw_int_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 9);
}
 
/**
* @brief Get field lon from gps_raw_int message
*
* @return Longitude in 1E7 degrees
*/
static inline int32_t mavlink_msg_gps_raw_int_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 13);
}
 
/**
* @brief Get field alt from gps_raw_int message
*
* @return Altitude in 1E3 meters (millimeters)
*/
static inline int32_t mavlink_msg_gps_raw_int_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 17);
}
 
/**
* @brief Get field eph from gps_raw_int message
*
* @return GPS HDOP
*/
static inline float mavlink_msg_gps_raw_int_get_eph(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 21);
}
 
/**
* @brief Get field epv from gps_raw_int message
*
* @return GPS VDOP
*/
static inline float mavlink_msg_gps_raw_int_get_epv(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 25);
}
 
/**
* @brief Get field v from gps_raw_int message
*
* @return GPS ground speed (m/s)
*/
static inline float mavlink_msg_gps_raw_int_get_v(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 29);
}
 
/**
* @brief Get field hdg from gps_raw_int message
*
* @return Compass heading in degrees, 0..360 degrees
*/
static inline float mavlink_msg_gps_raw_int_get_hdg(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 33);
}
 
/**
* @brief Decode a gps_raw_int message into a struct
*
* @param msg The message to decode
* @param gps_raw_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_raw_int_decode(const mavlink_message_t* msg, mavlink_gps_raw_int_t* gps_raw_int)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_raw_int->usec = mavlink_msg_gps_raw_int_get_usec(msg);
gps_raw_int->fix_type = mavlink_msg_gps_raw_int_get_fix_type(msg);
gps_raw_int->lat = mavlink_msg_gps_raw_int_get_lat(msg);
gps_raw_int->lon = mavlink_msg_gps_raw_int_get_lon(msg);
gps_raw_int->alt = mavlink_msg_gps_raw_int_get_alt(msg);
gps_raw_int->eph = mavlink_msg_gps_raw_int_get_eph(msg);
gps_raw_int->epv = mavlink_msg_gps_raw_int_get_epv(msg);
gps_raw_int->v = mavlink_msg_gps_raw_int_get_v(msg);
gps_raw_int->hdg = mavlink_msg_gps_raw_int_get_hdg(msg);
#else
memcpy(gps_raw_int, _MAV_PAYLOAD(msg), 37);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_gps_set_global_origin.h
0,0 → 1,232
// MESSAGE GPS_SET_GLOBAL_ORIGIN PACKING
 
#define MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN 48
 
typedef struct __mavlink_gps_set_global_origin_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int32_t latitude; ///< global position * 1E7
int32_t longitude; ///< global position * 1E7
int32_t altitude; ///< global position * 1000
} mavlink_gps_set_global_origin_t;
 
#define MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN_LEN 14
#define MAVLINK_MSG_ID_48_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_SET_GLOBAL_ORIGIN { \
"GPS_SET_GLOBAL_ORIGIN", \
5, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_set_global_origin_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_gps_set_global_origin_t, target_component) }, \
{ "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 2, offsetof(mavlink_gps_set_global_origin_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 6, offsetof(mavlink_gps_set_global_origin_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 10, offsetof(mavlink_gps_set_global_origin_t, altitude) }, \
} \
}
 
 
/**
* @brief Pack a gps_set_global_origin message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_set_global_origin_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, latitude);
_mav_put_int32_t(buf, 6, longitude);
_mav_put_int32_t(buf, 10, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_gps_set_global_origin_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN;
return mavlink_finalize_message(msg, system_id, component_id, 14);
}
 
/**
* @brief Pack a gps_set_global_origin message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_set_global_origin_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int32_t latitude,int32_t longitude,int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, latitude);
_mav_put_int32_t(buf, 6, longitude);
_mav_put_int32_t(buf, 10, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_gps_set_global_origin_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14);
}
 
/**
* @brief Encode a gps_set_global_origin struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_set_global_origin C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_set_global_origin_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_set_global_origin_t* gps_set_global_origin)
{
return mavlink_msg_gps_set_global_origin_pack(system_id, component_id, msg, gps_set_global_origin->target_system, gps_set_global_origin->target_component, gps_set_global_origin->latitude, gps_set_global_origin->longitude, gps_set_global_origin->altitude);
}
 
/**
* @brief Send a gps_set_global_origin message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_set_global_origin_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int32_t(buf, 2, latitude);
_mav_put_int32_t(buf, 6, longitude);
_mav_put_int32_t(buf, 10, altitude);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN, buf, 14);
#else
mavlink_gps_set_global_origin_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN, (const char *)&packet, 14);
#endif
}
 
#endif
 
// MESSAGE GPS_SET_GLOBAL_ORIGIN UNPACKING
 
 
/**
* @brief Get field target_system from gps_set_global_origin message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_gps_set_global_origin_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from gps_set_global_origin message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_gps_set_global_origin_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field latitude from gps_set_global_origin message
*
* @return global position * 1E7
*/
static inline int32_t mavlink_msg_gps_set_global_origin_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 2);
}
 
/**
* @brief Get field longitude from gps_set_global_origin message
*
* @return global position * 1E7
*/
static inline int32_t mavlink_msg_gps_set_global_origin_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 6);
}
 
/**
* @brief Get field altitude from gps_set_global_origin message
*
* @return global position * 1000
*/
static inline int32_t mavlink_msg_gps_set_global_origin_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 10);
}
 
/**
* @brief Decode a gps_set_global_origin message into a struct
*
* @param msg The message to decode
* @param gps_set_global_origin C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_set_global_origin_decode(const mavlink_message_t* msg, mavlink_gps_set_global_origin_t* gps_set_global_origin)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_set_global_origin->target_system = mavlink_msg_gps_set_global_origin_get_target_system(msg);
gps_set_global_origin->target_component = mavlink_msg_gps_set_global_origin_get_target_component(msg);
gps_set_global_origin->latitude = mavlink_msg_gps_set_global_origin_get_latitude(msg);
gps_set_global_origin->longitude = mavlink_msg_gps_set_global_origin_get_longitude(msg);
gps_set_global_origin->altitude = mavlink_msg_gps_set_global_origin_get_altitude(msg);
#else
memcpy(gps_set_global_origin, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_gps_status.h
0,0 → 1,252
// MESSAGE GPS_STATUS PACKING
 
#define MAVLINK_MSG_ID_GPS_STATUS 27
 
typedef struct __mavlink_gps_status_t
{
uint8_t satellites_visible; ///< Number of satellites visible
int8_t satellite_prn[20]; ///< Global satellite ID
int8_t satellite_used[20]; ///< 0: Satellite not used, 1: used for localization
int8_t satellite_elevation[20]; ///< Elevation (0: right on top of receiver, 90: on the horizon) of satellite
int8_t satellite_azimuth[20]; ///< Direction of satellite, 0: 0 deg, 255: 360 deg.
int8_t satellite_snr[20]; ///< Signal to noise ratio of satellite
} mavlink_gps_status_t;
 
#define MAVLINK_MSG_ID_GPS_STATUS_LEN 101
#define MAVLINK_MSG_ID_27_LEN 101
 
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_PRN_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_USED_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_ELEVATION_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_AZIMUTH_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_SNR_LEN 20
 
#define MAVLINK_MESSAGE_INFO_GPS_STATUS { \
"GPS_STATUS", \
6, \
{ { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_status_t, satellites_visible) }, \
{ "satellite_prn", NULL, MAVLINK_TYPE_INT8_T, 20, 1, offsetof(mavlink_gps_status_t, satellite_prn) }, \
{ "satellite_used", NULL, MAVLINK_TYPE_INT8_T, 20, 21, offsetof(mavlink_gps_status_t, satellite_used) }, \
{ "satellite_elevation", NULL, MAVLINK_TYPE_INT8_T, 20, 41, offsetof(mavlink_gps_status_t, satellite_elevation) }, \
{ "satellite_azimuth", NULL, MAVLINK_TYPE_INT8_T, 20, 61, offsetof(mavlink_gps_status_t, satellite_azimuth) }, \
{ "satellite_snr", NULL, MAVLINK_TYPE_INT8_T, 20, 81, offsetof(mavlink_gps_status_t, satellite_snr) }, \
} \
}
 
 
/**
* @brief Pack a gps_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t satellites_visible, const int8_t *satellite_prn, const int8_t *satellite_used, const int8_t *satellite_elevation, const int8_t *satellite_azimuth, const int8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_int8_t_array(buf, 1, satellite_prn, 20);
_mav_put_int8_t_array(buf, 21, satellite_used, 20);
_mav_put_int8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_int8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_int8_t_array(buf, 81, satellite_snr, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 101);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(int8_t)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 101);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 101);
}
 
/**
* @brief Pack a gps_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t satellites_visible,const int8_t *satellite_prn,const int8_t *satellite_used,const int8_t *satellite_elevation,const int8_t *satellite_azimuth,const int8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_int8_t_array(buf, 1, satellite_prn, 20);
_mav_put_int8_t_array(buf, 21, satellite_used, 20);
_mav_put_int8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_int8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_int8_t_array(buf, 81, satellite_snr, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 101);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(int8_t)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 101);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 101);
}
 
/**
* @brief Encode a gps_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_status_t* gps_status)
{
return mavlink_msg_gps_status_pack(system_id, component_id, msg, gps_status->satellites_visible, gps_status->satellite_prn, gps_status->satellite_used, gps_status->satellite_elevation, gps_status->satellite_azimuth, gps_status->satellite_snr);
}
 
/**
* @brief Send a gps_status message
* @param chan MAVLink channel to send the message
*
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_status_send(mavlink_channel_t chan, uint8_t satellites_visible, const int8_t *satellite_prn, const int8_t *satellite_used, const int8_t *satellite_elevation, const int8_t *satellite_azimuth, const int8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_int8_t_array(buf, 1, satellite_prn, 20);
_mav_put_int8_t_array(buf, 21, satellite_used, 20);
_mav_put_int8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_int8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_int8_t_array(buf, 81, satellite_snr, 20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, buf, 101);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(int8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(int8_t)*20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, (const char *)&packet, 101);
#endif
}
 
#endif
 
// MESSAGE GPS_STATUS UNPACKING
 
 
/**
* @brief Get field satellites_visible from gps_status message
*
* @return Number of satellites visible
*/
static inline uint8_t mavlink_msg_gps_status_get_satellites_visible(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field satellite_prn from gps_status message
*
* @return Global satellite ID
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_prn(const mavlink_message_t* msg, int8_t *satellite_prn)
{
return _MAV_RETURN_int8_t_array(msg, satellite_prn, 20, 1);
}
 
/**
* @brief Get field satellite_used from gps_status message
*
* @return 0: Satellite not used, 1: used for localization
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_used(const mavlink_message_t* msg, int8_t *satellite_used)
{
return _MAV_RETURN_int8_t_array(msg, satellite_used, 20, 21);
}
 
/**
* @brief Get field satellite_elevation from gps_status message
*
* @return Elevation (0: right on top of receiver, 90: on the horizon) of satellite
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_elevation(const mavlink_message_t* msg, int8_t *satellite_elevation)
{
return _MAV_RETURN_int8_t_array(msg, satellite_elevation, 20, 41);
}
 
/**
* @brief Get field satellite_azimuth from gps_status message
*
* @return Direction of satellite, 0: 0 deg, 255: 360 deg.
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_azimuth(const mavlink_message_t* msg, int8_t *satellite_azimuth)
{
return _MAV_RETURN_int8_t_array(msg, satellite_azimuth, 20, 61);
}
 
/**
* @brief Get field satellite_snr from gps_status message
*
* @return Signal to noise ratio of satellite
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_snr(const mavlink_message_t* msg, int8_t *satellite_snr)
{
return _MAV_RETURN_int8_t_array(msg, satellite_snr, 20, 81);
}
 
/**
* @brief Decode a gps_status message into a struct
*
* @param msg The message to decode
* @param gps_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_status_decode(const mavlink_message_t* msg, mavlink_gps_status_t* gps_status)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_status->satellites_visible = mavlink_msg_gps_status_get_satellites_visible(msg);
mavlink_msg_gps_status_get_satellite_prn(msg, gps_status->satellite_prn);
mavlink_msg_gps_status_get_satellite_used(msg, gps_status->satellite_used);
mavlink_msg_gps_status_get_satellite_elevation(msg, gps_status->satellite_elevation);
mavlink_msg_gps_status_get_satellite_azimuth(msg, gps_status->satellite_azimuth);
mavlink_msg_gps_status_get_satellite_snr(msg, gps_status->satellite_snr);
#else
memcpy(gps_status, _MAV_PAYLOAD(msg), 101);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_heartbeat.h
0,0 → 1,185
// MESSAGE HEARTBEAT PACKING
 
#define MAVLINK_MSG_ID_HEARTBEAT 0
 
typedef struct __mavlink_heartbeat_t
{
uint8_t type; ///< Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
uint8_t autopilot; ///< Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM
uint8_t mavlink_version; ///< MAVLink version
} mavlink_heartbeat_t;
 
#define MAVLINK_MSG_ID_HEARTBEAT_LEN 3
#define MAVLINK_MSG_ID_0_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_HEARTBEAT { \
"HEARTBEAT", \
3, \
{ { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_heartbeat_t, type) }, \
{ "autopilot", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_heartbeat_t, autopilot) }, \
{ "mavlink_version", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_heartbeat_t, mavlink_version) }, \
} \
}
 
 
/**
* @brief Pack a heartbeat message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_heartbeat_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t type, uint8_t autopilot)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, type);
_mav_put_uint8_t(buf, 1, autopilot);
_mav_put_uint8_t(buf, 2, 2);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_heartbeat_t packet;
packet.type = type;
packet.autopilot = autopilot;
packet.mavlink_version = 2;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HEARTBEAT;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a heartbeat message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_heartbeat_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t type,uint8_t autopilot)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, type);
_mav_put_uint8_t(buf, 1, autopilot);
_mav_put_uint8_t(buf, 2, 2);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_heartbeat_t packet;
packet.type = type;
packet.autopilot = autopilot;
packet.mavlink_version = 2;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HEARTBEAT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a heartbeat struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param heartbeat C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_heartbeat_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_heartbeat_t* heartbeat)
{
return mavlink_msg_heartbeat_pack(system_id, component_id, msg, heartbeat->type, heartbeat->autopilot);
}
 
/**
* @brief Send a heartbeat message
* @param chan MAVLink channel to send the message
*
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_heartbeat_send(mavlink_channel_t chan, uint8_t type, uint8_t autopilot)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, type);
_mav_put_uint8_t(buf, 1, autopilot);
_mav_put_uint8_t(buf, 2, 2);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HEARTBEAT, buf, 3);
#else
mavlink_heartbeat_t packet;
packet.type = type;
packet.autopilot = autopilot;
packet.mavlink_version = 2;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HEARTBEAT, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE HEARTBEAT UNPACKING
 
 
/**
* @brief Get field type from heartbeat message
*
* @return Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
*/
static inline uint8_t mavlink_msg_heartbeat_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field autopilot from heartbeat message
*
* @return Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM
*/
static inline uint8_t mavlink_msg_heartbeat_get_autopilot(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mavlink_version from heartbeat message
*
* @return MAVLink version
*/
static inline uint8_t mavlink_msg_heartbeat_get_mavlink_version(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a heartbeat message into a struct
*
* @param msg The message to decode
* @param heartbeat C-struct to decode the message contents into
*/
static inline void mavlink_msg_heartbeat_decode(const mavlink_message_t* msg, mavlink_heartbeat_t* heartbeat)
{
#if MAVLINK_NEED_BYTE_SWAP
heartbeat->type = mavlink_msg_heartbeat_get_type(msg);
heartbeat->autopilot = mavlink_msg_heartbeat_get_autopilot(msg);
heartbeat->mavlink_version = mavlink_msg_heartbeat_get_mavlink_version(msg);
#else
memcpy(heartbeat, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_hil_controls.h
0,0 → 1,276
// MESSAGE HIL_CONTROLS PACKING
 
#define MAVLINK_MSG_ID_HIL_CONTROLS 68
 
typedef struct __mavlink_hil_controls_t
{
uint64_t time_us; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float roll_ailerons; ///< Control output -3 .. 1
float pitch_elevator; ///< Control output -1 .. 1
float yaw_rudder; ///< Control output -1 .. 1
float throttle; ///< Throttle 0 .. 1
uint8_t mode; ///< System mode (MAV_MODE)
uint8_t nav_mode; ///< Navigation mode (MAV_NAV_MODE)
} mavlink_hil_controls_t;
 
#define MAVLINK_MSG_ID_HIL_CONTROLS_LEN 26
#define MAVLINK_MSG_ID_68_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_HIL_CONTROLS { \
"HIL_CONTROLS", \
7, \
{ { "time_us", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_controls_t, time_us) }, \
{ "roll_ailerons", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_controls_t, roll_ailerons) }, \
{ "pitch_elevator", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_controls_t, pitch_elevator) }, \
{ "yaw_rudder", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_controls_t, yaw_rudder) }, \
{ "throttle", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_controls_t, throttle) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_hil_controls_t, mode) }, \
{ "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 25, offsetof(mavlink_hil_controls_t, nav_mode) }, \
} \
}
 
 
/**
* @brief Pack a hil_controls message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_us Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -3 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_controls_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_us, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, uint8_t mode, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_uint8_t(buf, 24, mode);
_mav_put_uint8_t(buf, 25, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_hil_controls_t packet;
packet.time_us = time_us;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
return mavlink_finalize_message(msg, system_id, component_id, 26);
}
 
/**
* @brief Pack a hil_controls message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_us Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -3 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_controls_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_us,float roll_ailerons,float pitch_elevator,float yaw_rudder,float throttle,uint8_t mode,uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_uint8_t(buf, 24, mode);
_mav_put_uint8_t(buf, 25, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_hil_controls_t packet;
packet.time_us = time_us;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26);
}
 
/**
* @brief Encode a hil_controls struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hil_controls C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hil_controls_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_controls_t* hil_controls)
{
return mavlink_msg_hil_controls_pack(system_id, component_id, msg, hil_controls->time_us, hil_controls->roll_ailerons, hil_controls->pitch_elevator, hil_controls->yaw_rudder, hil_controls->throttle, hil_controls->mode, hil_controls->nav_mode);
}
 
/**
* @brief Send a hil_controls message
* @param chan MAVLink channel to send the message
*
* @param time_us Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -3 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hil_controls_send(mavlink_channel_t chan, uint64_t time_us, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, uint8_t mode, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_uint8_t(buf, 24, mode);
_mav_put_uint8_t(buf, 25, nav_mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, buf, 26);
#else
mavlink_hil_controls_t packet;
packet.time_us = time_us;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, (const char *)&packet, 26);
#endif
}
 
#endif
 
// MESSAGE HIL_CONTROLS UNPACKING
 
 
/**
* @brief Get field time_us from hil_controls message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_hil_controls_get_time_us(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll_ailerons from hil_controls message
*
* @return Control output -3 .. 1
*/
static inline float mavlink_msg_hil_controls_get_roll_ailerons(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch_elevator from hil_controls message
*
* @return Control output -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_pitch_elevator(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw_rudder from hil_controls message
*
* @return Control output -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_yaw_rudder(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field throttle from hil_controls message
*
* @return Throttle 0 .. 1
*/
static inline float mavlink_msg_hil_controls_get_throttle(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field mode from hil_controls message
*
* @return System mode (MAV_MODE)
*/
static inline uint8_t mavlink_msg_hil_controls_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 24);
}
 
/**
* @brief Get field nav_mode from hil_controls message
*
* @return Navigation mode (MAV_NAV_MODE)
*/
static inline uint8_t mavlink_msg_hil_controls_get_nav_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 25);
}
 
/**
* @brief Decode a hil_controls message into a struct
*
* @param msg The message to decode
* @param hil_controls C-struct to decode the message contents into
*/
static inline void mavlink_msg_hil_controls_decode(const mavlink_message_t* msg, mavlink_hil_controls_t* hil_controls)
{
#if MAVLINK_NEED_BYTE_SWAP
hil_controls->time_us = mavlink_msg_hil_controls_get_time_us(msg);
hil_controls->roll_ailerons = mavlink_msg_hil_controls_get_roll_ailerons(msg);
hil_controls->pitch_elevator = mavlink_msg_hil_controls_get_pitch_elevator(msg);
hil_controls->yaw_rudder = mavlink_msg_hil_controls_get_yaw_rudder(msg);
hil_controls->throttle = mavlink_msg_hil_controls_get_throttle(msg);
hil_controls->mode = mavlink_msg_hil_controls_get_mode(msg);
hil_controls->nav_mode = mavlink_msg_hil_controls_get_nav_mode(msg);
#else
memcpy(hil_controls, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_hil_state.h
0,0 → 1,474
// MESSAGE HIL_STATE PACKING
 
#define MAVLINK_MSG_ID_HIL_STATE 67
 
typedef struct __mavlink_hil_state_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float rollspeed; ///< Roll angular speed (rad/s)
float pitchspeed; ///< Pitch angular speed (rad/s)
float yawspeed; ///< Yaw angular speed (rad/s)
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
int16_t xacc; ///< X acceleration (mg)
int16_t yacc; ///< Y acceleration (mg)
int16_t zacc; ///< Z acceleration (mg)
} mavlink_hil_state_t;
 
#define MAVLINK_MSG_ID_HIL_STATE_LEN 56
#define MAVLINK_MSG_ID_67_LEN 56
 
 
 
#define MAVLINK_MESSAGE_INFO_HIL_STATE { \
"HIL_STATE", \
16, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_state_t, usec) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_state_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_state_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_state_t, yaw) }, \
{ "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_state_t, rollspeed) }, \
{ "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_state_t, pitchspeed) }, \
{ "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_state_t, yawspeed) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 32, offsetof(mavlink_hil_state_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 36, offsetof(mavlink_hil_state_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 40, offsetof(mavlink_hil_state_t, alt) }, \
{ "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 44, offsetof(mavlink_hil_state_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 46, offsetof(mavlink_hil_state_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 48, offsetof(mavlink_hil_state_t, vz) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 50, offsetof(mavlink_hil_state_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 52, offsetof(mavlink_hil_state_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 54, offsetof(mavlink_hil_state_t, zacc) }, \
} \
}
 
 
/**
* @brief Pack a hil_state message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_state_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed, int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz, int16_t xacc, int16_t yacc, int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 56);
#else
mavlink_hil_state_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 56);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_STATE;
return mavlink_finalize_message(msg, system_id, component_id, 56);
}
 
/**
* @brief Pack a hil_state message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_state_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float roll,float pitch,float yaw,float rollspeed,float pitchspeed,float yawspeed,int32_t lat,int32_t lon,int32_t alt,int16_t vx,int16_t vy,int16_t vz,int16_t xacc,int16_t yacc,int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 56);
#else
mavlink_hil_state_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 56);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_STATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 56);
}
 
/**
* @brief Encode a hil_state struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hil_state C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hil_state_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_state_t* hil_state)
{
return mavlink_msg_hil_state_pack(system_id, component_id, msg, hil_state->usec, hil_state->roll, hil_state->pitch, hil_state->yaw, hil_state->rollspeed, hil_state->pitchspeed, hil_state->yawspeed, hil_state->lat, hil_state->lon, hil_state->alt, hil_state->vx, hil_state->vy, hil_state->vz, hil_state->xacc, hil_state->yacc, hil_state->zacc);
}
 
/**
* @brief Send a hil_state message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hil_state_send(mavlink_channel_t chan, uint64_t usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed, int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz, int16_t xacc, int16_t yacc, int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_STATE, buf, 56);
#else
mavlink_hil_state_t packet;
packet.usec = usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_STATE, (const char *)&packet, 56);
#endif
}
 
#endif
 
// MESSAGE HIL_STATE UNPACKING
 
 
/**
* @brief Get field usec from hil_state message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_hil_state_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll from hil_state message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_hil_state_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch from hil_state message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_hil_state_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw from hil_state message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_hil_state_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field rollspeed from hil_state message
*
* @return Roll angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_rollspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitchspeed from hil_state message
*
* @return Pitch angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_pitchspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yawspeed from hil_state message
*
* @return Yaw angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_yawspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field lat from hil_state message
*
* @return Latitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_hil_state_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 32);
}
 
/**
* @brief Get field lon from hil_state message
*
* @return Longitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_hil_state_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 36);
}
 
/**
* @brief Get field alt from hil_state message
*
* @return Altitude in meters, expressed as * 1000 (millimeters)
*/
static inline int32_t mavlink_msg_hil_state_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 40);
}
 
/**
* @brief Get field vx from hil_state message
*
* @return Ground X Speed (Latitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 44);
}
 
/**
* @brief Get field vy from hil_state message
*
* @return Ground Y Speed (Longitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 46);
}
 
/**
* @brief Get field vz from hil_state message
*
* @return Ground Z Speed (Altitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 48);
}
 
/**
* @brief Get field xacc from hil_state message
*
* @return X acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 50);
}
 
/**
* @brief Get field yacc from hil_state message
*
* @return Y acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 52);
}
 
/**
* @brief Get field zacc from hil_state message
*
* @return Z acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 54);
}
 
/**
* @brief Decode a hil_state message into a struct
*
* @param msg The message to decode
* @param hil_state C-struct to decode the message contents into
*/
static inline void mavlink_msg_hil_state_decode(const mavlink_message_t* msg, mavlink_hil_state_t* hil_state)
{
#if MAVLINK_NEED_BYTE_SWAP
hil_state->usec = mavlink_msg_hil_state_get_usec(msg);
hil_state->roll = mavlink_msg_hil_state_get_roll(msg);
hil_state->pitch = mavlink_msg_hil_state_get_pitch(msg);
hil_state->yaw = mavlink_msg_hil_state_get_yaw(msg);
hil_state->rollspeed = mavlink_msg_hil_state_get_rollspeed(msg);
hil_state->pitchspeed = mavlink_msg_hil_state_get_pitchspeed(msg);
hil_state->yawspeed = mavlink_msg_hil_state_get_yawspeed(msg);
hil_state->lat = mavlink_msg_hil_state_get_lat(msg);
hil_state->lon = mavlink_msg_hil_state_get_lon(msg);
hil_state->alt = mavlink_msg_hil_state_get_alt(msg);
hil_state->vx = mavlink_msg_hil_state_get_vx(msg);
hil_state->vy = mavlink_msg_hil_state_get_vy(msg);
hil_state->vz = mavlink_msg_hil_state_get_vz(msg);
hil_state->xacc = mavlink_msg_hil_state_get_xacc(msg);
hil_state->yacc = mavlink_msg_hil_state_get_yacc(msg);
hil_state->zacc = mavlink_msg_hil_state_get_zacc(msg);
#else
memcpy(hil_state, _MAV_PAYLOAD(msg), 56);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_local_position.h
0,0 → 1,276
// MESSAGE LOCAL_POSITION PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION 31
 
typedef struct __mavlink_local_position_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float x; ///< X Position
float y; ///< Y Position
float z; ///< Z Position
float vx; ///< X Speed
float vy; ///< Y Speed
float vz; ///< Z Speed
} mavlink_local_position_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_LEN 32
#define MAVLINK_MSG_ID_31_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION { \
"LOCAL_POSITION", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_local_position_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_local_position_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_local_position_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_local_position_t, z) }, \
{ "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_local_position_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_local_position_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_local_position_t, vz) }, \
} \
}
 
 
/**
* @brief Pack a local_position message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float x, float y, float z, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_local_position_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION;
return mavlink_finalize_message(msg, system_id, component_id, 32);
}
 
/**
* @brief Pack a local_position message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float x,float y,float z,float vx,float vy,float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_local_position_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32);
}
 
/**
* @brief Encode a local_position struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_t* local_position)
{
return mavlink_msg_local_position_pack(system_id, component_id, msg, local_position->usec, local_position->x, local_position->y, local_position->z, local_position->vx, local_position->vy, local_position->vz);
}
 
/**
* @brief Send a local_position message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, vx);
_mav_put_float(buf, 24, vy);
_mav_put_float(buf, 28, vz);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION, buf, 32);
#else
mavlink_local_position_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION, (const char *)&packet, 32);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION UNPACKING
 
 
/**
* @brief Get field usec from local_position message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_local_position_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from local_position message
*
* @return X Position
*/
static inline float mavlink_msg_local_position_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from local_position message
*
* @return Y Position
*/
static inline float mavlink_msg_local_position_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from local_position message
*
* @return Z Position
*/
static inline float mavlink_msg_local_position_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field vx from local_position message
*
* @return X Speed
*/
static inline float mavlink_msg_local_position_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field vy from local_position message
*
* @return Y Speed
*/
static inline float mavlink_msg_local_position_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field vz from local_position message
*
* @return Z Speed
*/
static inline float mavlink_msg_local_position_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a local_position message into a struct
*
* @param msg The message to decode
* @param local_position C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_decode(const mavlink_message_t* msg, mavlink_local_position_t* local_position)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position->usec = mavlink_msg_local_position_get_usec(msg);
local_position->x = mavlink_msg_local_position_get_x(msg);
local_position->y = mavlink_msg_local_position_get_y(msg);
local_position->z = mavlink_msg_local_position_get_z(msg);
local_position->vx = mavlink_msg_local_position_get_vx(msg);
local_position->vy = mavlink_msg_local_position_get_vy(msg);
local_position->vz = mavlink_msg_local_position_get_vz(msg);
#else
memcpy(local_position, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_local_position_setpoint.h
0,0 → 1,210
// MESSAGE LOCAL_POSITION_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT 51
 
typedef struct __mavlink_local_position_setpoint_t
{
float x; ///< x position
float y; ///< y position
float z; ///< z position
float yaw; ///< Desired yaw angle
} mavlink_local_position_setpoint_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_LEN 16
#define MAVLINK_MSG_ID_51_LEN 16
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT { \
"LOCAL_POSITION_SETPOINT", \
4, \
{ { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_local_position_setpoint_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_local_position_setpoint_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_local_position_setpoint_t, z) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_local_position_setpoint_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a local_position_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 16);
}
 
/**
* @brief Pack a local_position_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float x,float y,float z,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 16);
}
 
/**
* @brief Encode a local_position_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_setpoint_t* local_position_setpoint)
{
return mavlink_msg_local_position_setpoint_pack(system_id, component_id, msg, local_position_setpoint->x, local_position_setpoint->y, local_position_setpoint->z, local_position_setpoint->yaw);
}
 
/**
* @brief Send a local_position_setpoint message
* @param chan MAVLink channel to send the message
*
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_setpoint_send(mavlink_channel_t chan, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT, buf, 16);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT, (const char *)&packet, 16);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION_SETPOINT UNPACKING
 
 
/**
* @brief Get field x from local_position_setpoint message
*
* @return x position
*/
static inline float mavlink_msg_local_position_setpoint_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field y from local_position_setpoint message
*
* @return y position
*/
static inline float mavlink_msg_local_position_setpoint_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field z from local_position_setpoint message
*
* @return z position
*/
static inline float mavlink_msg_local_position_setpoint_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from local_position_setpoint message
*
* @return Desired yaw angle
*/
static inline float mavlink_msg_local_position_setpoint_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a local_position_setpoint message into a struct
*
* @param msg The message to decode
* @param local_position_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_setpoint_decode(const mavlink_message_t* msg, mavlink_local_position_setpoint_t* local_position_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position_setpoint->x = mavlink_msg_local_position_setpoint_get_x(msg);
local_position_setpoint->y = mavlink_msg_local_position_setpoint_get_y(msg);
local_position_setpoint->z = mavlink_msg_local_position_setpoint_get_z(msg);
local_position_setpoint->yaw = mavlink_msg_local_position_setpoint_get_yaw(msg);
#else
memcpy(local_position_setpoint, _MAV_PAYLOAD(msg), 16);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_local_position_setpoint_set.h
0,0 → 1,254
// MESSAGE LOCAL_POSITION_SETPOINT_SET PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET 50
 
typedef struct __mavlink_local_position_setpoint_set_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
float x; ///< x position
float y; ///< y position
float z; ///< z position
float yaw; ///< Desired yaw angle
} mavlink_local_position_setpoint_set_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET_LEN 18
#define MAVLINK_MSG_ID_50_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT_SET { \
"LOCAL_POSITION_SETPOINT_SET", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_local_position_setpoint_set_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_local_position_setpoint_set_t, target_component) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 2, offsetof(mavlink_local_position_setpoint_set_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 6, offsetof(mavlink_local_position_setpoint_set_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 10, offsetof(mavlink_local_position_setpoint_set_t, z) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_local_position_setpoint_set_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a local_position_setpoint_set message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_set_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, x);
_mav_put_float(buf, 6, y);
_mav_put_float(buf, 10, z);
_mav_put_float(buf, 14, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_local_position_setpoint_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a local_position_setpoint_set message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_set_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,float x,float y,float z,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, x);
_mav_put_float(buf, 6, y);
_mav_put_float(buf, 10, z);
_mav_put_float(buf, 14, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_local_position_setpoint_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a local_position_setpoint_set struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position_setpoint_set C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_setpoint_set_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_setpoint_set_t* local_position_setpoint_set)
{
return mavlink_msg_local_position_setpoint_set_pack(system_id, component_id, msg, local_position_setpoint_set->target_system, local_position_setpoint_set->target_component, local_position_setpoint_set->x, local_position_setpoint_set->y, local_position_setpoint_set->z, local_position_setpoint_set->yaw);
}
 
/**
* @brief Send a local_position_setpoint_set message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_setpoint_set_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, x);
_mav_put_float(buf, 6, y);
_mav_put_float(buf, 10, z);
_mav_put_float(buf, 14, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET, buf, 18);
#else
mavlink_local_position_setpoint_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION_SETPOINT_SET UNPACKING
 
 
/**
* @brief Get field target_system from local_position_setpoint_set message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_local_position_setpoint_set_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from local_position_setpoint_set message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_local_position_setpoint_set_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field x from local_position_setpoint_set message
*
* @return x position
*/
static inline float mavlink_msg_local_position_setpoint_set_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 2);
}
 
/**
* @brief Get field y from local_position_setpoint_set message
*
* @return y position
*/
static inline float mavlink_msg_local_position_setpoint_set_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 6);
}
 
/**
* @brief Get field z from local_position_setpoint_set message
*
* @return z position
*/
static inline float mavlink_msg_local_position_setpoint_set_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 10);
}
 
/**
* @brief Get field yaw from local_position_setpoint_set message
*
* @return Desired yaw angle
*/
static inline float mavlink_msg_local_position_setpoint_set_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 14);
}
 
/**
* @brief Decode a local_position_setpoint_set message into a struct
*
* @param msg The message to decode
* @param local_position_setpoint_set C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_setpoint_set_decode(const mavlink_message_t* msg, mavlink_local_position_setpoint_set_t* local_position_setpoint_set)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position_setpoint_set->target_system = mavlink_msg_local_position_setpoint_set_get_target_system(msg);
local_position_setpoint_set->target_component = mavlink_msg_local_position_setpoint_set_get_target_component(msg);
local_position_setpoint_set->x = mavlink_msg_local_position_setpoint_set_get_x(msg);
local_position_setpoint_set->y = mavlink_msg_local_position_setpoint_set_get_y(msg);
local_position_setpoint_set->z = mavlink_msg_local_position_setpoint_set_get_z(msg);
local_position_setpoint_set->yaw = mavlink_msg_local_position_setpoint_set_get_yaw(msg);
#else
memcpy(local_position_setpoint_set, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_manual_control.h
0,0 → 1,320
// MESSAGE MANUAL_CONTROL PACKING
 
#define MAVLINK_MSG_ID_MANUAL_CONTROL 69
 
typedef struct __mavlink_manual_control_t
{
uint8_t target; ///< The system to be controlled
float roll; ///< roll
float pitch; ///< pitch
float yaw; ///< yaw
float thrust; ///< thrust
uint8_t roll_manual; ///< roll control enabled auto:0, manual:1
uint8_t pitch_manual; ///< pitch auto:0, manual:1
uint8_t yaw_manual; ///< yaw auto:0, manual:1
uint8_t thrust_manual; ///< thrust auto:0, manual:1
} mavlink_manual_control_t;
 
#define MAVLINK_MSG_ID_MANUAL_CONTROL_LEN 21
#define MAVLINK_MSG_ID_69_LEN 21
 
 
 
#define MAVLINK_MESSAGE_INFO_MANUAL_CONTROL { \
"MANUAL_CONTROL", \
9, \
{ { "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_manual_control_t, target) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 1, offsetof(mavlink_manual_control_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 5, offsetof(mavlink_manual_control_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_manual_control_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 13, offsetof(mavlink_manual_control_t, thrust) }, \
{ "roll_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_manual_control_t, roll_manual) }, \
{ "pitch_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 18, offsetof(mavlink_manual_control_t, pitch_manual) }, \
{ "yaw_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 19, offsetof(mavlink_manual_control_t, yaw_manual) }, \
{ "thrust_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_manual_control_t, thrust_manual) }, \
} \
}
 
 
/**
* @brief Pack a manual_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_manual_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, float roll, float pitch, float yaw, float thrust, uint8_t roll_manual, uint8_t pitch_manual, uint8_t yaw_manual, uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target);
_mav_put_float(buf, 1, roll);
_mav_put_float(buf, 5, pitch);
_mav_put_float(buf, 9, yaw);
_mav_put_float(buf, 13, thrust);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_manual_control_t packet;
packet.target = target;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MANUAL_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 21);
}
 
/**
* @brief Pack a manual_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_manual_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,float roll,float pitch,float yaw,float thrust,uint8_t roll_manual,uint8_t pitch_manual,uint8_t yaw_manual,uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target);
_mav_put_float(buf, 1, roll);
_mav_put_float(buf, 5, pitch);
_mav_put_float(buf, 9, yaw);
_mav_put_float(buf, 13, thrust);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_manual_control_t packet;
packet.target = target;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MANUAL_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 21);
}
 
/**
* @brief Encode a manual_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param manual_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_manual_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_manual_control_t* manual_control)
{
return mavlink_msg_manual_control_pack(system_id, component_id, msg, manual_control->target, manual_control->roll, manual_control->pitch, manual_control->yaw, manual_control->thrust, manual_control->roll_manual, manual_control->pitch_manual, manual_control->yaw_manual, manual_control->thrust_manual);
}
 
/**
* @brief Send a manual_control message
* @param chan MAVLink channel to send the message
*
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_manual_control_send(mavlink_channel_t chan, uint8_t target, float roll, float pitch, float yaw, float thrust, uint8_t roll_manual, uint8_t pitch_manual, uint8_t yaw_manual, uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target);
_mav_put_float(buf, 1, roll);
_mav_put_float(buf, 5, pitch);
_mav_put_float(buf, 9, yaw);
_mav_put_float(buf, 13, thrust);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MANUAL_CONTROL, buf, 21);
#else
mavlink_manual_control_t packet;
packet.target = target;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MANUAL_CONTROL, (const char *)&packet, 21);
#endif
}
 
#endif
 
// MESSAGE MANUAL_CONTROL UNPACKING
 
 
/**
* @brief Get field target from manual_control message
*
* @return The system to be controlled
*/
static inline uint8_t mavlink_msg_manual_control_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field roll from manual_control message
*
* @return roll
*/
static inline float mavlink_msg_manual_control_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 1);
}
 
/**
* @brief Get field pitch from manual_control message
*
* @return pitch
*/
static inline float mavlink_msg_manual_control_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 5);
}
 
/**
* @brief Get field yaw from manual_control message
*
* @return yaw
*/
static inline float mavlink_msg_manual_control_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 9);
}
 
/**
* @brief Get field thrust from manual_control message
*
* @return thrust
*/
static inline float mavlink_msg_manual_control_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 13);
}
 
/**
* @brief Get field roll_manual from manual_control message
*
* @return roll control enabled auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_roll_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field pitch_manual from manual_control message
*
* @return pitch auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_pitch_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 18);
}
 
/**
* @brief Get field yaw_manual from manual_control message
*
* @return yaw auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_yaw_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 19);
}
 
/**
* @brief Get field thrust_manual from manual_control message
*
* @return thrust auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_thrust_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 20);
}
 
/**
* @brief Decode a manual_control message into a struct
*
* @param msg The message to decode
* @param manual_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_manual_control_decode(const mavlink_message_t* msg, mavlink_manual_control_t* manual_control)
{
#if MAVLINK_NEED_BYTE_SWAP
manual_control->target = mavlink_msg_manual_control_get_target(msg);
manual_control->roll = mavlink_msg_manual_control_get_roll(msg);
manual_control->pitch = mavlink_msg_manual_control_get_pitch(msg);
manual_control->yaw = mavlink_msg_manual_control_get_yaw(msg);
manual_control->thrust = mavlink_msg_manual_control_get_thrust(msg);
manual_control->roll_manual = mavlink_msg_manual_control_get_roll_manual(msg);
manual_control->pitch_manual = mavlink_msg_manual_control_get_pitch_manual(msg);
manual_control->yaw_manual = mavlink_msg_manual_control_get_yaw_manual(msg);
manual_control->thrust_manual = mavlink_msg_manual_control_get_thrust_manual(msg);
#else
memcpy(manual_control, _MAV_PAYLOAD(msg), 21);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_named_value_float.h
0,0 → 1,160
// MESSAGE NAMED_VALUE_FLOAT PACKING
 
#define MAVLINK_MSG_ID_NAMED_VALUE_FLOAT 252
 
typedef struct __mavlink_named_value_float_t
{
char name[10]; ///< Name of the debug variable
float value; ///< Floating point value
} mavlink_named_value_float_t;
 
#define MAVLINK_MSG_ID_NAMED_VALUE_FLOAT_LEN 14
#define MAVLINK_MSG_ID_252_LEN 14
 
#define MAVLINK_MSG_NAMED_VALUE_FLOAT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT { \
"NAMED_VALUE_FLOAT", \
2, \
{ { "name", NULL, MAVLINK_TYPE_CHAR, 10, 0, offsetof(mavlink_named_value_float_t, name) }, \
{ "value", NULL, MAVLINK_TYPE_FLOAT, 0, 10, offsetof(mavlink_named_value_float_t, value) }, \
} \
}
 
 
/**
* @brief Pack a named_value_float message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param name Name of the debug variable
* @param value Floating point value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_float_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *name, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_float(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_named_value_float_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
return mavlink_finalize_message(msg, system_id, component_id, 14);
}
 
/**
* @brief Pack a named_value_float message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param name Name of the debug variable
* @param value Floating point value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_float_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *name,float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_float(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_named_value_float_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14);
}
 
/**
* @brief Encode a named_value_float struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param named_value_float C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_named_value_float_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_named_value_float_t* named_value_float)
{
return mavlink_msg_named_value_float_pack(system_id, component_id, msg, named_value_float->name, named_value_float->value);
}
 
/**
* @brief Send a named_value_float message
* @param chan MAVLink channel to send the message
*
* @param name Name of the debug variable
* @param value Floating point value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_named_value_float_send(mavlink_channel_t chan, const char *name, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_float(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_FLOAT, buf, 14);
#else
mavlink_named_value_float_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_FLOAT, (const char *)&packet, 14);
#endif
}
 
#endif
 
// MESSAGE NAMED_VALUE_FLOAT UNPACKING
 
 
/**
* @brief Get field name from named_value_float message
*
* @return Name of the debug variable
*/
static inline uint16_t mavlink_msg_named_value_float_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 0);
}
 
/**
* @brief Get field value from named_value_float message
*
* @return Floating point value
*/
static inline float mavlink_msg_named_value_float_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 10);
}
 
/**
* @brief Decode a named_value_float message into a struct
*
* @param msg The message to decode
* @param named_value_float C-struct to decode the message contents into
*/
static inline void mavlink_msg_named_value_float_decode(const mavlink_message_t* msg, mavlink_named_value_float_t* named_value_float)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_named_value_float_get_name(msg, named_value_float->name);
named_value_float->value = mavlink_msg_named_value_float_get_value(msg);
#else
memcpy(named_value_float, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_named_value_int.h
0,0 → 1,160
// MESSAGE NAMED_VALUE_INT PACKING
 
#define MAVLINK_MSG_ID_NAMED_VALUE_INT 253
 
typedef struct __mavlink_named_value_int_t
{
char name[10]; ///< Name of the debug variable
int32_t value; ///< Signed integer value
} mavlink_named_value_int_t;
 
#define MAVLINK_MSG_ID_NAMED_VALUE_INT_LEN 14
#define MAVLINK_MSG_ID_253_LEN 14
 
#define MAVLINK_MSG_NAMED_VALUE_INT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT { \
"NAMED_VALUE_INT", \
2, \
{ { "name", NULL, MAVLINK_TYPE_CHAR, 10, 0, offsetof(mavlink_named_value_int_t, name) }, \
{ "value", NULL, MAVLINK_TYPE_INT32_T, 0, 10, offsetof(mavlink_named_value_int_t, value) }, \
} \
}
 
 
/**
* @brief Pack a named_value_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param name Name of the debug variable
* @param value Signed integer value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *name, int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_named_value_int_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_INT;
return mavlink_finalize_message(msg, system_id, component_id, 14);
}
 
/**
* @brief Pack a named_value_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param name Name of the debug variable
* @param value Signed integer value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *name,int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_named_value_int_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14);
}
 
/**
* @brief Encode a named_value_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param named_value_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_named_value_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_named_value_int_t* named_value_int)
{
return mavlink_msg_named_value_int_pack(system_id, component_id, msg, named_value_int->name, named_value_int->value);
}
 
/**
* @brief Send a named_value_int message
* @param chan MAVLink channel to send the message
*
* @param name Name of the debug variable
* @param value Signed integer value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_named_value_int_send(mavlink_channel_t chan, const char *name, int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 10, value);
_mav_put_char_array(buf, 0, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_INT, buf, 14);
#else
mavlink_named_value_int_t packet;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_INT, (const char *)&packet, 14);
#endif
}
 
#endif
 
// MESSAGE NAMED_VALUE_INT UNPACKING
 
 
/**
* @brief Get field name from named_value_int message
*
* @return Name of the debug variable
*/
static inline uint16_t mavlink_msg_named_value_int_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 0);
}
 
/**
* @brief Get field value from named_value_int message
*
* @return Signed integer value
*/
static inline int32_t mavlink_msg_named_value_int_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 10);
}
 
/**
* @brief Decode a named_value_int message into a struct
*
* @param msg The message to decode
* @param named_value_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_named_value_int_decode(const mavlink_message_t* msg, mavlink_named_value_int_t* named_value_int)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_named_value_int_get_name(msg, named_value_int->name);
named_value_int->value = mavlink_msg_named_value_int_get_value(msg);
#else
memcpy(named_value_int, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_nav_controller_output.h
0,0 → 1,298
// MESSAGE NAV_CONTROLLER_OUTPUT PACKING
 
#define MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT 62
 
typedef struct __mavlink_nav_controller_output_t
{
float nav_roll; ///< Current desired roll in degrees
float nav_pitch; ///< Current desired pitch in degrees
int16_t nav_bearing; ///< Current desired heading in degrees
int16_t target_bearing; ///< Bearing to current waypoint/target in degrees
uint16_t wp_dist; ///< Distance to active waypoint in meters
float alt_error; ///< Current altitude error in meters
float aspd_error; ///< Current airspeed error in meters/second
float xtrack_error; ///< Current crosstrack error on x-y plane in meters
} mavlink_nav_controller_output_t;
 
#define MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT_LEN 26
#define MAVLINK_MSG_ID_62_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT { \
"NAV_CONTROLLER_OUTPUT", \
8, \
{ { "nav_roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_nav_controller_output_t, nav_roll) }, \
{ "nav_pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_nav_controller_output_t, nav_pitch) }, \
{ "nav_bearing", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_nav_controller_output_t, nav_bearing) }, \
{ "target_bearing", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_nav_controller_output_t, target_bearing) }, \
{ "wp_dist", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_nav_controller_output_t, wp_dist) }, \
{ "alt_error", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_nav_controller_output_t, alt_error) }, \
{ "aspd_error", NULL, MAVLINK_TYPE_FLOAT, 0, 18, offsetof(mavlink_nav_controller_output_t, aspd_error) }, \
{ "xtrack_error", NULL, MAVLINK_TYPE_FLOAT, 0, 22, offsetof(mavlink_nav_controller_output_t, xtrack_error) }, \
} \
}
 
 
/**
* @brief Pack a nav_controller_output message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current waypoint/target in degrees
* @param wp_dist Distance to active waypoint in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_nav_controller_output_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float nav_roll, float nav_pitch, int16_t nav_bearing, int16_t target_bearing, uint16_t wp_dist, float alt_error, float aspd_error, float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_int16_t(buf, 8, nav_bearing);
_mav_put_int16_t(buf, 10, target_bearing);
_mav_put_uint16_t(buf, 12, wp_dist);
_mav_put_float(buf, 14, alt_error);
_mav_put_float(buf, 18, aspd_error);
_mav_put_float(buf, 22, xtrack_error);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT;
return mavlink_finalize_message(msg, system_id, component_id, 26);
}
 
/**
* @brief Pack a nav_controller_output message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current waypoint/target in degrees
* @param wp_dist Distance to active waypoint in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_nav_controller_output_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float nav_roll,float nav_pitch,int16_t nav_bearing,int16_t target_bearing,uint16_t wp_dist,float alt_error,float aspd_error,float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_int16_t(buf, 8, nav_bearing);
_mav_put_int16_t(buf, 10, target_bearing);
_mav_put_uint16_t(buf, 12, wp_dist);
_mav_put_float(buf, 14, alt_error);
_mav_put_float(buf, 18, aspd_error);
_mav_put_float(buf, 22, xtrack_error);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26);
}
 
/**
* @brief Encode a nav_controller_output struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param nav_controller_output C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_nav_controller_output_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_nav_controller_output_t* nav_controller_output)
{
return mavlink_msg_nav_controller_output_pack(system_id, component_id, msg, nav_controller_output->nav_roll, nav_controller_output->nav_pitch, nav_controller_output->nav_bearing, nav_controller_output->target_bearing, nav_controller_output->wp_dist, nav_controller_output->alt_error, nav_controller_output->aspd_error, nav_controller_output->xtrack_error);
}
 
/**
* @brief Send a nav_controller_output message
* @param chan MAVLink channel to send the message
*
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current waypoint/target in degrees
* @param wp_dist Distance to active waypoint in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_nav_controller_output_send(mavlink_channel_t chan, float nav_roll, float nav_pitch, int16_t nav_bearing, int16_t target_bearing, uint16_t wp_dist, float alt_error, float aspd_error, float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_int16_t(buf, 8, nav_bearing);
_mav_put_int16_t(buf, 10, target_bearing);
_mav_put_uint16_t(buf, 12, wp_dist);
_mav_put_float(buf, 14, alt_error);
_mav_put_float(buf, 18, aspd_error);
_mav_put_float(buf, 22, xtrack_error);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT, buf, 26);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT, (const char *)&packet, 26);
#endif
}
 
#endif
 
// MESSAGE NAV_CONTROLLER_OUTPUT UNPACKING
 
 
/**
* @brief Get field nav_roll from nav_controller_output message
*
* @return Current desired roll in degrees
*/
static inline float mavlink_msg_nav_controller_output_get_nav_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field nav_pitch from nav_controller_output message
*
* @return Current desired pitch in degrees
*/
static inline float mavlink_msg_nav_controller_output_get_nav_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field nav_bearing from nav_controller_output message
*
* @return Current desired heading in degrees
*/
static inline int16_t mavlink_msg_nav_controller_output_get_nav_bearing(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field target_bearing from nav_controller_output message
*
* @return Bearing to current waypoint/target in degrees
*/
static inline int16_t mavlink_msg_nav_controller_output_get_target_bearing(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field wp_dist from nav_controller_output message
*
* @return Distance to active waypoint in meters
*/
static inline uint16_t mavlink_msg_nav_controller_output_get_wp_dist(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field alt_error from nav_controller_output message
*
* @return Current altitude error in meters
*/
static inline float mavlink_msg_nav_controller_output_get_alt_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 14);
}
 
/**
* @brief Get field aspd_error from nav_controller_output message
*
* @return Current airspeed error in meters/second
*/
static inline float mavlink_msg_nav_controller_output_get_aspd_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 18);
}
 
/**
* @brief Get field xtrack_error from nav_controller_output message
*
* @return Current crosstrack error on x-y plane in meters
*/
static inline float mavlink_msg_nav_controller_output_get_xtrack_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 22);
}
 
/**
* @brief Decode a nav_controller_output message into a struct
*
* @param msg The message to decode
* @param nav_controller_output C-struct to decode the message contents into
*/
static inline void mavlink_msg_nav_controller_output_decode(const mavlink_message_t* msg, mavlink_nav_controller_output_t* nav_controller_output)
{
#if MAVLINK_NEED_BYTE_SWAP
nav_controller_output->nav_roll = mavlink_msg_nav_controller_output_get_nav_roll(msg);
nav_controller_output->nav_pitch = mavlink_msg_nav_controller_output_get_nav_pitch(msg);
nav_controller_output->nav_bearing = mavlink_msg_nav_controller_output_get_nav_bearing(msg);
nav_controller_output->target_bearing = mavlink_msg_nav_controller_output_get_target_bearing(msg);
nav_controller_output->wp_dist = mavlink_msg_nav_controller_output_get_wp_dist(msg);
nav_controller_output->alt_error = mavlink_msg_nav_controller_output_get_alt_error(msg);
nav_controller_output->aspd_error = mavlink_msg_nav_controller_output_get_aspd_error(msg);
nav_controller_output->xtrack_error = mavlink_msg_nav_controller_output_get_xtrack_error(msg);
#else
memcpy(nav_controller_output, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_object_detection_event.h
0,0 → 1,270
// MESSAGE OBJECT_DETECTION_EVENT PACKING
 
#define MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT 140
 
typedef struct __mavlink_object_detection_event_t
{
uint32_t time; ///< Timestamp in milliseconds since system boot
uint16_t object_id; ///< Object ID
uint8_t type; ///< Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal
char name[20]; ///< Name of the object as defined by the detector
uint8_t quality; ///< Detection quality / confidence. 0: bad, 255: maximum confidence
float bearing; ///< Angle of the object with respect to the body frame in NED coordinates in radians. 0: front
float distance; ///< Ground distance in meters
} mavlink_object_detection_event_t;
 
#define MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT_LEN 36
#define MAVLINK_MSG_ID_140_LEN 36
 
#define MAVLINK_MSG_OBJECT_DETECTION_EVENT_FIELD_NAME_LEN 20
 
#define MAVLINK_MESSAGE_INFO_OBJECT_DETECTION_EVENT { \
"OBJECT_DETECTION_EVENT", \
7, \
{ { "time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_object_detection_event_t, time) }, \
{ "object_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_object_detection_event_t, object_id) }, \
{ "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_object_detection_event_t, type) }, \
{ "name", NULL, MAVLINK_TYPE_CHAR, 20, 7, offsetof(mavlink_object_detection_event_t, name) }, \
{ "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_object_detection_event_t, quality) }, \
{ "bearing", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_object_detection_event_t, bearing) }, \
{ "distance", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_object_detection_event_t, distance) }, \
} \
}
 
 
/**
* @brief Pack a object_detection_event message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time Timestamp in milliseconds since system boot
* @param object_id Object ID
* @param type Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal
* @param name Name of the object as defined by the detector
* @param quality Detection quality / confidence. 0: bad, 255: maximum confidence
* @param bearing Angle of the object with respect to the body frame in NED coordinates in radians. 0: front
* @param distance Ground distance in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_object_detection_event_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time, uint16_t object_id, uint8_t type, const char *name, uint8_t quality, float bearing, float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint32_t(buf, 0, time);
_mav_put_uint16_t(buf, 4, object_id);
_mav_put_uint8_t(buf, 6, type);
_mav_put_uint8_t(buf, 27, quality);
_mav_put_float(buf, 28, bearing);
_mav_put_float(buf, 32, distance);
_mav_put_char_array(buf, 7, name, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_object_detection_event_t packet;
packet.time = time;
packet.object_id = object_id;
packet.type = type;
packet.quality = quality;
packet.bearing = bearing;
packet.distance = distance;
mav_array_memcpy(packet.name, name, sizeof(char)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT;
return mavlink_finalize_message(msg, system_id, component_id, 36);
}
 
/**
* @brief Pack a object_detection_event message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time Timestamp in milliseconds since system boot
* @param object_id Object ID
* @param type Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal
* @param name Name of the object as defined by the detector
* @param quality Detection quality / confidence. 0: bad, 255: maximum confidence
* @param bearing Angle of the object with respect to the body frame in NED coordinates in radians. 0: front
* @param distance Ground distance in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_object_detection_event_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time,uint16_t object_id,uint8_t type,const char *name,uint8_t quality,float bearing,float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint32_t(buf, 0, time);
_mav_put_uint16_t(buf, 4, object_id);
_mav_put_uint8_t(buf, 6, type);
_mav_put_uint8_t(buf, 27, quality);
_mav_put_float(buf, 28, bearing);
_mav_put_float(buf, 32, distance);
_mav_put_char_array(buf, 7, name, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_object_detection_event_t packet;
packet.time = time;
packet.object_id = object_id;
packet.type = type;
packet.quality = quality;
packet.bearing = bearing;
packet.distance = distance;
mav_array_memcpy(packet.name, name, sizeof(char)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36);
}
 
/**
* @brief Encode a object_detection_event struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param object_detection_event C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_object_detection_event_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_object_detection_event_t* object_detection_event)
{
return mavlink_msg_object_detection_event_pack(system_id, component_id, msg, object_detection_event->time, object_detection_event->object_id, object_detection_event->type, object_detection_event->name, object_detection_event->quality, object_detection_event->bearing, object_detection_event->distance);
}
 
/**
* @brief Send a object_detection_event message
* @param chan MAVLink channel to send the message
*
* @param time Timestamp in milliseconds since system boot
* @param object_id Object ID
* @param type Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal
* @param name Name of the object as defined by the detector
* @param quality Detection quality / confidence. 0: bad, 255: maximum confidence
* @param bearing Angle of the object with respect to the body frame in NED coordinates in radians. 0: front
* @param distance Ground distance in meters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_object_detection_event_send(mavlink_channel_t chan, uint32_t time, uint16_t object_id, uint8_t type, const char *name, uint8_t quality, float bearing, float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint32_t(buf, 0, time);
_mav_put_uint16_t(buf, 4, object_id);
_mav_put_uint8_t(buf, 6, type);
_mav_put_uint8_t(buf, 27, quality);
_mav_put_float(buf, 28, bearing);
_mav_put_float(buf, 32, distance);
_mav_put_char_array(buf, 7, name, 20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT, buf, 36);
#else
mavlink_object_detection_event_t packet;
packet.time = time;
packet.object_id = object_id;
packet.type = type;
packet.quality = quality;
packet.bearing = bearing;
packet.distance = distance;
mav_array_memcpy(packet.name, name, sizeof(char)*20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT, (const char *)&packet, 36);
#endif
}
 
#endif
 
// MESSAGE OBJECT_DETECTION_EVENT UNPACKING
 
 
/**
* @brief Get field time from object_detection_event message
*
* @return Timestamp in milliseconds since system boot
*/
static inline uint32_t mavlink_msg_object_detection_event_get_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field object_id from object_detection_event message
*
* @return Object ID
*/
static inline uint16_t mavlink_msg_object_detection_event_get_object_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field type from object_detection_event message
*
* @return Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal
*/
static inline uint8_t mavlink_msg_object_detection_event_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field name from object_detection_event message
*
* @return Name of the object as defined by the detector
*/
static inline uint16_t mavlink_msg_object_detection_event_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 20, 7);
}
 
/**
* @brief Get field quality from object_detection_event message
*
* @return Detection quality / confidence. 0: bad, 255: maximum confidence
*/
static inline uint8_t mavlink_msg_object_detection_event_get_quality(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 27);
}
 
/**
* @brief Get field bearing from object_detection_event message
*
* @return Angle of the object with respect to the body frame in NED coordinates in radians. 0: front
*/
static inline float mavlink_msg_object_detection_event_get_bearing(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field distance from object_detection_event message
*
* @return Ground distance in meters
*/
static inline float mavlink_msg_object_detection_event_get_distance(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a object_detection_event message into a struct
*
* @param msg The message to decode
* @param object_detection_event C-struct to decode the message contents into
*/
static inline void mavlink_msg_object_detection_event_decode(const mavlink_message_t* msg, mavlink_object_detection_event_t* object_detection_event)
{
#if MAVLINK_NEED_BYTE_SWAP
object_detection_event->time = mavlink_msg_object_detection_event_get_time(msg);
object_detection_event->object_id = mavlink_msg_object_detection_event_get_object_id(msg);
object_detection_event->type = mavlink_msg_object_detection_event_get_type(msg);
mavlink_msg_object_detection_event_get_name(msg, object_detection_event->name);
object_detection_event->quality = mavlink_msg_object_detection_event_get_quality(msg);
object_detection_event->bearing = mavlink_msg_object_detection_event_get_bearing(msg);
object_detection_event->distance = mavlink_msg_object_detection_event_get_distance(msg);
#else
memcpy(object_detection_event, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_optical_flow.h
0,0 → 1,254
// MESSAGE OPTICAL_FLOW PACKING
 
#define MAVLINK_MSG_ID_OPTICAL_FLOW 100
 
typedef struct __mavlink_optical_flow_t
{
uint64_t time; ///< Timestamp (UNIX)
uint8_t sensor_id; ///< Sensor ID
int16_t flow_x; ///< Flow in pixels in x-sensor direction
int16_t flow_y; ///< Flow in pixels in y-sensor direction
uint8_t quality; ///< Optical flow quality / confidence. 0: bad, 255: maximum quality
float ground_distance; ///< Ground distance in meters
} mavlink_optical_flow_t;
 
#define MAVLINK_MSG_ID_OPTICAL_FLOW_LEN 18
#define MAVLINK_MSG_ID_100_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_OPTICAL_FLOW { \
"OPTICAL_FLOW", \
6, \
{ { "time", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_optical_flow_t, time) }, \
{ "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_optical_flow_t, sensor_id) }, \
{ "flow_x", NULL, MAVLINK_TYPE_INT16_T, 0, 9, offsetof(mavlink_optical_flow_t, flow_x) }, \
{ "flow_y", NULL, MAVLINK_TYPE_INT16_T, 0, 11, offsetof(mavlink_optical_flow_t, flow_y) }, \
{ "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_optical_flow_t, quality) }, \
{ "ground_distance", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_optical_flow_t, ground_distance) }, \
} \
}
 
 
/**
* @brief Pack a optical_flow message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_optical_flow_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time, uint8_t sensor_id, int16_t flow_x, int16_t flow_y, uint8_t quality, float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, time);
_mav_put_uint8_t(buf, 8, sensor_id);
_mav_put_int16_t(buf, 9, flow_x);
_mav_put_int16_t(buf, 11, flow_y);
_mav_put_uint8_t(buf, 13, quality);
_mav_put_float(buf, 14, ground_distance);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_optical_flow_t packet;
packet.time = time;
packet.sensor_id = sensor_id;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.quality = quality;
packet.ground_distance = ground_distance;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a optical_flow message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_optical_flow_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time,uint8_t sensor_id,int16_t flow_x,int16_t flow_y,uint8_t quality,float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, time);
_mav_put_uint8_t(buf, 8, sensor_id);
_mav_put_int16_t(buf, 9, flow_x);
_mav_put_int16_t(buf, 11, flow_y);
_mav_put_uint8_t(buf, 13, quality);
_mav_put_float(buf, 14, ground_distance);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_optical_flow_t packet;
packet.time = time;
packet.sensor_id = sensor_id;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.quality = quality;
packet.ground_distance = ground_distance;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a optical_flow struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param optical_flow C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_optical_flow_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_optical_flow_t* optical_flow)
{
return mavlink_msg_optical_flow_pack(system_id, component_id, msg, optical_flow->time, optical_flow->sensor_id, optical_flow->flow_x, optical_flow->flow_y, optical_flow->quality, optical_flow->ground_distance);
}
 
/**
* @brief Send a optical_flow message
* @param chan MAVLink channel to send the message
*
* @param time Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_optical_flow_send(mavlink_channel_t chan, uint64_t time, uint8_t sensor_id, int16_t flow_x, int16_t flow_y, uint8_t quality, float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, time);
_mav_put_uint8_t(buf, 8, sensor_id);
_mav_put_int16_t(buf, 9, flow_x);
_mav_put_int16_t(buf, 11, flow_y);
_mav_put_uint8_t(buf, 13, quality);
_mav_put_float(buf, 14, ground_distance);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW, buf, 18);
#else
mavlink_optical_flow_t packet;
packet.time = time;
packet.sensor_id = sensor_id;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.quality = quality;
packet.ground_distance = ground_distance;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE OPTICAL_FLOW UNPACKING
 
 
/**
* @brief Get field time from optical_flow message
*
* @return Timestamp (UNIX)
*/
static inline uint64_t mavlink_msg_optical_flow_get_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field sensor_id from optical_flow message
*
* @return Sensor ID
*/
static inline uint8_t mavlink_msg_optical_flow_get_sensor_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field flow_x from optical_flow message
*
* @return Flow in pixels in x-sensor direction
*/
static inline int16_t mavlink_msg_optical_flow_get_flow_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 9);
}
 
/**
* @brief Get field flow_y from optical_flow message
*
* @return Flow in pixels in y-sensor direction
*/
static inline int16_t mavlink_msg_optical_flow_get_flow_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 11);
}
 
/**
* @brief Get field quality from optical_flow message
*
* @return Optical flow quality / confidence. 0: bad, 255: maximum quality
*/
static inline uint8_t mavlink_msg_optical_flow_get_quality(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 13);
}
 
/**
* @brief Get field ground_distance from optical_flow message
*
* @return Ground distance in meters
*/
static inline float mavlink_msg_optical_flow_get_ground_distance(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 14);
}
 
/**
* @brief Decode a optical_flow message into a struct
*
* @param msg The message to decode
* @param optical_flow C-struct to decode the message contents into
*/
static inline void mavlink_msg_optical_flow_decode(const mavlink_message_t* msg, mavlink_optical_flow_t* optical_flow)
{
#if MAVLINK_NEED_BYTE_SWAP
optical_flow->time = mavlink_msg_optical_flow_get_time(msg);
optical_flow->sensor_id = mavlink_msg_optical_flow_get_sensor_id(msg);
optical_flow->flow_x = mavlink_msg_optical_flow_get_flow_x(msg);
optical_flow->flow_y = mavlink_msg_optical_flow_get_flow_y(msg);
optical_flow->quality = mavlink_msg_optical_flow_get_quality(msg);
optical_flow->ground_distance = mavlink_msg_optical_flow_get_ground_distance(msg);
#else
memcpy(optical_flow, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_param_request_list.h
0,0 → 1,166
// MESSAGE PARAM_REQUEST_LIST PACKING
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_LIST 21
 
typedef struct __mavlink_param_request_list_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_param_request_list_t;
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_LIST_LEN 2
#define MAVLINK_MSG_ID_21_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST { \
"PARAM_REQUEST_LIST", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_param_request_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_param_request_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a param_request_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a param_request_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a param_request_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_request_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_request_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_request_list_t* param_request_list)
{
return mavlink_msg_param_request_list_pack(system_id, component_id, msg, param_request_list->target_system, param_request_list->target_component);
}
 
/**
* @brief Send a param_request_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_request_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_LIST, buf, 2);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_LIST, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE PARAM_REQUEST_LIST UNPACKING
 
 
/**
* @brief Get field target_system from param_request_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_request_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from param_request_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_request_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a param_request_list message into a struct
*
* @param msg The message to decode
* @param param_request_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_request_list_decode(const mavlink_message_t* msg, mavlink_param_request_list_t* param_request_list)
{
#if MAVLINK_NEED_BYTE_SWAP
param_request_list->target_system = mavlink_msg_param_request_list_get_target_system(msg);
param_request_list->target_component = mavlink_msg_param_request_list_get_target_component(msg);
#else
memcpy(param_request_list, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_param_request_read.h
0,0 → 1,204
// MESSAGE PARAM_REQUEST_READ PACKING
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_READ 20
 
typedef struct __mavlink_param_request_read_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int8_t param_id[15]; ///< Onboard parameter id
int16_t param_index; ///< Parameter index. Send -1 to use the param ID field as identifier
} mavlink_param_request_read_t;
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_READ_LEN 19
#define MAVLINK_MSG_ID_20_LEN 19
 
#define MAVLINK_MSG_PARAM_REQUEST_READ_FIELD_PARAM_ID_LEN 15
 
#define MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ { \
"PARAM_REQUEST_READ", \
4, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_param_request_read_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_param_request_read_t, target_component) }, \
{ "param_id", NULL, MAVLINK_TYPE_INT8_T, 15, 2, offsetof(mavlink_param_request_read_t, param_id) }, \
{ "param_index", NULL, MAVLINK_TYPE_INT16_T, 0, 17, offsetof(mavlink_param_request_read_t, param_index) }, \
} \
}
 
 
/**
* @brief Pack a param_request_read message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_read_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, const int8_t *param_id, int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 17, param_index);
_mav_put_int8_t_array(buf, 2, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 19);
#else
mavlink_param_request_read_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 19);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_READ;
return mavlink_finalize_message(msg, system_id, component_id, 19);
}
 
/**
* @brief Pack a param_request_read message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_read_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,const int8_t *param_id,int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 17, param_index);
_mav_put_int8_t_array(buf, 2, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 19);
#else
mavlink_param_request_read_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 19);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_READ;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 19);
}
 
/**
* @brief Encode a param_request_read struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_request_read C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_request_read_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_request_read_t* param_request_read)
{
return mavlink_msg_param_request_read_pack(system_id, component_id, msg, param_request_read->target_system, param_request_read->target_component, param_request_read->param_id, param_request_read->param_index);
}
 
/**
* @brief Send a param_request_read message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_request_read_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, const int8_t *param_id, int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_int16_t(buf, 17, param_index);
_mav_put_int8_t_array(buf, 2, param_id, 15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_READ, buf, 19);
#else
mavlink_param_request_read_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_READ, (const char *)&packet, 19);
#endif
}
 
#endif
 
// MESSAGE PARAM_REQUEST_READ UNPACKING
 
 
/**
* @brief Get field target_system from param_request_read message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_request_read_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from param_request_read message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_request_read_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field param_id from param_request_read message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_request_read_get_param_id(const mavlink_message_t* msg, int8_t *param_id)
{
return _MAV_RETURN_int8_t_array(msg, param_id, 15, 2);
}
 
/**
* @brief Get field param_index from param_request_read message
*
* @return Parameter index. Send -1 to use the param ID field as identifier
*/
static inline int16_t mavlink_msg_param_request_read_get_param_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 17);
}
 
/**
* @brief Decode a param_request_read message into a struct
*
* @param msg The message to decode
* @param param_request_read C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_request_read_decode(const mavlink_message_t* msg, mavlink_param_request_read_t* param_request_read)
{
#if MAVLINK_NEED_BYTE_SWAP
param_request_read->target_system = mavlink_msg_param_request_read_get_target_system(msg);
param_request_read->target_component = mavlink_msg_param_request_read_get_target_component(msg);
mavlink_msg_param_request_read_get_param_id(msg, param_request_read->param_id);
param_request_read->param_index = mavlink_msg_param_request_read_get_param_index(msg);
#else
memcpy(param_request_read, _MAV_PAYLOAD(msg), 19);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_param_set.h
0,0 → 1,204
// MESSAGE PARAM_SET PACKING
 
#define MAVLINK_MSG_ID_PARAM_SET 23
 
typedef struct __mavlink_param_set_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
int8_t param_id[15]; ///< Onboard parameter id
float param_value; ///< Onboard parameter value
} mavlink_param_set_t;
 
#define MAVLINK_MSG_ID_PARAM_SET_LEN 21
#define MAVLINK_MSG_ID_23_LEN 21
 
#define MAVLINK_MSG_PARAM_SET_FIELD_PARAM_ID_LEN 15
 
#define MAVLINK_MESSAGE_INFO_PARAM_SET { \
"PARAM_SET", \
4, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_param_set_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_param_set_t, target_component) }, \
{ "param_id", NULL, MAVLINK_TYPE_INT8_T, 15, 2, offsetof(mavlink_param_set_t, param_id) }, \
{ "param_value", NULL, MAVLINK_TYPE_FLOAT, 0, 17, offsetof(mavlink_param_set_t, param_value) }, \
} \
}
 
 
/**
* @brief Pack a param_set message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_set_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, const int8_t *param_id, float param_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 17, param_value);
_mav_put_int8_t_array(buf, 2, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_param_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_value = param_value;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_SET;
return mavlink_finalize_message(msg, system_id, component_id, 21);
}
 
/**
* @brief Pack a param_set message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_set_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,const int8_t *param_id,float param_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 17, param_value);
_mav_put_int8_t_array(buf, 2, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_param_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_value = param_value;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_SET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 21);
}
 
/**
* @brief Encode a param_set struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_set C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_set_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_set_t* param_set)
{
return mavlink_msg_param_set_pack(system_id, component_id, msg, param_set->target_system, param_set->target_component, param_set->param_id, param_set->param_value);
}
 
/**
* @brief Send a param_set message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_set_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, const int8_t *param_id, float param_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 17, param_value);
_mav_put_int8_t_array(buf, 2, param_id, 15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_SET, buf, 21);
#else
mavlink_param_set_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_value = param_value;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_SET, (const char *)&packet, 21);
#endif
}
 
#endif
 
// MESSAGE PARAM_SET UNPACKING
 
 
/**
* @brief Get field target_system from param_set message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_set_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from param_set message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_set_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field param_id from param_set message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_set_get_param_id(const mavlink_message_t* msg, int8_t *param_id)
{
return _MAV_RETURN_int8_t_array(msg, param_id, 15, 2);
}
 
/**
* @brief Get field param_value from param_set message
*
* @return Onboard parameter value
*/
static inline float mavlink_msg_param_set_get_param_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 17);
}
 
/**
* @brief Decode a param_set message into a struct
*
* @param msg The message to decode
* @param param_set C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_set_decode(const mavlink_message_t* msg, mavlink_param_set_t* param_set)
{
#if MAVLINK_NEED_BYTE_SWAP
param_set->target_system = mavlink_msg_param_set_get_target_system(msg);
param_set->target_component = mavlink_msg_param_set_get_target_component(msg);
mavlink_msg_param_set_get_param_id(msg, param_set->param_id);
param_set->param_value = mavlink_msg_param_set_get_param_value(msg);
#else
memcpy(param_set, _MAV_PAYLOAD(msg), 21);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_param_value.h
0,0 → 1,204
// MESSAGE PARAM_VALUE PACKING
 
#define MAVLINK_MSG_ID_PARAM_VALUE 22
 
typedef struct __mavlink_param_value_t
{
int8_t param_id[15]; ///< Onboard parameter id
float param_value; ///< Onboard parameter value
uint16_t param_count; ///< Total number of onboard parameters
uint16_t param_index; ///< Index of this onboard parameter
} mavlink_param_value_t;
 
#define MAVLINK_MSG_ID_PARAM_VALUE_LEN 23
#define MAVLINK_MSG_ID_22_LEN 23
 
#define MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN 15
 
#define MAVLINK_MESSAGE_INFO_PARAM_VALUE { \
"PARAM_VALUE", \
4, \
{ { "param_id", NULL, MAVLINK_TYPE_INT8_T, 15, 0, offsetof(mavlink_param_value_t, param_id) }, \
{ "param_value", NULL, MAVLINK_TYPE_FLOAT, 0, 15, offsetof(mavlink_param_value_t, param_value) }, \
{ "param_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 19, offsetof(mavlink_param_value_t, param_count) }, \
{ "param_index", NULL, MAVLINK_TYPE_UINT16_T, 0, 21, offsetof(mavlink_param_value_t, param_index) }, \
} \
}
 
 
/**
* @brief Pack a param_value message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_value_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const int8_t *param_id, float param_value, uint16_t param_count, uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 15, param_value);
_mav_put_uint16_t(buf, 19, param_count);
_mav_put_uint16_t(buf, 21, param_index);
_mav_put_int8_t_array(buf, 0, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 23);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 23);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_VALUE;
return mavlink_finalize_message(msg, system_id, component_id, 23);
}
 
/**
* @brief Pack a param_value message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_value_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const int8_t *param_id,float param_value,uint16_t param_count,uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 15, param_value);
_mav_put_uint16_t(buf, 19, param_count);
_mav_put_uint16_t(buf, 21, param_index);
_mav_put_int8_t_array(buf, 0, param_id, 15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 23);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 23);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_VALUE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 23);
}
 
/**
* @brief Encode a param_value struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_value C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_value_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_value_t* param_value)
{
return mavlink_msg_param_value_pack(system_id, component_id, msg, param_value->param_id, param_value->param_value, param_value->param_count, param_value->param_index);
}
 
/**
* @brief Send a param_value message
* @param chan MAVLink channel to send the message
*
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_value_send(mavlink_channel_t chan, const int8_t *param_id, float param_value, uint16_t param_count, uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 15, param_value);
_mav_put_uint16_t(buf, 19, param_count);
_mav_put_uint16_t(buf, 21, param_index);
_mav_put_int8_t_array(buf, 0, param_id, 15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_VALUE, buf, 23);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
mav_array_memcpy(packet.param_id, param_id, sizeof(int8_t)*15);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_VALUE, (const char *)&packet, 23);
#endif
}
 
#endif
 
// MESSAGE PARAM_VALUE UNPACKING
 
 
/**
* @brief Get field param_id from param_value message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_value_get_param_id(const mavlink_message_t* msg, int8_t *param_id)
{
return _MAV_RETURN_int8_t_array(msg, param_id, 15, 0);
}
 
/**
* @brief Get field param_value from param_value message
*
* @return Onboard parameter value
*/
static inline float mavlink_msg_param_value_get_param_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 15);
}
 
/**
* @brief Get field param_count from param_value message
*
* @return Total number of onboard parameters
*/
static inline uint16_t mavlink_msg_param_value_get_param_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 19);
}
 
/**
* @brief Get field param_index from param_value message
*
* @return Index of this onboard parameter
*/
static inline uint16_t mavlink_msg_param_value_get_param_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 21);
}
 
/**
* @brief Decode a param_value message into a struct
*
* @param msg The message to decode
* @param param_value C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_value_decode(const mavlink_message_t* msg, mavlink_param_value_t* param_value)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_param_value_get_param_id(msg, param_value->param_id);
param_value->param_value = mavlink_msg_param_value_get_param_value(msg);
param_value->param_count = mavlink_msg_param_value_get_param_count(msg);
param_value->param_index = mavlink_msg_param_value_get_param_index(msg);
#else
memcpy(param_value, _MAV_PAYLOAD(msg), 23);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_ping.h
0,0 → 1,210
// MESSAGE PING PACKING
 
#define MAVLINK_MSG_ID_PING 3
 
typedef struct __mavlink_ping_t
{
uint32_t seq; ///< PING sequence
uint8_t target_system; ///< 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
uint8_t target_component; ///< 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
uint64_t time; ///< Unix timestamp in microseconds
} mavlink_ping_t;
 
#define MAVLINK_MSG_ID_PING_LEN 14
#define MAVLINK_MSG_ID_3_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_PING { \
"PING", \
4, \
{ { "seq", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ping_t, seq) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_ping_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_ping_t, target_component) }, \
{ "time", NULL, MAVLINK_TYPE_UINT64_T, 0, 6, offsetof(mavlink_ping_t, time) }, \
} \
}
 
 
/**
* @brief Pack a ping message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param time Unix timestamp in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ping_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t seq, uint8_t target_system, uint8_t target_component, uint64_t time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, seq);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint64_t(buf, 6, time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_ping_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
packet.time = time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PING;
return mavlink_finalize_message(msg, system_id, component_id, 14);
}
 
/**
* @brief Pack a ping message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param time Unix timestamp in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ping_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t seq,uint8_t target_system,uint8_t target_component,uint64_t time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, seq);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint64_t(buf, 6, time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_ping_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
packet.time = time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PING;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14);
}
 
/**
* @brief Encode a ping struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ping C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ping_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ping_t* ping)
{
return mavlink_msg_ping_pack(system_id, component_id, msg, ping->seq, ping->target_system, ping->target_component, ping->time);
}
 
/**
* @brief Send a ping message
* @param chan MAVLink channel to send the message
*
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param time Unix timestamp in microseconds
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ping_send(mavlink_channel_t chan, uint32_t seq, uint8_t target_system, uint8_t target_component, uint64_t time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, seq);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint64_t(buf, 6, time);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PING, buf, 14);
#else
mavlink_ping_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
packet.time = time;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PING, (const char *)&packet, 14);
#endif
}
 
#endif
 
// MESSAGE PING UNPACKING
 
 
/**
* @brief Get field seq from ping message
*
* @return PING sequence
*/
static inline uint32_t mavlink_msg_ping_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field target_system from ping message
*
* @return 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
*/
static inline uint8_t mavlink_msg_ping_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field target_component from ping message
*
* @return 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
*/
static inline uint8_t mavlink_msg_ping_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field time from ping message
*
* @return Unix timestamp in microseconds
*/
static inline uint64_t mavlink_msg_ping_get_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 6);
}
 
/**
* @brief Decode a ping message into a struct
*
* @param msg The message to decode
* @param ping C-struct to decode the message contents into
*/
static inline void mavlink_msg_ping_decode(const mavlink_message_t* msg, mavlink_ping_t* ping)
{
#if MAVLINK_NEED_BYTE_SWAP
ping->seq = mavlink_msg_ping_get_seq(msg);
ping->target_system = mavlink_msg_ping_get_target_system(msg);
ping->target_component = mavlink_msg_ping_get_target_component(msg);
ping->time = mavlink_msg_ping_get_time(msg);
#else
memcpy(ping, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_position_target.h
0,0 → 1,210
// MESSAGE POSITION_TARGET PACKING
 
#define MAVLINK_MSG_ID_POSITION_TARGET 63
 
typedef struct __mavlink_position_target_t
{
float x; ///< x position
float y; ///< y position
float z; ///< z position
float yaw; ///< yaw orientation in radians, 0 = NORTH
} mavlink_position_target_t;
 
#define MAVLINK_MSG_ID_POSITION_TARGET_LEN 16
#define MAVLINK_MSG_ID_63_LEN 16
 
 
 
#define MAVLINK_MESSAGE_INFO_POSITION_TARGET { \
"POSITION_TARGET", \
4, \
{ { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_position_target_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_position_target_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_position_target_t, z) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_position_target_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a position_target message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param x x position
* @param y y position
* @param z z position
* @param yaw yaw orientation in radians, 0 = NORTH
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_position_target_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_position_target_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_POSITION_TARGET;
return mavlink_finalize_message(msg, system_id, component_id, 16);
}
 
/**
* @brief Pack a position_target message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param x x position
* @param y y position
* @param z z position
* @param yaw yaw orientation in radians, 0 = NORTH
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_position_target_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float x,float y,float z,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_position_target_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_POSITION_TARGET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 16);
}
 
/**
* @brief Encode a position_target struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param position_target C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_position_target_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_position_target_t* position_target)
{
return mavlink_msg_position_target_pack(system_id, component_id, msg, position_target->x, position_target->y, position_target->z, position_target->yaw);
}
 
/**
* @brief Send a position_target message
* @param chan MAVLink channel to send the message
*
* @param x x position
* @param y y position
* @param z z position
* @param yaw yaw orientation in radians, 0 = NORTH
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_position_target_send(mavlink_channel_t chan, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_POSITION_TARGET, buf, 16);
#else
mavlink_position_target_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_POSITION_TARGET, (const char *)&packet, 16);
#endif
}
 
#endif
 
// MESSAGE POSITION_TARGET UNPACKING
 
 
/**
* @brief Get field x from position_target message
*
* @return x position
*/
static inline float mavlink_msg_position_target_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field y from position_target message
*
* @return y position
*/
static inline float mavlink_msg_position_target_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field z from position_target message
*
* @return z position
*/
static inline float mavlink_msg_position_target_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from position_target message
*
* @return yaw orientation in radians, 0 = NORTH
*/
static inline float mavlink_msg_position_target_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a position_target message into a struct
*
* @param msg The message to decode
* @param position_target C-struct to decode the message contents into
*/
static inline void mavlink_msg_position_target_decode(const mavlink_message_t* msg, mavlink_position_target_t* position_target)
{
#if MAVLINK_NEED_BYTE_SWAP
position_target->x = mavlink_msg_position_target_get_x(msg);
position_target->y = mavlink_msg_position_target_get_y(msg);
position_target->z = mavlink_msg_position_target_get_z(msg);
position_target->yaw = mavlink_msg_position_target_get_yaw(msg);
#else
memcpy(position_target, _MAV_PAYLOAD(msg), 16);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_raw_imu.h
0,0 → 1,342
// MESSAGE RAW_IMU PACKING
 
#define MAVLINK_MSG_ID_RAW_IMU 28
 
typedef struct __mavlink_raw_imu_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int16_t xacc; ///< X acceleration (raw)
int16_t yacc; ///< Y acceleration (raw)
int16_t zacc; ///< Z acceleration (raw)
int16_t xgyro; ///< Angular speed around X axis (raw)
int16_t ygyro; ///< Angular speed around Y axis (raw)
int16_t zgyro; ///< Angular speed around Z axis (raw)
int16_t xmag; ///< X Magnetic field (raw)
int16_t ymag; ///< Y Magnetic field (raw)
int16_t zmag; ///< Z Magnetic field (raw)
} mavlink_raw_imu_t;
 
#define MAVLINK_MSG_ID_RAW_IMU_LEN 26
#define MAVLINK_MSG_ID_28_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_RAW_IMU { \
"RAW_IMU", \
10, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_raw_imu_t, usec) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_raw_imu_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_raw_imu_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_raw_imu_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_raw_imu_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_raw_imu_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_raw_imu_t, zgyro) }, \
{ "xmag", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_raw_imu_t, xmag) }, \
{ "ymag", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_raw_imu_t, ymag) }, \
{ "zmag", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_raw_imu_t, zmag) }, \
} \
}
 
 
/**
* @brief Pack a raw_imu message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_imu_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_raw_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_IMU;
return mavlink_finalize_message(msg, system_id, component_id, 26);
}
 
/**
* @brief Pack a raw_imu message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_imu_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,int16_t xacc,int16_t yacc,int16_t zacc,int16_t xgyro,int16_t ygyro,int16_t zgyro,int16_t xmag,int16_t ymag,int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_raw_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_IMU;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26);
}
 
/**
* @brief Encode a raw_imu struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param raw_imu C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_raw_imu_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_raw_imu_t* raw_imu)
{
return mavlink_msg_raw_imu_pack(system_id, component_id, msg, raw_imu->usec, raw_imu->xacc, raw_imu->yacc, raw_imu->zacc, raw_imu->xgyro, raw_imu->ygyro, raw_imu->zgyro, raw_imu->xmag, raw_imu->ymag, raw_imu->zmag);
}
 
/**
* @brief Send a raw_imu message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_raw_imu_send(mavlink_channel_t chan, uint64_t usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_IMU, buf, 26);
#else
mavlink_raw_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_IMU, (const char *)&packet, 26);
#endif
}
 
#endif
 
// MESSAGE RAW_IMU UNPACKING
 
 
/**
* @brief Get field usec from raw_imu message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_raw_imu_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field xacc from raw_imu message
*
* @return X acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field yacc from raw_imu message
*
* @return Y acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field zacc from raw_imu message
*
* @return Z acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field xgyro from raw_imu message
*
* @return Angular speed around X axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field ygyro from raw_imu message
*
* @return Angular speed around Y axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field zgyro from raw_imu message
*
* @return Angular speed around Z axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 18);
}
 
/**
* @brief Get field xmag from raw_imu message
*
* @return X Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field ymag from raw_imu message
*
* @return Y Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_ymag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field zmag from raw_imu message
*
* @return Z Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 24);
}
 
/**
* @brief Decode a raw_imu message into a struct
*
* @param msg The message to decode
* @param raw_imu C-struct to decode the message contents into
*/
static inline void mavlink_msg_raw_imu_decode(const mavlink_message_t* msg, mavlink_raw_imu_t* raw_imu)
{
#if MAVLINK_NEED_BYTE_SWAP
raw_imu->usec = mavlink_msg_raw_imu_get_usec(msg);
raw_imu->xacc = mavlink_msg_raw_imu_get_xacc(msg);
raw_imu->yacc = mavlink_msg_raw_imu_get_yacc(msg);
raw_imu->zacc = mavlink_msg_raw_imu_get_zacc(msg);
raw_imu->xgyro = mavlink_msg_raw_imu_get_xgyro(msg);
raw_imu->ygyro = mavlink_msg_raw_imu_get_ygyro(msg);
raw_imu->zgyro = mavlink_msg_raw_imu_get_zgyro(msg);
raw_imu->xmag = mavlink_msg_raw_imu_get_xmag(msg);
raw_imu->ymag = mavlink_msg_raw_imu_get_ymag(msg);
raw_imu->zmag = mavlink_msg_raw_imu_get_zmag(msg);
#else
memcpy(raw_imu, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_raw_pressure.h
0,0 → 1,232
// MESSAGE RAW_PRESSURE PACKING
 
#define MAVLINK_MSG_ID_RAW_PRESSURE 29
 
typedef struct __mavlink_raw_pressure_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int16_t press_abs; ///< Absolute pressure (raw)
int16_t press_diff1; ///< Differential pressure 1 (raw)
int16_t press_diff2; ///< Differential pressure 2 (raw)
int16_t temperature; ///< Raw Temperature measurement (raw)
} mavlink_raw_pressure_t;
 
#define MAVLINK_MSG_ID_RAW_PRESSURE_LEN 16
#define MAVLINK_MSG_ID_29_LEN 16
 
 
 
#define MAVLINK_MESSAGE_INFO_RAW_PRESSURE { \
"RAW_PRESSURE", \
5, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_raw_pressure_t, usec) }, \
{ "press_abs", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_raw_pressure_t, press_abs) }, \
{ "press_diff1", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_raw_pressure_t, press_diff1) }, \
{ "press_diff2", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_raw_pressure_t, press_diff2) }, \
{ "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_raw_pressure_t, temperature) }, \
} \
}
 
 
/**
* @brief Pack a raw_pressure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_pressure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, int16_t press_abs, int16_t press_diff1, int16_t press_diff2, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_raw_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_PRESSURE;
return mavlink_finalize_message(msg, system_id, component_id, 16);
}
 
/**
* @brief Pack a raw_pressure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_pressure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,int16_t press_abs,int16_t press_diff1,int16_t press_diff2,int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_raw_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_PRESSURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 16);
}
 
/**
* @brief Encode a raw_pressure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param raw_pressure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_raw_pressure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_raw_pressure_t* raw_pressure)
{
return mavlink_msg_raw_pressure_pack(system_id, component_id, msg, raw_pressure->usec, raw_pressure->press_abs, raw_pressure->press_diff1, raw_pressure->press_diff2, raw_pressure->temperature);
}
 
/**
* @brief Send a raw_pressure message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_raw_pressure_send(mavlink_channel_t chan, uint64_t usec, int16_t press_abs, int16_t press_diff1, int16_t press_diff2, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_PRESSURE, buf, 16);
#else
mavlink_raw_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_PRESSURE, (const char *)&packet, 16);
#endif
}
 
#endif
 
// MESSAGE RAW_PRESSURE UNPACKING
 
 
/**
* @brief Get field usec from raw_pressure message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_raw_pressure_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field press_abs from raw_pressure message
*
* @return Absolute pressure (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_abs(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field press_diff1 from raw_pressure message
*
* @return Differential pressure 1 (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_diff1(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field press_diff2 from raw_pressure message
*
* @return Differential pressure 2 (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_diff2(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field temperature from raw_pressure message
*
* @return Raw Temperature measurement (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_temperature(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Decode a raw_pressure message into a struct
*
* @param msg The message to decode
* @param raw_pressure C-struct to decode the message contents into
*/
static inline void mavlink_msg_raw_pressure_decode(const mavlink_message_t* msg, mavlink_raw_pressure_t* raw_pressure)
{
#if MAVLINK_NEED_BYTE_SWAP
raw_pressure->usec = mavlink_msg_raw_pressure_get_usec(msg);
raw_pressure->press_abs = mavlink_msg_raw_pressure_get_press_abs(msg);
raw_pressure->press_diff1 = mavlink_msg_raw_pressure_get_press_diff1(msg);
raw_pressure->press_diff2 = mavlink_msg_raw_pressure_get_press_diff2(msg);
raw_pressure->temperature = mavlink_msg_raw_pressure_get_temperature(msg);
#else
memcpy(raw_pressure, _MAV_PAYLOAD(msg), 16);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_rc_channels_override.h
0,0 → 1,342
// MESSAGE RC_CHANNELS_OVERRIDE PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE 70
 
typedef struct __mavlink_rc_channels_override_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint16_t chan1_raw; ///< RC channel 1 value, in microseconds
uint16_t chan2_raw; ///< RC channel 2 value, in microseconds
uint16_t chan3_raw; ///< RC channel 3 value, in microseconds
uint16_t chan4_raw; ///< RC channel 4 value, in microseconds
uint16_t chan5_raw; ///< RC channel 5 value, in microseconds
uint16_t chan6_raw; ///< RC channel 6 value, in microseconds
uint16_t chan7_raw; ///< RC channel 7 value, in microseconds
uint16_t chan8_raw; ///< RC channel 8 value, in microseconds
} mavlink_rc_channels_override_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE_LEN 18
#define MAVLINK_MSG_ID_70_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE { \
"RC_CHANNELS_OVERRIDE", \
10, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_rc_channels_override_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_rc_channels_override_t, target_component) }, \
{ "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_rc_channels_override_t, chan1_raw) }, \
{ "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_rc_channels_override_t, chan2_raw) }, \
{ "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_rc_channels_override_t, chan3_raw) }, \
{ "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_rc_channels_override_t, chan4_raw) }, \
{ "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_rc_channels_override_t, chan5_raw) }, \
{ "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_rc_channels_override_t, chan6_raw) }, \
{ "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_rc_channels_override_t, chan7_raw) }, \
{ "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_rc_channels_override_t, chan8_raw) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_override message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_override_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, chan1_raw);
_mav_put_uint16_t(buf, 4, chan2_raw);
_mav_put_uint16_t(buf, 6, chan3_raw);
_mav_put_uint16_t(buf, 8, chan4_raw);
_mav_put_uint16_t(buf, 10, chan5_raw);
_mav_put_uint16_t(buf, 12, chan6_raw);
_mav_put_uint16_t(buf, 14, chan7_raw);
_mav_put_uint16_t(buf, 16, chan8_raw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_rc_channels_override_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a rc_channels_override message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_override_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, chan1_raw);
_mav_put_uint16_t(buf, 4, chan2_raw);
_mav_put_uint16_t(buf, 6, chan3_raw);
_mav_put_uint16_t(buf, 8, chan4_raw);
_mav_put_uint16_t(buf, 10, chan5_raw);
_mav_put_uint16_t(buf, 12, chan6_raw);
_mav_put_uint16_t(buf, 14, chan7_raw);
_mav_put_uint16_t(buf, 16, chan8_raw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_rc_channels_override_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a rc_channels_override struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_override C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_override_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_override_t* rc_channels_override)
{
return mavlink_msg_rc_channels_override_pack(system_id, component_id, msg, rc_channels_override->target_system, rc_channels_override->target_component, rc_channels_override->chan1_raw, rc_channels_override->chan2_raw, rc_channels_override->chan3_raw, rc_channels_override->chan4_raw, rc_channels_override->chan5_raw, rc_channels_override->chan6_raw, rc_channels_override->chan7_raw, rc_channels_override->chan8_raw);
}
 
/**
* @brief Send a rc_channels_override message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_override_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, chan1_raw);
_mav_put_uint16_t(buf, 4, chan2_raw);
_mav_put_uint16_t(buf, 6, chan3_raw);
_mav_put_uint16_t(buf, 8, chan4_raw);
_mav_put_uint16_t(buf, 10, chan5_raw);
_mav_put_uint16_t(buf, 12, chan6_raw);
_mav_put_uint16_t(buf, 14, chan7_raw);
_mav_put_uint16_t(buf, 16, chan8_raw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE, buf, 18);
#else
mavlink_rc_channels_override_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_OVERRIDE UNPACKING
 
 
/**
* @brief Get field target_system from rc_channels_override message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_rc_channels_override_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from rc_channels_override message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_rc_channels_override_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field chan1_raw from rc_channels_override message
*
* @return RC channel 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field chan2_raw from rc_channels_override message
*
* @return RC channel 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field chan3_raw from rc_channels_override message
*
* @return RC channel 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field chan4_raw from rc_channels_override message
*
* @return RC channel 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field chan5_raw from rc_channels_override message
*
* @return RC channel 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field chan6_raw from rc_channels_override message
*
* @return RC channel 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field chan7_raw from rc_channels_override message
*
* @return RC channel 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field chan8_raw from rc_channels_override message
*
* @return RC channel 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 16);
}
 
/**
* @brief Decode a rc_channels_override message into a struct
*
* @param msg The message to decode
* @param rc_channels_override C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_override_decode(const mavlink_message_t* msg, mavlink_rc_channels_override_t* rc_channels_override)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_override->target_system = mavlink_msg_rc_channels_override_get_target_system(msg);
rc_channels_override->target_component = mavlink_msg_rc_channels_override_get_target_component(msg);
rc_channels_override->chan1_raw = mavlink_msg_rc_channels_override_get_chan1_raw(msg);
rc_channels_override->chan2_raw = mavlink_msg_rc_channels_override_get_chan2_raw(msg);
rc_channels_override->chan3_raw = mavlink_msg_rc_channels_override_get_chan3_raw(msg);
rc_channels_override->chan4_raw = mavlink_msg_rc_channels_override_get_chan4_raw(msg);
rc_channels_override->chan5_raw = mavlink_msg_rc_channels_override_get_chan5_raw(msg);
rc_channels_override->chan6_raw = mavlink_msg_rc_channels_override_get_chan6_raw(msg);
rc_channels_override->chan7_raw = mavlink_msg_rc_channels_override_get_chan7_raw(msg);
rc_channels_override->chan8_raw = mavlink_msg_rc_channels_override_get_chan8_raw(msg);
#else
memcpy(rc_channels_override, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_rc_channels_raw.h
0,0 → 1,320
// MESSAGE RC_CHANNELS_RAW PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_RAW 35
 
typedef struct __mavlink_rc_channels_raw_t
{
uint16_t chan1_raw; ///< RC channel 1 value, in microseconds
uint16_t chan2_raw; ///< RC channel 2 value, in microseconds
uint16_t chan3_raw; ///< RC channel 3 value, in microseconds
uint16_t chan4_raw; ///< RC channel 4 value, in microseconds
uint16_t chan5_raw; ///< RC channel 5 value, in microseconds
uint16_t chan6_raw; ///< RC channel 6 value, in microseconds
uint16_t chan7_raw; ///< RC channel 7 value, in microseconds
uint16_t chan8_raw; ///< RC channel 8 value, in microseconds
uint8_t rssi; ///< Receive signal strength indicator, 0: 0%, 255: 100%
} mavlink_rc_channels_raw_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_RAW_LEN 17
#define MAVLINK_MSG_ID_35_LEN 17
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW { \
"RC_CHANNELS_RAW", \
9, \
{ { "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_rc_channels_raw_t, chan1_raw) }, \
{ "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_rc_channels_raw_t, chan2_raw) }, \
{ "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_rc_channels_raw_t, chan3_raw) }, \
{ "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_rc_channels_raw_t, chan4_raw) }, \
{ "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_rc_channels_raw_t, chan5_raw) }, \
{ "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_rc_channels_raw_t, chan6_raw) }, \
{ "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_rc_channels_raw_t, chan7_raw) }, \
{ "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_rc_channels_raw_t, chan8_raw) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_rc_channels_raw_t, rssi) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_rc_channels_raw_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 17);
}
 
/**
* @brief Pack a rc_channels_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw,uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_rc_channels_raw_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 17);
}
 
/**
* @brief Encode a rc_channels_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_raw_t* rc_channels_raw)
{
return mavlink_msg_rc_channels_raw_pack(system_id, component_id, msg, rc_channels_raw->chan1_raw, rc_channels_raw->chan2_raw, rc_channels_raw->chan3_raw, rc_channels_raw->chan4_raw, rc_channels_raw->chan5_raw, rc_channels_raw->chan6_raw, rc_channels_raw->chan7_raw, rc_channels_raw->chan8_raw, rc_channels_raw->rssi);
}
 
/**
* @brief Send a rc_channels_raw message
* @param chan MAVLink channel to send the message
*
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_raw_send(mavlink_channel_t chan, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, rssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_RAW, buf, 17);
#else
mavlink_rc_channels_raw_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.rssi = rssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_RAW, (const char *)&packet, 17);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_RAW UNPACKING
 
 
/**
* @brief Get field chan1_raw from rc_channels_raw message
*
* @return RC channel 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field chan2_raw from rc_channels_raw message
*
* @return RC channel 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field chan3_raw from rc_channels_raw message
*
* @return RC channel 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field chan4_raw from rc_channels_raw message
*
* @return RC channel 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field chan5_raw from rc_channels_raw message
*
* @return RC channel 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field chan6_raw from rc_channels_raw message
*
* @return RC channel 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field chan7_raw from rc_channels_raw message
*
* @return RC channel 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field chan8_raw from rc_channels_raw message
*
* @return RC channel 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field rssi from rc_channels_raw message
*
* @return Receive signal strength indicator, 0: 0%, 255: 100%
*/
static inline uint8_t mavlink_msg_rc_channels_raw_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Decode a rc_channels_raw message into a struct
*
* @param msg The message to decode
* @param rc_channels_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_raw_decode(const mavlink_message_t* msg, mavlink_rc_channels_raw_t* rc_channels_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_raw->chan1_raw = mavlink_msg_rc_channels_raw_get_chan1_raw(msg);
rc_channels_raw->chan2_raw = mavlink_msg_rc_channels_raw_get_chan2_raw(msg);
rc_channels_raw->chan3_raw = mavlink_msg_rc_channels_raw_get_chan3_raw(msg);
rc_channels_raw->chan4_raw = mavlink_msg_rc_channels_raw_get_chan4_raw(msg);
rc_channels_raw->chan5_raw = mavlink_msg_rc_channels_raw_get_chan5_raw(msg);
rc_channels_raw->chan6_raw = mavlink_msg_rc_channels_raw_get_chan6_raw(msg);
rc_channels_raw->chan7_raw = mavlink_msg_rc_channels_raw_get_chan7_raw(msg);
rc_channels_raw->chan8_raw = mavlink_msg_rc_channels_raw_get_chan8_raw(msg);
rc_channels_raw->rssi = mavlink_msg_rc_channels_raw_get_rssi(msg);
#else
memcpy(rc_channels_raw, _MAV_PAYLOAD(msg), 17);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_rc_channels_scaled.h
0,0 → 1,320
// MESSAGE RC_CHANNELS_SCALED PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_SCALED 36
 
typedef struct __mavlink_rc_channels_scaled_t
{
int16_t chan1_scaled; ///< RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan2_scaled; ///< RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan3_scaled; ///< RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan4_scaled; ///< RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan5_scaled; ///< RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan6_scaled; ///< RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan7_scaled; ///< RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan8_scaled; ///< RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
uint8_t rssi; ///< Receive signal strength indicator, 0: 0%, 255: 100%
} mavlink_rc_channels_scaled_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_SCALED_LEN 17
#define MAVLINK_MSG_ID_36_LEN 17
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED { \
"RC_CHANNELS_SCALED", \
9, \
{ { "chan1_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_rc_channels_scaled_t, chan1_scaled) }, \
{ "chan2_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_rc_channels_scaled_t, chan2_scaled) }, \
{ "chan3_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_rc_channels_scaled_t, chan3_scaled) }, \
{ "chan4_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 6, offsetof(mavlink_rc_channels_scaled_t, chan4_scaled) }, \
{ "chan5_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_rc_channels_scaled_t, chan5_scaled) }, \
{ "chan6_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_rc_channels_scaled_t, chan6_scaled) }, \
{ "chan7_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_rc_channels_scaled_t, chan7_scaled) }, \
{ "chan8_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_rc_channels_scaled_t, chan8_scaled) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_rc_channels_scaled_t, rssi) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_scaled message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int16_t chan1_scaled, int16_t chan2_scaled, int16_t chan3_scaled, int16_t chan4_scaled, int16_t chan5_scaled, int16_t chan6_scaled, int16_t chan7_scaled, int16_t chan8_scaled, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_int16_t(buf, 0, chan1_scaled);
_mav_put_int16_t(buf, 2, chan2_scaled);
_mav_put_int16_t(buf, 4, chan3_scaled);
_mav_put_int16_t(buf, 6, chan4_scaled);
_mav_put_int16_t(buf, 8, chan5_scaled);
_mav_put_int16_t(buf, 10, chan6_scaled);
_mav_put_int16_t(buf, 12, chan7_scaled);
_mav_put_int16_t(buf, 14, chan8_scaled);
_mav_put_uint8_t(buf, 16, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_rc_channels_scaled_t packet;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_SCALED;
return mavlink_finalize_message(msg, system_id, component_id, 17);
}
 
/**
* @brief Pack a rc_channels_scaled message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int16_t chan1_scaled,int16_t chan2_scaled,int16_t chan3_scaled,int16_t chan4_scaled,int16_t chan5_scaled,int16_t chan6_scaled,int16_t chan7_scaled,int16_t chan8_scaled,uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_int16_t(buf, 0, chan1_scaled);
_mav_put_int16_t(buf, 2, chan2_scaled);
_mav_put_int16_t(buf, 4, chan3_scaled);
_mav_put_int16_t(buf, 6, chan4_scaled);
_mav_put_int16_t(buf, 8, chan5_scaled);
_mav_put_int16_t(buf, 10, chan6_scaled);
_mav_put_int16_t(buf, 12, chan7_scaled);
_mav_put_int16_t(buf, 14, chan8_scaled);
_mav_put_uint8_t(buf, 16, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_rc_channels_scaled_t packet;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_SCALED;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 17);
}
 
/**
* @brief Encode a rc_channels_scaled struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_scaled C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_scaled_t* rc_channels_scaled)
{
return mavlink_msg_rc_channels_scaled_pack(system_id, component_id, msg, rc_channels_scaled->chan1_scaled, rc_channels_scaled->chan2_scaled, rc_channels_scaled->chan3_scaled, rc_channels_scaled->chan4_scaled, rc_channels_scaled->chan5_scaled, rc_channels_scaled->chan6_scaled, rc_channels_scaled->chan7_scaled, rc_channels_scaled->chan8_scaled, rc_channels_scaled->rssi);
}
 
/**
* @brief Send a rc_channels_scaled message
* @param chan MAVLink channel to send the message
*
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_scaled_send(mavlink_channel_t chan, int16_t chan1_scaled, int16_t chan2_scaled, int16_t chan3_scaled, int16_t chan4_scaled, int16_t chan5_scaled, int16_t chan6_scaled, int16_t chan7_scaled, int16_t chan8_scaled, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_int16_t(buf, 0, chan1_scaled);
_mav_put_int16_t(buf, 2, chan2_scaled);
_mav_put_int16_t(buf, 4, chan3_scaled);
_mav_put_int16_t(buf, 6, chan4_scaled);
_mav_put_int16_t(buf, 8, chan5_scaled);
_mav_put_int16_t(buf, 10, chan6_scaled);
_mav_put_int16_t(buf, 12, chan7_scaled);
_mav_put_int16_t(buf, 14, chan8_scaled);
_mav_put_uint8_t(buf, 16, rssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_SCALED, buf, 17);
#else
mavlink_rc_channels_scaled_t packet;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.rssi = rssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_SCALED, (const char *)&packet, 17);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_SCALED UNPACKING
 
 
/**
* @brief Get field chan1_scaled from rc_channels_scaled message
*
* @return RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan1_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Get field chan2_scaled from rc_channels_scaled message
*
* @return RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan2_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Get field chan3_scaled from rc_channels_scaled message
*
* @return RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan3_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Get field chan4_scaled from rc_channels_scaled message
*
* @return RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan4_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 6);
}
 
/**
* @brief Get field chan5_scaled from rc_channels_scaled message
*
* @return RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan5_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field chan6_scaled from rc_channels_scaled message
*
* @return RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan6_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field chan7_scaled from rc_channels_scaled message
*
* @return RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan7_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field chan8_scaled from rc_channels_scaled message
*
* @return RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan8_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field rssi from rc_channels_scaled message
*
* @return Receive signal strength indicator, 0: 0%, 255: 100%
*/
static inline uint8_t mavlink_msg_rc_channels_scaled_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Decode a rc_channels_scaled message into a struct
*
* @param msg The message to decode
* @param rc_channels_scaled C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_scaled_decode(const mavlink_message_t* msg, mavlink_rc_channels_scaled_t* rc_channels_scaled)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_scaled->chan1_scaled = mavlink_msg_rc_channels_scaled_get_chan1_scaled(msg);
rc_channels_scaled->chan2_scaled = mavlink_msg_rc_channels_scaled_get_chan2_scaled(msg);
rc_channels_scaled->chan3_scaled = mavlink_msg_rc_channels_scaled_get_chan3_scaled(msg);
rc_channels_scaled->chan4_scaled = mavlink_msg_rc_channels_scaled_get_chan4_scaled(msg);
rc_channels_scaled->chan5_scaled = mavlink_msg_rc_channels_scaled_get_chan5_scaled(msg);
rc_channels_scaled->chan6_scaled = mavlink_msg_rc_channels_scaled_get_chan6_scaled(msg);
rc_channels_scaled->chan7_scaled = mavlink_msg_rc_channels_scaled_get_chan7_scaled(msg);
rc_channels_scaled->chan8_scaled = mavlink_msg_rc_channels_scaled_get_chan8_scaled(msg);
rc_channels_scaled->rssi = mavlink_msg_rc_channels_scaled_get_rssi(msg);
#else
memcpy(rc_channels_scaled, _MAV_PAYLOAD(msg), 17);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_request_data_stream.h
0,0 → 1,232
// MESSAGE REQUEST_DATA_STREAM PACKING
 
#define MAVLINK_MSG_ID_REQUEST_DATA_STREAM 66
 
typedef struct __mavlink_request_data_stream_t
{
uint8_t target_system; ///< The target requested to send the message stream.
uint8_t target_component; ///< The target requested to send the message stream.
uint8_t req_stream_id; ///< The ID of the requested message type
uint16_t req_message_rate; ///< Update rate in Hertz
uint8_t start_stop; ///< 1 to start sending, 0 to stop sending.
} mavlink_request_data_stream_t;
 
#define MAVLINK_MSG_ID_REQUEST_DATA_STREAM_LEN 6
#define MAVLINK_MSG_ID_66_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM { \
"REQUEST_DATA_STREAM", \
5, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_request_data_stream_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_request_data_stream_t, target_component) }, \
{ "req_stream_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_request_data_stream_t, req_stream_id) }, \
{ "req_message_rate", NULL, MAVLINK_TYPE_UINT16_T, 0, 3, offsetof(mavlink_request_data_stream_t, req_message_rate) }, \
{ "start_stop", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_request_data_stream_t, start_stop) }, \
} \
}
 
 
/**
* @brief Pack a request_data_stream message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested message type
* @param req_message_rate Update rate in Hertz
* @param start_stop 1 to start sending, 0 to stop sending.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_request_data_stream_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t req_stream_id, uint16_t req_message_rate, uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, req_stream_id);
_mav_put_uint16_t(buf, 3, req_message_rate);
_mav_put_uint8_t(buf, 5, start_stop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_request_data_stream_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.req_message_rate = req_message_rate;
packet.start_stop = start_stop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_REQUEST_DATA_STREAM;
return mavlink_finalize_message(msg, system_id, component_id, 6);
}
 
/**
* @brief Pack a request_data_stream message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested message type
* @param req_message_rate Update rate in Hertz
* @param start_stop 1 to start sending, 0 to stop sending.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_request_data_stream_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t req_stream_id,uint16_t req_message_rate,uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, req_stream_id);
_mav_put_uint16_t(buf, 3, req_message_rate);
_mav_put_uint8_t(buf, 5, start_stop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_request_data_stream_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.req_message_rate = req_message_rate;
packet.start_stop = start_stop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_REQUEST_DATA_STREAM;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6);
}
 
/**
* @brief Encode a request_data_stream struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param request_data_stream C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_request_data_stream_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_request_data_stream_t* request_data_stream)
{
return mavlink_msg_request_data_stream_pack(system_id, component_id, msg, request_data_stream->target_system, request_data_stream->target_component, request_data_stream->req_stream_id, request_data_stream->req_message_rate, request_data_stream->start_stop);
}
 
/**
* @brief Send a request_data_stream message
* @param chan MAVLink channel to send the message
*
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested message type
* @param req_message_rate Update rate in Hertz
* @param start_stop 1 to start sending, 0 to stop sending.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_request_data_stream_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t req_stream_id, uint16_t req_message_rate, uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, req_stream_id);
_mav_put_uint16_t(buf, 3, req_message_rate);
_mav_put_uint8_t(buf, 5, start_stop);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_REQUEST_DATA_STREAM, buf, 6);
#else
mavlink_request_data_stream_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.req_message_rate = req_message_rate;
packet.start_stop = start_stop;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_REQUEST_DATA_STREAM, (const char *)&packet, 6);
#endif
}
 
#endif
 
// MESSAGE REQUEST_DATA_STREAM UNPACKING
 
 
/**
* @brief Get field target_system from request_data_stream message
*
* @return The target requested to send the message stream.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from request_data_stream message
*
* @return The target requested to send the message stream.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field req_stream_id from request_data_stream message
*
* @return The ID of the requested message type
*/
static inline uint8_t mavlink_msg_request_data_stream_get_req_stream_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field req_message_rate from request_data_stream message
*
* @return Update rate in Hertz
*/
static inline uint16_t mavlink_msg_request_data_stream_get_req_message_rate(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 3);
}
 
/**
* @brief Get field start_stop from request_data_stream message
*
* @return 1 to start sending, 0 to stop sending.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_start_stop(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Decode a request_data_stream message into a struct
*
* @param msg The message to decode
* @param request_data_stream C-struct to decode the message contents into
*/
static inline void mavlink_msg_request_data_stream_decode(const mavlink_message_t* msg, mavlink_request_data_stream_t* request_data_stream)
{
#if MAVLINK_NEED_BYTE_SWAP
request_data_stream->target_system = mavlink_msg_request_data_stream_get_target_system(msg);
request_data_stream->target_component = mavlink_msg_request_data_stream_get_target_component(msg);
request_data_stream->req_stream_id = mavlink_msg_request_data_stream_get_req_stream_id(msg);
request_data_stream->req_message_rate = mavlink_msg_request_data_stream_get_req_message_rate(msg);
request_data_stream->start_stop = mavlink_msg_request_data_stream_get_start_stop(msg);
#else
memcpy(request_data_stream, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint.h
0,0 → 1,232
// MESSAGE ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT 58
 
typedef struct __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t
{
uint64_t time_us; ///< Timestamp in micro seconds since unix epoch
float roll_speed; ///< Desired roll angular speed in rad/s
float pitch_speed; ///< Desired pitch angular speed in rad/s
float yaw_speed; ///< Desired yaw angular speed in rad/s
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_roll_pitch_yaw_speed_thrust_setpoint_t;
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT_LEN 24
#define MAVLINK_MSG_ID_58_LEN 24
 
 
 
#define MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT { \
"ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT", \
5, \
{ { "time_us", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, time_us) }, \
{ "roll_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, roll_speed) }, \
{ "pitch_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, pitch_speed) }, \
{ "yaw_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, yaw_speed) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a roll_pitch_yaw_speed_thrust_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_us, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_speed);
_mav_put_float(buf, 12, pitch_speed);
_mav_put_float(buf, 16, yaw_speed);
_mav_put_float(buf, 20, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 24);
}
 
/**
* @brief Pack a roll_pitch_yaw_speed_thrust_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_us,float roll_speed,float pitch_speed,float yaw_speed,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_speed);
_mav_put_float(buf, 12, pitch_speed);
_mav_put_float(buf, 16, yaw_speed);
_mav_put_float(buf, 20, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 24);
}
 
/**
* @brief Encode a roll_pitch_yaw_speed_thrust_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param roll_pitch_yaw_speed_thrust_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_roll_pitch_yaw_speed_thrust_setpoint_t* roll_pitch_yaw_speed_thrust_setpoint)
{
return mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(system_id, component_id, msg, roll_pitch_yaw_speed_thrust_setpoint->time_us, roll_pitch_yaw_speed_thrust_setpoint->roll_speed, roll_pitch_yaw_speed_thrust_setpoint->pitch_speed, roll_pitch_yaw_speed_thrust_setpoint->yaw_speed, roll_pitch_yaw_speed_thrust_setpoint->thrust);
}
 
/**
* @brief Send a roll_pitch_yaw_speed_thrust_setpoint message
* @param chan MAVLink channel to send the message
*
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_send(mavlink_channel_t chan, uint64_t time_us, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll_speed);
_mav_put_float(buf, 12, pitch_speed);
_mav_put_float(buf, 16, yaw_speed);
_mav_put_float(buf, 20, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, buf, 24);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, (const char *)&packet, 24);
#endif
}
 
#endif
 
// MESSAGE ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT UNPACKING
 
 
/**
* @brief Get field time_us from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Timestamp in micro seconds since unix epoch
*/
static inline uint64_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_time_us(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired roll angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_roll_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired pitch angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_pitch_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired yaw angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_yaw_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field thrust from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Decode a roll_pitch_yaw_speed_thrust_setpoint message into a struct
*
* @param msg The message to decode
* @param roll_pitch_yaw_speed_thrust_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(const mavlink_message_t* msg, mavlink_roll_pitch_yaw_speed_thrust_setpoint_t* roll_pitch_yaw_speed_thrust_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
roll_pitch_yaw_speed_thrust_setpoint->time_us = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_time_us(msg);
roll_pitch_yaw_speed_thrust_setpoint->roll_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_roll_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->pitch_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_pitch_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->yaw_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_yaw_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->thrust = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_thrust(msg);
#else
memcpy(roll_pitch_yaw_speed_thrust_setpoint, _MAV_PAYLOAD(msg), 24);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_roll_pitch_yaw_thrust_setpoint.h
0,0 → 1,232
// MESSAGE ROLL_PITCH_YAW_THRUST_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT 57
 
typedef struct __mavlink_roll_pitch_yaw_thrust_setpoint_t
{
uint64_t time_us; ///< Timestamp in micro seconds since unix epoch
float roll; ///< Desired roll angle in radians
float pitch; ///< Desired pitch angle in radians
float yaw; ///< Desired yaw angle in radians
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_roll_pitch_yaw_thrust_setpoint_t;
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT_LEN 24
#define MAVLINK_MSG_ID_57_LEN 24
 
 
 
#define MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT { \
"ROLL_PITCH_YAW_THRUST_SETPOINT", \
5, \
{ { "time_us", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, time_us) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a roll_pitch_yaw_thrust_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_us, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 24);
}
 
/**
* @brief Pack a roll_pitch_yaw_thrust_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_us,float roll,float pitch,float yaw,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 24);
}
 
/**
* @brief Encode a roll_pitch_yaw_thrust_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param roll_pitch_yaw_thrust_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_roll_pitch_yaw_thrust_setpoint_t* roll_pitch_yaw_thrust_setpoint)
{
return mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(system_id, component_id, msg, roll_pitch_yaw_thrust_setpoint->time_us, roll_pitch_yaw_thrust_setpoint->roll, roll_pitch_yaw_thrust_setpoint->pitch, roll_pitch_yaw_thrust_setpoint->yaw, roll_pitch_yaw_thrust_setpoint->thrust);
}
 
/**
* @brief Send a roll_pitch_yaw_thrust_setpoint message
* @param chan MAVLink channel to send the message
*
* @param time_us Timestamp in micro seconds since unix epoch
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_roll_pitch_yaw_thrust_setpoint_send(mavlink_channel_t chan, uint64_t time_us, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
_mav_put_uint64_t(buf, 0, time_us);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT, buf, 24);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_us = time_us;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT, (const char *)&packet, 24);
#endif
}
 
#endif
 
// MESSAGE ROLL_PITCH_YAW_THRUST_SETPOINT UNPACKING
 
 
/**
* @brief Get field time_us from roll_pitch_yaw_thrust_setpoint message
*
* @return Timestamp in micro seconds since unix epoch
*/
static inline uint64_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_time_us(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired roll angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired pitch angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired yaw angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field thrust from roll_pitch_yaw_thrust_setpoint message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Decode a roll_pitch_yaw_thrust_setpoint message into a struct
*
* @param msg The message to decode
* @param roll_pitch_yaw_thrust_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(const mavlink_message_t* msg, mavlink_roll_pitch_yaw_thrust_setpoint_t* roll_pitch_yaw_thrust_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
roll_pitch_yaw_thrust_setpoint->time_us = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_time_us(msg);
roll_pitch_yaw_thrust_setpoint->roll = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_roll(msg);
roll_pitch_yaw_thrust_setpoint->pitch = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_pitch(msg);
roll_pitch_yaw_thrust_setpoint->yaw = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_yaw(msg);
roll_pitch_yaw_thrust_setpoint->thrust = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_thrust(msg);
#else
memcpy(roll_pitch_yaw_thrust_setpoint, _MAV_PAYLOAD(msg), 24);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_safety_allowed_area.h
0,0 → 1,276
// MESSAGE SAFETY_ALLOWED_AREA PACKING
 
#define MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA 54
 
typedef struct __mavlink_safety_allowed_area_t
{
uint8_t frame; ///< Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
float p1x; ///< x position 1 / Latitude 1
float p1y; ///< y position 1 / Longitude 1
float p1z; ///< z position 1 / Altitude 1
float p2x; ///< x position 2 / Latitude 2
float p2y; ///< y position 2 / Longitude 2
float p2z; ///< z position 2 / Altitude 2
} mavlink_safety_allowed_area_t;
 
#define MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA_LEN 25
#define MAVLINK_MSG_ID_54_LEN 25
 
 
 
#define MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA { \
"SAFETY_ALLOWED_AREA", \
7, \
{ { "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_safety_allowed_area_t, frame) }, \
{ "p1x", NULL, MAVLINK_TYPE_FLOAT, 0, 1, offsetof(mavlink_safety_allowed_area_t, p1x) }, \
{ "p1y", NULL, MAVLINK_TYPE_FLOAT, 0, 5, offsetof(mavlink_safety_allowed_area_t, p1y) }, \
{ "p1z", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_safety_allowed_area_t, p1z) }, \
{ "p2x", NULL, MAVLINK_TYPE_FLOAT, 0, 13, offsetof(mavlink_safety_allowed_area_t, p2x) }, \
{ "p2y", NULL, MAVLINK_TYPE_FLOAT, 0, 17, offsetof(mavlink_safety_allowed_area_t, p2y) }, \
{ "p2z", NULL, MAVLINK_TYPE_FLOAT, 0, 21, offsetof(mavlink_safety_allowed_area_t, p2z) }, \
} \
}
 
 
/**
* @brief Pack a safety_allowed_area message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_allowed_area_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_uint8_t(buf, 0, frame);
_mav_put_float(buf, 1, p1x);
_mav_put_float(buf, 5, p1y);
_mav_put_float(buf, 9, p1z);
_mav_put_float(buf, 13, p2x);
_mav_put_float(buf, 17, p2y);
_mav_put_float(buf, 21, p2z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_safety_allowed_area_t packet;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA;
return mavlink_finalize_message(msg, system_id, component_id, 25);
}
 
/**
* @brief Pack a safety_allowed_area message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_allowed_area_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t frame,float p1x,float p1y,float p1z,float p2x,float p2y,float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_uint8_t(buf, 0, frame);
_mav_put_float(buf, 1, p1x);
_mav_put_float(buf, 5, p1y);
_mav_put_float(buf, 9, p1z);
_mav_put_float(buf, 13, p2x);
_mav_put_float(buf, 17, p2y);
_mav_put_float(buf, 21, p2z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_safety_allowed_area_t packet;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 25);
}
 
/**
* @brief Encode a safety_allowed_area struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param safety_allowed_area C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_safety_allowed_area_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_safety_allowed_area_t* safety_allowed_area)
{
return mavlink_msg_safety_allowed_area_pack(system_id, component_id, msg, safety_allowed_area->frame, safety_allowed_area->p1x, safety_allowed_area->p1y, safety_allowed_area->p1z, safety_allowed_area->p2x, safety_allowed_area->p2y, safety_allowed_area->p2z);
}
 
/**
* @brief Send a safety_allowed_area message
* @param chan MAVLink channel to send the message
*
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_safety_allowed_area_send(mavlink_channel_t chan, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_uint8_t(buf, 0, frame);
_mav_put_float(buf, 1, p1x);
_mav_put_float(buf, 5, p1y);
_mav_put_float(buf, 9, p1z);
_mav_put_float(buf, 13, p2x);
_mav_put_float(buf, 17, p2y);
_mav_put_float(buf, 21, p2z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA, buf, 25);
#else
mavlink_safety_allowed_area_t packet;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA, (const char *)&packet, 25);
#endif
}
 
#endif
 
// MESSAGE SAFETY_ALLOWED_AREA UNPACKING
 
 
/**
* @brief Get field frame from safety_allowed_area message
*
* @return Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
*/
static inline uint8_t mavlink_msg_safety_allowed_area_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field p1x from safety_allowed_area message
*
* @return x position 1 / Latitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 1);
}
 
/**
* @brief Get field p1y from safety_allowed_area message
*
* @return y position 1 / Longitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 5);
}
 
/**
* @brief Get field p1z from safety_allowed_area message
*
* @return z position 1 / Altitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 9);
}
 
/**
* @brief Get field p2x from safety_allowed_area message
*
* @return x position 2 / Latitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 13);
}
 
/**
* @brief Get field p2y from safety_allowed_area message
*
* @return y position 2 / Longitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 17);
}
 
/**
* @brief Get field p2z from safety_allowed_area message
*
* @return z position 2 / Altitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 21);
}
 
/**
* @brief Decode a safety_allowed_area message into a struct
*
* @param msg The message to decode
* @param safety_allowed_area C-struct to decode the message contents into
*/
static inline void mavlink_msg_safety_allowed_area_decode(const mavlink_message_t* msg, mavlink_safety_allowed_area_t* safety_allowed_area)
{
#if MAVLINK_NEED_BYTE_SWAP
safety_allowed_area->frame = mavlink_msg_safety_allowed_area_get_frame(msg);
safety_allowed_area->p1x = mavlink_msg_safety_allowed_area_get_p1x(msg);
safety_allowed_area->p1y = mavlink_msg_safety_allowed_area_get_p1y(msg);
safety_allowed_area->p1z = mavlink_msg_safety_allowed_area_get_p1z(msg);
safety_allowed_area->p2x = mavlink_msg_safety_allowed_area_get_p2x(msg);
safety_allowed_area->p2y = mavlink_msg_safety_allowed_area_get_p2y(msg);
safety_allowed_area->p2z = mavlink_msg_safety_allowed_area_get_p2z(msg);
#else
memcpy(safety_allowed_area, _MAV_PAYLOAD(msg), 25);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_safety_set_allowed_area.h
0,0 → 1,320
// MESSAGE SAFETY_SET_ALLOWED_AREA PACKING
 
#define MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA 53
 
typedef struct __mavlink_safety_set_allowed_area_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t frame; ///< Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
float p1x; ///< x position 1 / Latitude 1
float p1y; ///< y position 1 / Longitude 1
float p1z; ///< z position 1 / Altitude 1
float p2x; ///< x position 2 / Latitude 2
float p2y; ///< y position 2 / Longitude 2
float p2z; ///< z position 2 / Altitude 2
} mavlink_safety_set_allowed_area_t;
 
#define MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA_LEN 27
#define MAVLINK_MSG_ID_53_LEN 27
 
 
 
#define MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA { \
"SAFETY_SET_ALLOWED_AREA", \
9, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_safety_set_allowed_area_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_safety_set_allowed_area_t, target_component) }, \
{ "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_safety_set_allowed_area_t, frame) }, \
{ "p1x", NULL, MAVLINK_TYPE_FLOAT, 0, 3, offsetof(mavlink_safety_set_allowed_area_t, p1x) }, \
{ "p1y", NULL, MAVLINK_TYPE_FLOAT, 0, 7, offsetof(mavlink_safety_set_allowed_area_t, p1y) }, \
{ "p1z", NULL, MAVLINK_TYPE_FLOAT, 0, 11, offsetof(mavlink_safety_set_allowed_area_t, p1z) }, \
{ "p2x", NULL, MAVLINK_TYPE_FLOAT, 0, 15, offsetof(mavlink_safety_set_allowed_area_t, p2x) }, \
{ "p2y", NULL, MAVLINK_TYPE_FLOAT, 0, 19, offsetof(mavlink_safety_set_allowed_area_t, p2y) }, \
{ "p2z", NULL, MAVLINK_TYPE_FLOAT, 0, 23, offsetof(mavlink_safety_set_allowed_area_t, p2z) }, \
} \
}
 
 
/**
* @brief Pack a safety_set_allowed_area message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, frame);
_mav_put_float(buf, 3, p1x);
_mav_put_float(buf, 7, p1y);
_mav_put_float(buf, 11, p1z);
_mav_put_float(buf, 15, p2x);
_mav_put_float(buf, 19, p2y);
_mav_put_float(buf, 23, p2z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 27);
#else
mavlink_safety_set_allowed_area_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 27);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA;
return mavlink_finalize_message(msg, system_id, component_id, 27);
}
 
/**
* @brief Pack a safety_set_allowed_area message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t frame,float p1x,float p1y,float p1z,float p2x,float p2y,float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, frame);
_mav_put_float(buf, 3, p1x);
_mav_put_float(buf, 7, p1y);
_mav_put_float(buf, 11, p1z);
_mav_put_float(buf, 15, p2x);
_mav_put_float(buf, 19, p2y);
_mav_put_float(buf, 23, p2z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 27);
#else
mavlink_safety_set_allowed_area_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 27);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 27);
}
 
/**
* @brief Encode a safety_set_allowed_area struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param safety_set_allowed_area C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_safety_set_allowed_area_t* safety_set_allowed_area)
{
return mavlink_msg_safety_set_allowed_area_pack(system_id, component_id, msg, safety_set_allowed_area->target_system, safety_set_allowed_area->target_component, safety_set_allowed_area->frame, safety_set_allowed_area->p1x, safety_set_allowed_area->p1y, safety_set_allowed_area->p1z, safety_set_allowed_area->p2x, safety_set_allowed_area->p2y, safety_set_allowed_area->p2z);
}
 
/**
* @brief Send a safety_set_allowed_area message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_safety_set_allowed_area_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, frame);
_mav_put_float(buf, 3, p1x);
_mav_put_float(buf, 7, p1y);
_mav_put_float(buf, 11, p1z);
_mav_put_float(buf, 15, p2x);
_mav_put_float(buf, 19, p2y);
_mav_put_float(buf, 23, p2z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA, buf, 27);
#else
mavlink_safety_set_allowed_area_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA, (const char *)&packet, 27);
#endif
}
 
#endif
 
// MESSAGE SAFETY_SET_ALLOWED_AREA UNPACKING
 
 
/**
* @brief Get field target_system from safety_set_allowed_area message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from safety_set_allowed_area message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field frame from safety_set_allowed_area message
*
* @return Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field p1x from safety_set_allowed_area message
*
* @return x position 1 / Latitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 3);
}
 
/**
* @brief Get field p1y from safety_set_allowed_area message
*
* @return y position 1 / Longitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 7);
}
 
/**
* @brief Get field p1z from safety_set_allowed_area message
*
* @return z position 1 / Altitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 11);
}
 
/**
* @brief Get field p2x from safety_set_allowed_area message
*
* @return x position 2 / Latitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 15);
}
 
/**
* @brief Get field p2y from safety_set_allowed_area message
*
* @return y position 2 / Longitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 19);
}
 
/**
* @brief Get field p2z from safety_set_allowed_area message
*
* @return z position 2 / Altitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 23);
}
 
/**
* @brief Decode a safety_set_allowed_area message into a struct
*
* @param msg The message to decode
* @param safety_set_allowed_area C-struct to decode the message contents into
*/
static inline void mavlink_msg_safety_set_allowed_area_decode(const mavlink_message_t* msg, mavlink_safety_set_allowed_area_t* safety_set_allowed_area)
{
#if MAVLINK_NEED_BYTE_SWAP
safety_set_allowed_area->target_system = mavlink_msg_safety_set_allowed_area_get_target_system(msg);
safety_set_allowed_area->target_component = mavlink_msg_safety_set_allowed_area_get_target_component(msg);
safety_set_allowed_area->frame = mavlink_msg_safety_set_allowed_area_get_frame(msg);
safety_set_allowed_area->p1x = mavlink_msg_safety_set_allowed_area_get_p1x(msg);
safety_set_allowed_area->p1y = mavlink_msg_safety_set_allowed_area_get_p1y(msg);
safety_set_allowed_area->p1z = mavlink_msg_safety_set_allowed_area_get_p1z(msg);
safety_set_allowed_area->p2x = mavlink_msg_safety_set_allowed_area_get_p2x(msg);
safety_set_allowed_area->p2y = mavlink_msg_safety_set_allowed_area_get_p2y(msg);
safety_set_allowed_area->p2z = mavlink_msg_safety_set_allowed_area_get_p2z(msg);
#else
memcpy(safety_set_allowed_area, _MAV_PAYLOAD(msg), 27);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_scaled_imu.h
0,0 → 1,342
// MESSAGE SCALED_IMU PACKING
 
#define MAVLINK_MSG_ID_SCALED_IMU 26
 
typedef struct __mavlink_scaled_imu_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int16_t xacc; ///< X acceleration (mg)
int16_t yacc; ///< Y acceleration (mg)
int16_t zacc; ///< Z acceleration (mg)
int16_t xgyro; ///< Angular speed around X axis (millirad /sec)
int16_t ygyro; ///< Angular speed around Y axis (millirad /sec)
int16_t zgyro; ///< Angular speed around Z axis (millirad /sec)
int16_t xmag; ///< X Magnetic field (milli tesla)
int16_t ymag; ///< Y Magnetic field (milli tesla)
int16_t zmag; ///< Z Magnetic field (milli tesla)
} mavlink_scaled_imu_t;
 
#define MAVLINK_MSG_ID_SCALED_IMU_LEN 26
#define MAVLINK_MSG_ID_26_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_SCALED_IMU { \
"SCALED_IMU", \
10, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_scaled_imu_t, usec) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_scaled_imu_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_scaled_imu_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_scaled_imu_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_scaled_imu_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_scaled_imu_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_scaled_imu_t, zgyro) }, \
{ "xmag", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_scaled_imu_t, xmag) }, \
{ "ymag", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_scaled_imu_t, ymag) }, \
{ "zmag", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_scaled_imu_t, zmag) }, \
} \
}
 
 
/**
* @brief Pack a scaled_imu message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_imu_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_scaled_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_IMU;
return mavlink_finalize_message(msg, system_id, component_id, 26);
}
 
/**
* @brief Pack a scaled_imu message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_imu_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,int16_t xacc,int16_t yacc,int16_t zacc,int16_t xgyro,int16_t ygyro,int16_t zgyro,int16_t xmag,int16_t ymag,int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_scaled_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_IMU;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26);
}
 
/**
* @brief Encode a scaled_imu struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param scaled_imu C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_scaled_imu_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_scaled_imu_t* scaled_imu)
{
return mavlink_msg_scaled_imu_pack(system_id, component_id, msg, scaled_imu->usec, scaled_imu->xacc, scaled_imu->yacc, scaled_imu->zacc, scaled_imu->xgyro, scaled_imu->ygyro, scaled_imu->zgyro, scaled_imu->xmag, scaled_imu->ymag, scaled_imu->zmag);
}
 
/**
* @brief Send a scaled_imu message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_scaled_imu_send(mavlink_channel_t chan, uint64_t usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_IMU, buf, 26);
#else
mavlink_scaled_imu_t packet;
packet.usec = usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_IMU, (const char *)&packet, 26);
#endif
}
 
#endif
 
// MESSAGE SCALED_IMU UNPACKING
 
 
/**
* @brief Get field usec from scaled_imu message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_scaled_imu_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field xacc from scaled_imu message
*
* @return X acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field yacc from scaled_imu message
*
* @return Y acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field zacc from scaled_imu message
*
* @return Z acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field xgyro from scaled_imu message
*
* @return Angular speed around X axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field ygyro from scaled_imu message
*
* @return Angular speed around Y axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field zgyro from scaled_imu message
*
* @return Angular speed around Z axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 18);
}
 
/**
* @brief Get field xmag from scaled_imu message
*
* @return X Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field ymag from scaled_imu message
*
* @return Y Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_ymag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field zmag from scaled_imu message
*
* @return Z Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 24);
}
 
/**
* @brief Decode a scaled_imu message into a struct
*
* @param msg The message to decode
* @param scaled_imu C-struct to decode the message contents into
*/
static inline void mavlink_msg_scaled_imu_decode(const mavlink_message_t* msg, mavlink_scaled_imu_t* scaled_imu)
{
#if MAVLINK_NEED_BYTE_SWAP
scaled_imu->usec = mavlink_msg_scaled_imu_get_usec(msg);
scaled_imu->xacc = mavlink_msg_scaled_imu_get_xacc(msg);
scaled_imu->yacc = mavlink_msg_scaled_imu_get_yacc(msg);
scaled_imu->zacc = mavlink_msg_scaled_imu_get_zacc(msg);
scaled_imu->xgyro = mavlink_msg_scaled_imu_get_xgyro(msg);
scaled_imu->ygyro = mavlink_msg_scaled_imu_get_ygyro(msg);
scaled_imu->zgyro = mavlink_msg_scaled_imu_get_zgyro(msg);
scaled_imu->xmag = mavlink_msg_scaled_imu_get_xmag(msg);
scaled_imu->ymag = mavlink_msg_scaled_imu_get_ymag(msg);
scaled_imu->zmag = mavlink_msg_scaled_imu_get_zmag(msg);
#else
memcpy(scaled_imu, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_scaled_pressure.h
0,0 → 1,210
// MESSAGE SCALED_PRESSURE PACKING
 
#define MAVLINK_MSG_ID_SCALED_PRESSURE 38
 
typedef struct __mavlink_scaled_pressure_t
{
uint64_t usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float press_abs; ///< Absolute pressure (hectopascal)
float press_diff; ///< Differential pressure 1 (hectopascal)
int16_t temperature; ///< Temperature measurement (0.01 degrees celsius)
} mavlink_scaled_pressure_t;
 
#define MAVLINK_MSG_ID_SCALED_PRESSURE_LEN 18
#define MAVLINK_MSG_ID_38_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_SCALED_PRESSURE { \
"SCALED_PRESSURE", \
4, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_scaled_pressure_t, usec) }, \
{ "press_abs", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_scaled_pressure_t, press_abs) }, \
{ "press_diff", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_scaled_pressure_t, press_diff) }, \
{ "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_scaled_pressure_t, temperature) }, \
} \
}
 
 
/**
* @brief Pack a scaled_pressure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_pressure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float press_abs, float press_diff, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, press_abs);
_mav_put_float(buf, 12, press_diff);
_mav_put_int16_t(buf, 16, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_scaled_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_PRESSURE;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a scaled_pressure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_pressure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float press_abs,float press_diff,int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, press_abs);
_mav_put_float(buf, 12, press_diff);
_mav_put_int16_t(buf, 16, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_scaled_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_PRESSURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a scaled_pressure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param scaled_pressure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_scaled_pressure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_scaled_pressure_t* scaled_pressure)
{
return mavlink_msg_scaled_pressure_pack(system_id, component_id, msg, scaled_pressure->usec, scaled_pressure->press_abs, scaled_pressure->press_diff, scaled_pressure->temperature);
}
 
/**
* @brief Send a scaled_pressure message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_scaled_pressure_send(mavlink_channel_t chan, uint64_t usec, float press_abs, float press_diff, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, press_abs);
_mav_put_float(buf, 12, press_diff);
_mav_put_int16_t(buf, 16, temperature);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_PRESSURE, buf, 18);
#else
mavlink_scaled_pressure_t packet;
packet.usec = usec;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_PRESSURE, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE SCALED_PRESSURE UNPACKING
 
 
/**
* @brief Get field usec from scaled_pressure message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_scaled_pressure_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field press_abs from scaled_pressure message
*
* @return Absolute pressure (hectopascal)
*/
static inline float mavlink_msg_scaled_pressure_get_press_abs(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field press_diff from scaled_pressure message
*
* @return Differential pressure 1 (hectopascal)
*/
static inline float mavlink_msg_scaled_pressure_get_press_diff(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field temperature from scaled_pressure message
*
* @return Temperature measurement (0.01 degrees celsius)
*/
static inline int16_t mavlink_msg_scaled_pressure_get_temperature(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Decode a scaled_pressure message into a struct
*
* @param msg The message to decode
* @param scaled_pressure C-struct to decode the message contents into
*/
static inline void mavlink_msg_scaled_pressure_decode(const mavlink_message_t* msg, mavlink_scaled_pressure_t* scaled_pressure)
{
#if MAVLINK_NEED_BYTE_SWAP
scaled_pressure->usec = mavlink_msg_scaled_pressure_get_usec(msg);
scaled_pressure->press_abs = mavlink_msg_scaled_pressure_get_press_abs(msg);
scaled_pressure->press_diff = mavlink_msg_scaled_pressure_get_press_diff(msg);
scaled_pressure->temperature = mavlink_msg_scaled_pressure_get_temperature(msg);
#else
memcpy(scaled_pressure, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_servo_output_raw.h
0,0 → 1,298
// MESSAGE SERVO_OUTPUT_RAW PACKING
 
#define MAVLINK_MSG_ID_SERVO_OUTPUT_RAW 37
 
typedef struct __mavlink_servo_output_raw_t
{
uint16_t servo1_raw; ///< Servo output 1 value, in microseconds
uint16_t servo2_raw; ///< Servo output 2 value, in microseconds
uint16_t servo3_raw; ///< Servo output 3 value, in microseconds
uint16_t servo4_raw; ///< Servo output 4 value, in microseconds
uint16_t servo5_raw; ///< Servo output 5 value, in microseconds
uint16_t servo6_raw; ///< Servo output 6 value, in microseconds
uint16_t servo7_raw; ///< Servo output 7 value, in microseconds
uint16_t servo8_raw; ///< Servo output 8 value, in microseconds
} mavlink_servo_output_raw_t;
 
#define MAVLINK_MSG_ID_SERVO_OUTPUT_RAW_LEN 16
#define MAVLINK_MSG_ID_37_LEN 16
 
 
 
#define MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW { \
"SERVO_OUTPUT_RAW", \
8, \
{ { "servo1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_servo_output_raw_t, servo1_raw) }, \
{ "servo2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_servo_output_raw_t, servo2_raw) }, \
{ "servo3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_servo_output_raw_t, servo3_raw) }, \
{ "servo4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_servo_output_raw_t, servo4_raw) }, \
{ "servo5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_servo_output_raw_t, servo5_raw) }, \
{ "servo6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_servo_output_raw_t, servo6_raw) }, \
{ "servo7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_servo_output_raw_t, servo7_raw) }, \
{ "servo8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_servo_output_raw_t, servo8_raw) }, \
} \
}
 
 
/**
* @brief Pack a servo_output_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_servo_output_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t servo1_raw, uint16_t servo2_raw, uint16_t servo3_raw, uint16_t servo4_raw, uint16_t servo5_raw, uint16_t servo6_raw, uint16_t servo7_raw, uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint16_t(buf, 0, servo1_raw);
_mav_put_uint16_t(buf, 2, servo2_raw);
_mav_put_uint16_t(buf, 4, servo3_raw);
_mav_put_uint16_t(buf, 6, servo4_raw);
_mav_put_uint16_t(buf, 8, servo5_raw);
_mav_put_uint16_t(buf, 10, servo6_raw);
_mav_put_uint16_t(buf, 12, servo7_raw);
_mav_put_uint16_t(buf, 14, servo8_raw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_servo_output_raw_t packet;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SERVO_OUTPUT_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 16);
}
 
/**
* @brief Pack a servo_output_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_servo_output_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t servo1_raw,uint16_t servo2_raw,uint16_t servo3_raw,uint16_t servo4_raw,uint16_t servo5_raw,uint16_t servo6_raw,uint16_t servo7_raw,uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint16_t(buf, 0, servo1_raw);
_mav_put_uint16_t(buf, 2, servo2_raw);
_mav_put_uint16_t(buf, 4, servo3_raw);
_mav_put_uint16_t(buf, 6, servo4_raw);
_mav_put_uint16_t(buf, 8, servo5_raw);
_mav_put_uint16_t(buf, 10, servo6_raw);
_mav_put_uint16_t(buf, 12, servo7_raw);
_mav_put_uint16_t(buf, 14, servo8_raw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_servo_output_raw_t packet;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SERVO_OUTPUT_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 16);
}
 
/**
* @brief Encode a servo_output_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param servo_output_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_servo_output_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_servo_output_raw_t* servo_output_raw)
{
return mavlink_msg_servo_output_raw_pack(system_id, component_id, msg, servo_output_raw->servo1_raw, servo_output_raw->servo2_raw, servo_output_raw->servo3_raw, servo_output_raw->servo4_raw, servo_output_raw->servo5_raw, servo_output_raw->servo6_raw, servo_output_raw->servo7_raw, servo_output_raw->servo8_raw);
}
 
/**
* @brief Send a servo_output_raw message
* @param chan MAVLink channel to send the message
*
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_servo_output_raw_send(mavlink_channel_t chan, uint16_t servo1_raw, uint16_t servo2_raw, uint16_t servo3_raw, uint16_t servo4_raw, uint16_t servo5_raw, uint16_t servo6_raw, uint16_t servo7_raw, uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint16_t(buf, 0, servo1_raw);
_mav_put_uint16_t(buf, 2, servo2_raw);
_mav_put_uint16_t(buf, 4, servo3_raw);
_mav_put_uint16_t(buf, 6, servo4_raw);
_mav_put_uint16_t(buf, 8, servo5_raw);
_mav_put_uint16_t(buf, 10, servo6_raw);
_mav_put_uint16_t(buf, 12, servo7_raw);
_mav_put_uint16_t(buf, 14, servo8_raw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SERVO_OUTPUT_RAW, buf, 16);
#else
mavlink_servo_output_raw_t packet;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SERVO_OUTPUT_RAW, (const char *)&packet, 16);
#endif
}
 
#endif
 
// MESSAGE SERVO_OUTPUT_RAW UNPACKING
 
 
/**
* @brief Get field servo1_raw from servo_output_raw message
*
* @return Servo output 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field servo2_raw from servo_output_raw message
*
* @return Servo output 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field servo3_raw from servo_output_raw message
*
* @return Servo output 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field servo4_raw from servo_output_raw message
*
* @return Servo output 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field servo5_raw from servo_output_raw message
*
* @return Servo output 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field servo6_raw from servo_output_raw message
*
* @return Servo output 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field servo7_raw from servo_output_raw message
*
* @return Servo output 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field servo8_raw from servo_output_raw message
*
* @return Servo output 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Decode a servo_output_raw message into a struct
*
* @param msg The message to decode
* @param servo_output_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_servo_output_raw_decode(const mavlink_message_t* msg, mavlink_servo_output_raw_t* servo_output_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
servo_output_raw->servo1_raw = mavlink_msg_servo_output_raw_get_servo1_raw(msg);
servo_output_raw->servo2_raw = mavlink_msg_servo_output_raw_get_servo2_raw(msg);
servo_output_raw->servo3_raw = mavlink_msg_servo_output_raw_get_servo3_raw(msg);
servo_output_raw->servo4_raw = mavlink_msg_servo_output_raw_get_servo4_raw(msg);
servo_output_raw->servo5_raw = mavlink_msg_servo_output_raw_get_servo5_raw(msg);
servo_output_raw->servo6_raw = mavlink_msg_servo_output_raw_get_servo6_raw(msg);
servo_output_raw->servo7_raw = mavlink_msg_servo_output_raw_get_servo7_raw(msg);
servo_output_raw->servo8_raw = mavlink_msg_servo_output_raw_get_servo8_raw(msg);
#else
memcpy(servo_output_raw, _MAV_PAYLOAD(msg), 16);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_set_altitude.h
0,0 → 1,166
// MESSAGE SET_ALTITUDE PACKING
 
#define MAVLINK_MSG_ID_SET_ALTITUDE 65
 
typedef struct __mavlink_set_altitude_t
{
uint8_t target; ///< The system setting the altitude
uint32_t mode; ///< The new altitude in meters
} mavlink_set_altitude_t;
 
#define MAVLINK_MSG_ID_SET_ALTITUDE_LEN 5
#define MAVLINK_MSG_ID_65_LEN 5
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_ALTITUDE { \
"SET_ALTITUDE", \
2, \
{ { "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_altitude_t, target) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT32_T, 0, 1, offsetof(mavlink_set_altitude_t, mode) }, \
} \
}
 
 
/**
* @brief Pack a set_altitude message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system setting the altitude
* @param mode The new altitude in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_altitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, uint32_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint32_t(buf, 1, mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_set_altitude_t packet;
packet.target = target;
packet.mode = mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ALTITUDE;
return mavlink_finalize_message(msg, system_id, component_id, 5);
}
 
/**
* @brief Pack a set_altitude message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system setting the altitude
* @param mode The new altitude in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_altitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,uint32_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint32_t(buf, 1, mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_set_altitude_t packet;
packet.target = target;
packet.mode = mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ALTITUDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 5);
}
 
/**
* @brief Encode a set_altitude struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_altitude C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_altitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_altitude_t* set_altitude)
{
return mavlink_msg_set_altitude_pack(system_id, component_id, msg, set_altitude->target, set_altitude->mode);
}
 
/**
* @brief Send a set_altitude message
* @param chan MAVLink channel to send the message
*
* @param target The system setting the altitude
* @param mode The new altitude in meters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_altitude_send(mavlink_channel_t chan, uint8_t target, uint32_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint32_t(buf, 1, mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ALTITUDE, buf, 5);
#else
mavlink_set_altitude_t packet;
packet.target = target;
packet.mode = mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ALTITUDE, (const char *)&packet, 5);
#endif
}
 
#endif
 
// MESSAGE SET_ALTITUDE UNPACKING
 
 
/**
* @brief Get field target from set_altitude message
*
* @return The system setting the altitude
*/
static inline uint8_t mavlink_msg_set_altitude_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field mode from set_altitude message
*
* @return The new altitude in meters
*/
static inline uint32_t mavlink_msg_set_altitude_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 1);
}
 
/**
* @brief Decode a set_altitude message into a struct
*
* @param msg The message to decode
* @param set_altitude C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_altitude_decode(const mavlink_message_t* msg, mavlink_set_altitude_t* set_altitude)
{
#if MAVLINK_NEED_BYTE_SWAP
set_altitude->target = mavlink_msg_set_altitude_get_target(msg);
set_altitude->mode = mavlink_msg_set_altitude_get_mode(msg);
#else
memcpy(set_altitude, _MAV_PAYLOAD(msg), 5);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_set_mode.h
0,0 → 1,166
// MESSAGE SET_MODE PACKING
 
#define MAVLINK_MSG_ID_SET_MODE 11
 
typedef struct __mavlink_set_mode_t
{
uint8_t target; ///< The system setting the mode
uint8_t mode; ///< The new mode
} mavlink_set_mode_t;
 
#define MAVLINK_MSG_ID_SET_MODE_LEN 2
#define MAVLINK_MSG_ID_11_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_MODE { \
"SET_MODE", \
2, \
{ { "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_mode_t, target) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_set_mode_t, mode) }, \
} \
}
 
 
/**
* @brief Pack a set_mode message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system setting the mode
* @param mode The new mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mode_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, uint8_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_set_mode_t packet;
packet.target = target;
packet.mode = mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MODE;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a set_mode message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system setting the mode
* @param mode The new mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mode_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,uint8_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_set_mode_t packet;
packet.target = target;
packet.mode = mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MODE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a set_mode struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_mode C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_mode_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_mode_t* set_mode)
{
return mavlink_msg_set_mode_pack(system_id, component_id, msg, set_mode->target, set_mode->mode);
}
 
/**
* @brief Send a set_mode message
* @param chan MAVLink channel to send the message
*
* @param target The system setting the mode
* @param mode The new mode
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_mode_send(mavlink_channel_t chan, uint8_t target, uint8_t mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MODE, buf, 2);
#else
mavlink_set_mode_t packet;
packet.target = target;
packet.mode = mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MODE, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE SET_MODE UNPACKING
 
 
/**
* @brief Get field target from set_mode message
*
* @return The system setting the mode
*/
static inline uint8_t mavlink_msg_set_mode_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field mode from set_mode message
*
* @return The new mode
*/
static inline uint8_t mavlink_msg_set_mode_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a set_mode message into a struct
*
* @param msg The message to decode
* @param set_mode C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_mode_decode(const mavlink_message_t* msg, mavlink_set_mode_t* set_mode)
{
#if MAVLINK_NEED_BYTE_SWAP
set_mode->target = mavlink_msg_set_mode_get_target(msg);
set_mode->mode = mavlink_msg_set_mode_get_mode(msg);
#else
memcpy(set_mode, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_set_nav_mode.h
0,0 → 1,166
// MESSAGE SET_NAV_MODE PACKING
 
#define MAVLINK_MSG_ID_SET_NAV_MODE 12
 
typedef struct __mavlink_set_nav_mode_t
{
uint8_t target; ///< The system setting the mode
uint8_t nav_mode; ///< The new navigation mode
} mavlink_set_nav_mode_t;
 
#define MAVLINK_MSG_ID_SET_NAV_MODE_LEN 2
#define MAVLINK_MSG_ID_12_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_NAV_MODE { \
"SET_NAV_MODE", \
2, \
{ { "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_nav_mode_t, target) }, \
{ "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_set_nav_mode_t, nav_mode) }, \
} \
}
 
 
/**
* @brief Pack a set_nav_mode message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system setting the mode
* @param nav_mode The new navigation mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_nav_mode_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_set_nav_mode_t packet;
packet.target = target;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_NAV_MODE;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a set_nav_mode message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system setting the mode
* @param nav_mode The new navigation mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_nav_mode_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_set_nav_mode_t packet;
packet.target = target;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_NAV_MODE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a set_nav_mode struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_nav_mode C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_nav_mode_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_nav_mode_t* set_nav_mode)
{
return mavlink_msg_set_nav_mode_pack(system_id, component_id, msg, set_nav_mode->target, set_nav_mode->nav_mode);
}
 
/**
* @brief Send a set_nav_mode message
* @param chan MAVLink channel to send the message
*
* @param target The system setting the mode
* @param nav_mode The new navigation mode
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_nav_mode_send(mavlink_channel_t chan, uint8_t target, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target);
_mav_put_uint8_t(buf, 1, nav_mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_NAV_MODE, buf, 2);
#else
mavlink_set_nav_mode_t packet;
packet.target = target;
packet.nav_mode = nav_mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_NAV_MODE, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE SET_NAV_MODE UNPACKING
 
 
/**
* @brief Get field target from set_nav_mode message
*
* @return The system setting the mode
*/
static inline uint8_t mavlink_msg_set_nav_mode_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field nav_mode from set_nav_mode message
*
* @return The new navigation mode
*/
static inline uint8_t mavlink_msg_set_nav_mode_get_nav_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a set_nav_mode message into a struct
*
* @param msg The message to decode
* @param set_nav_mode C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_nav_mode_decode(const mavlink_message_t* msg, mavlink_set_nav_mode_t* set_nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP
set_nav_mode->target = mavlink_msg_set_nav_mode_get_target(msg);
set_nav_mode->nav_mode = mavlink_msg_set_nav_mode_get_nav_mode(msg);
#else
memcpy(set_nav_mode, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_set_roll_pitch_yaw_speed_thrust.h
0,0 → 1,254
// MESSAGE SET_ROLL_PITCH_YAW_SPEED_THRUST PACKING
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST 56
 
typedef struct __mavlink_set_roll_pitch_yaw_speed_thrust_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
float roll_speed; ///< Desired roll angular speed in rad/s
float pitch_speed; ///< Desired pitch angular speed in rad/s
float yaw_speed; ///< Desired yaw angular speed in rad/s
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_set_roll_pitch_yaw_speed_thrust_t;
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST_LEN 18
#define MAVLINK_MSG_ID_56_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST { \
"SET_ROLL_PITCH_YAW_SPEED_THRUST", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, target_component) }, \
{ "roll_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 2, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, roll_speed) }, \
{ "pitch_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 6, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, pitch_speed) }, \
{ "yaw_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 10, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, yaw_speed) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a set_roll_pitch_yaw_speed_thrust message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll_speed);
_mav_put_float(buf, 6, pitch_speed);
_mav_put_float(buf, 10, yaw_speed);
_mav_put_float(buf, 14, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a set_roll_pitch_yaw_speed_thrust message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,float roll_speed,float pitch_speed,float yaw_speed,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll_speed);
_mav_put_float(buf, 6, pitch_speed);
_mav_put_float(buf, 10, yaw_speed);
_mav_put_float(buf, 14, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a set_roll_pitch_yaw_speed_thrust struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_roll_pitch_yaw_speed_thrust C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_roll_pitch_yaw_speed_thrust_t* set_roll_pitch_yaw_speed_thrust)
{
return mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(system_id, component_id, msg, set_roll_pitch_yaw_speed_thrust->target_system, set_roll_pitch_yaw_speed_thrust->target_component, set_roll_pitch_yaw_speed_thrust->roll_speed, set_roll_pitch_yaw_speed_thrust->pitch_speed, set_roll_pitch_yaw_speed_thrust->yaw_speed, set_roll_pitch_yaw_speed_thrust->thrust);
}
 
/**
* @brief Send a set_roll_pitch_yaw_speed_thrust message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_roll_pitch_yaw_speed_thrust_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll_speed);
_mav_put_float(buf, 6, pitch_speed);
_mav_put_float(buf, 10, yaw_speed);
_mav_put_float(buf, 14, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST, buf, 18);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE SET_ROLL_PITCH_YAW_SPEED_THRUST UNPACKING
 
 
/**
* @brief Get field target_system from set_roll_pitch_yaw_speed_thrust message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from set_roll_pitch_yaw_speed_thrust message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field roll_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired roll angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_roll_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 2);
}
 
/**
* @brief Get field pitch_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired pitch angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_pitch_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 6);
}
 
/**
* @brief Get field yaw_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired yaw angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_yaw_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 10);
}
 
/**
* @brief Get field thrust from set_roll_pitch_yaw_speed_thrust message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 14);
}
 
/**
* @brief Decode a set_roll_pitch_yaw_speed_thrust message into a struct
*
* @param msg The message to decode
* @param set_roll_pitch_yaw_speed_thrust C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(const mavlink_message_t* msg, mavlink_set_roll_pitch_yaw_speed_thrust_t* set_roll_pitch_yaw_speed_thrust)
{
#if MAVLINK_NEED_BYTE_SWAP
set_roll_pitch_yaw_speed_thrust->target_system = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_system(msg);
set_roll_pitch_yaw_speed_thrust->target_component = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_component(msg);
set_roll_pitch_yaw_speed_thrust->roll_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_roll_speed(msg);
set_roll_pitch_yaw_speed_thrust->pitch_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_pitch_speed(msg);
set_roll_pitch_yaw_speed_thrust->yaw_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_yaw_speed(msg);
set_roll_pitch_yaw_speed_thrust->thrust = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_thrust(msg);
#else
memcpy(set_roll_pitch_yaw_speed_thrust, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_set_roll_pitch_yaw_thrust.h
0,0 → 1,254
// MESSAGE SET_ROLL_PITCH_YAW_THRUST PACKING
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST 55
 
typedef struct __mavlink_set_roll_pitch_yaw_thrust_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
float roll; ///< Desired roll angle in radians
float pitch; ///< Desired pitch angle in radians
float yaw; ///< Desired yaw angle in radians
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_set_roll_pitch_yaw_thrust_t;
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST_LEN 18
#define MAVLINK_MSG_ID_55_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST { \
"SET_ROLL_PITCH_YAW_THRUST", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, target_component) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 2, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 6, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 10, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a set_roll_pitch_yaw_thrust message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll);
_mav_put_float(buf, 6, pitch);
_mav_put_float(buf, 10, yaw);
_mav_put_float(buf, 14, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message(msg, system_id, component_id, 18);
}
 
/**
* @brief Pack a set_roll_pitch_yaw_thrust message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,float roll,float pitch,float yaw,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll);
_mav_put_float(buf, 6, pitch);
_mav_put_float(buf, 10, yaw);
_mav_put_float(buf, 14, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18);
}
 
/**
* @brief Encode a set_roll_pitch_yaw_thrust struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_roll_pitch_yaw_thrust C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_roll_pitch_yaw_thrust_t* set_roll_pitch_yaw_thrust)
{
return mavlink_msg_set_roll_pitch_yaw_thrust_pack(system_id, component_id, msg, set_roll_pitch_yaw_thrust->target_system, set_roll_pitch_yaw_thrust->target_component, set_roll_pitch_yaw_thrust->roll, set_roll_pitch_yaw_thrust->pitch, set_roll_pitch_yaw_thrust->yaw, set_roll_pitch_yaw_thrust->thrust);
}
 
/**
* @brief Send a set_roll_pitch_yaw_thrust message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_roll_pitch_yaw_thrust_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_float(buf, 2, roll);
_mav_put_float(buf, 6, pitch);
_mav_put_float(buf, 10, yaw);
_mav_put_float(buf, 14, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST, buf, 18);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST, (const char *)&packet, 18);
#endif
}
 
#endif
 
// MESSAGE SET_ROLL_PITCH_YAW_THRUST UNPACKING
 
 
/**
* @brief Get field target_system from set_roll_pitch_yaw_thrust message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_thrust_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from set_roll_pitch_yaw_thrust message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_thrust_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field roll from set_roll_pitch_yaw_thrust message
*
* @return Desired roll angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 2);
}
 
/**
* @brief Get field pitch from set_roll_pitch_yaw_thrust message
*
* @return Desired pitch angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 6);
}
 
/**
* @brief Get field yaw from set_roll_pitch_yaw_thrust message
*
* @return Desired yaw angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 10);
}
 
/**
* @brief Get field thrust from set_roll_pitch_yaw_thrust message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 14);
}
 
/**
* @brief Decode a set_roll_pitch_yaw_thrust message into a struct
*
* @param msg The message to decode
* @param set_roll_pitch_yaw_thrust C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_roll_pitch_yaw_thrust_decode(const mavlink_message_t* msg, mavlink_set_roll_pitch_yaw_thrust_t* set_roll_pitch_yaw_thrust)
{
#if MAVLINK_NEED_BYTE_SWAP
set_roll_pitch_yaw_thrust->target_system = mavlink_msg_set_roll_pitch_yaw_thrust_get_target_system(msg);
set_roll_pitch_yaw_thrust->target_component = mavlink_msg_set_roll_pitch_yaw_thrust_get_target_component(msg);
set_roll_pitch_yaw_thrust->roll = mavlink_msg_set_roll_pitch_yaw_thrust_get_roll(msg);
set_roll_pitch_yaw_thrust->pitch = mavlink_msg_set_roll_pitch_yaw_thrust_get_pitch(msg);
set_roll_pitch_yaw_thrust->yaw = mavlink_msg_set_roll_pitch_yaw_thrust_get_yaw(msg);
set_roll_pitch_yaw_thrust->thrust = mavlink_msg_set_roll_pitch_yaw_thrust_get_thrust(msg);
#else
memcpy(set_roll_pitch_yaw_thrust, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_state_correction.h
0,0 → 1,320
// MESSAGE STATE_CORRECTION PACKING
 
#define MAVLINK_MSG_ID_STATE_CORRECTION 64
 
typedef struct __mavlink_state_correction_t
{
float xErr; ///< x position error
float yErr; ///< y position error
float zErr; ///< z position error
float rollErr; ///< roll error (radians)
float pitchErr; ///< pitch error (radians)
float yawErr; ///< yaw error (radians)
float vxErr; ///< x velocity
float vyErr; ///< y velocity
float vzErr; ///< z velocity
} mavlink_state_correction_t;
 
#define MAVLINK_MSG_ID_STATE_CORRECTION_LEN 36
#define MAVLINK_MSG_ID_64_LEN 36
 
 
 
#define MAVLINK_MESSAGE_INFO_STATE_CORRECTION { \
"STATE_CORRECTION", \
9, \
{ { "xErr", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_state_correction_t, xErr) }, \
{ "yErr", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_state_correction_t, yErr) }, \
{ "zErr", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_state_correction_t, zErr) }, \
{ "rollErr", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_state_correction_t, rollErr) }, \
{ "pitchErr", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_state_correction_t, pitchErr) }, \
{ "yawErr", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_state_correction_t, yawErr) }, \
{ "vxErr", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_state_correction_t, vxErr) }, \
{ "vyErr", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_state_correction_t, vyErr) }, \
{ "vzErr", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_state_correction_t, vzErr) }, \
} \
}
 
 
/**
* @brief Pack a state_correction message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_state_correction_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float xErr, float yErr, float zErr, float rollErr, float pitchErr, float yawErr, float vxErr, float vyErr, float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATE_CORRECTION;
return mavlink_finalize_message(msg, system_id, component_id, 36);
}
 
/**
* @brief Pack a state_correction message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_state_correction_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float xErr,float yErr,float zErr,float rollErr,float pitchErr,float yawErr,float vxErr,float vyErr,float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATE_CORRECTION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36);
}
 
/**
* @brief Encode a state_correction struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param state_correction C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_state_correction_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_state_correction_t* state_correction)
{
return mavlink_msg_state_correction_pack(system_id, component_id, msg, state_correction->xErr, state_correction->yErr, state_correction->zErr, state_correction->rollErr, state_correction->pitchErr, state_correction->yawErr, state_correction->vxErr, state_correction->vyErr, state_correction->vzErr);
}
 
/**
* @brief Send a state_correction message
* @param chan MAVLink channel to send the message
*
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_state_correction_send(mavlink_channel_t chan, float xErr, float yErr, float zErr, float rollErr, float pitchErr, float yawErr, float vxErr, float vyErr, float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATE_CORRECTION, buf, 36);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATE_CORRECTION, (const char *)&packet, 36);
#endif
}
 
#endif
 
// MESSAGE STATE_CORRECTION UNPACKING
 
 
/**
* @brief Get field xErr from state_correction message
*
* @return x position error
*/
static inline float mavlink_msg_state_correction_get_xErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field yErr from state_correction message
*
* @return y position error
*/
static inline float mavlink_msg_state_correction_get_yErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field zErr from state_correction message
*
* @return z position error
*/
static inline float mavlink_msg_state_correction_get_zErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field rollErr from state_correction message
*
* @return roll error (radians)
*/
static inline float mavlink_msg_state_correction_get_rollErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field pitchErr from state_correction message
*
* @return pitch error (radians)
*/
static inline float mavlink_msg_state_correction_get_pitchErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field yawErr from state_correction message
*
* @return yaw error (radians)
*/
static inline float mavlink_msg_state_correction_get_yawErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field vxErr from state_correction message
*
* @return x velocity
*/
static inline float mavlink_msg_state_correction_get_vxErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field vyErr from state_correction message
*
* @return y velocity
*/
static inline float mavlink_msg_state_correction_get_vyErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field vzErr from state_correction message
*
* @return z velocity
*/
static inline float mavlink_msg_state_correction_get_vzErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a state_correction message into a struct
*
* @param msg The message to decode
* @param state_correction C-struct to decode the message contents into
*/
static inline void mavlink_msg_state_correction_decode(const mavlink_message_t* msg, mavlink_state_correction_t* state_correction)
{
#if MAVLINK_NEED_BYTE_SWAP
state_correction->xErr = mavlink_msg_state_correction_get_xErr(msg);
state_correction->yErr = mavlink_msg_state_correction_get_yErr(msg);
state_correction->zErr = mavlink_msg_state_correction_get_zErr(msg);
state_correction->rollErr = mavlink_msg_state_correction_get_rollErr(msg);
state_correction->pitchErr = mavlink_msg_state_correction_get_pitchErr(msg);
state_correction->yawErr = mavlink_msg_state_correction_get_yawErr(msg);
state_correction->vxErr = mavlink_msg_state_correction_get_vxErr(msg);
state_correction->vyErr = mavlink_msg_state_correction_get_vyErr(msg);
state_correction->vzErr = mavlink_msg_state_correction_get_vzErr(msg);
#else
memcpy(state_correction, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_statustext.h
0,0 → 1,160
// MESSAGE STATUSTEXT PACKING
 
#define MAVLINK_MSG_ID_STATUSTEXT 254
 
typedef struct __mavlink_statustext_t
{
uint8_t severity; ///< Severity of status, 0 = info message, 255 = critical fault
int8_t text[50]; ///< Status text message, without null termination character
} mavlink_statustext_t;
 
#define MAVLINK_MSG_ID_STATUSTEXT_LEN 51
#define MAVLINK_MSG_ID_254_LEN 51
 
#define MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN 50
 
#define MAVLINK_MESSAGE_INFO_STATUSTEXT { \
"STATUSTEXT", \
2, \
{ { "severity", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_statustext_t, severity) }, \
{ "text", NULL, MAVLINK_TYPE_INT8_T, 50, 1, offsetof(mavlink_statustext_t, text) }, \
} \
}
 
 
/**
* @brief Pack a statustext message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param severity Severity of status, 0 = info message, 255 = critical fault
* @param text Status text message, without null termination character
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_statustext_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t severity, const int8_t *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_int8_t_array(buf, 1, text, 50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 51);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(int8_t)*50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 51);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATUSTEXT;
return mavlink_finalize_message(msg, system_id, component_id, 51);
}
 
/**
* @brief Pack a statustext message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param severity Severity of status, 0 = info message, 255 = critical fault
* @param text Status text message, without null termination character
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_statustext_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t severity,const int8_t *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_int8_t_array(buf, 1, text, 50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 51);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(int8_t)*50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 51);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATUSTEXT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 51);
}
 
/**
* @brief Encode a statustext struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param statustext C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_statustext_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_statustext_t* statustext)
{
return mavlink_msg_statustext_pack(system_id, component_id, msg, statustext->severity, statustext->text);
}
 
/**
* @brief Send a statustext message
* @param chan MAVLink channel to send the message
*
* @param severity Severity of status, 0 = info message, 255 = critical fault
* @param text Status text message, without null termination character
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_statustext_send(mavlink_channel_t chan, uint8_t severity, const int8_t *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_int8_t_array(buf, 1, text, 50);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATUSTEXT, buf, 51);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(int8_t)*50);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATUSTEXT, (const char *)&packet, 51);
#endif
}
 
#endif
 
// MESSAGE STATUSTEXT UNPACKING
 
 
/**
* @brief Get field severity from statustext message
*
* @return Severity of status, 0 = info message, 255 = critical fault
*/
static inline uint8_t mavlink_msg_statustext_get_severity(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field text from statustext message
*
* @return Status text message, without null termination character
*/
static inline uint16_t mavlink_msg_statustext_get_text(const mavlink_message_t* msg, int8_t *text)
{
return _MAV_RETURN_int8_t_array(msg, text, 50, 1);
}
 
/**
* @brief Decode a statustext message into a struct
*
* @param msg The message to decode
* @param statustext C-struct to decode the message contents into
*/
static inline void mavlink_msg_statustext_decode(const mavlink_message_t* msg, mavlink_statustext_t* statustext)
{
#if MAVLINK_NEED_BYTE_SWAP
statustext->severity = mavlink_msg_statustext_get_severity(msg);
mavlink_msg_statustext_get_text(msg, statustext->text);
#else
memcpy(statustext, _MAV_PAYLOAD(msg), 51);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_sys_status.h
0,0 → 1,276
// MESSAGE SYS_STATUS PACKING
 
#define MAVLINK_MSG_ID_SYS_STATUS 34
 
typedef struct __mavlink_sys_status_t
{
uint8_t mode; ///< System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h
uint8_t nav_mode; ///< Navigation mode, see MAV_NAV_MODE ENUM
uint8_t status; ///< System status flag, see MAV_STATUS ENUM
uint16_t load; ///< Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
uint16_t vbat; ///< Battery voltage, in millivolts (1 = 1 millivolt)
uint16_t battery_remaining; ///< Remaining battery energy: (0%: 0, 100%: 1000)
uint16_t packet_drop; ///< Dropped packets (packets that were corrupted on reception on the MAV)
} mavlink_sys_status_t;
 
#define MAVLINK_MSG_ID_SYS_STATUS_LEN 11
#define MAVLINK_MSG_ID_34_LEN 11
 
 
 
#define MAVLINK_MESSAGE_INFO_SYS_STATUS { \
"SYS_STATUS", \
7, \
{ { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_sys_status_t, mode) }, \
{ "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_sys_status_t, nav_mode) }, \
{ "status", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_sys_status_t, status) }, \
{ "load", NULL, MAVLINK_TYPE_UINT16_T, 0, 3, offsetof(mavlink_sys_status_t, load) }, \
{ "vbat", NULL, MAVLINK_TYPE_UINT16_T, 0, 5, offsetof(mavlink_sys_status_t, vbat) }, \
{ "battery_remaining", NULL, MAVLINK_TYPE_UINT16_T, 0, 7, offsetof(mavlink_sys_status_t, battery_remaining) }, \
{ "packet_drop", NULL, MAVLINK_TYPE_UINT16_T, 0, 9, offsetof(mavlink_sys_status_t, packet_drop) }, \
} \
}
 
 
/**
* @brief Pack a sys_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param mode System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h
* @param nav_mode Navigation mode, see MAV_NAV_MODE ENUM
* @param status System status flag, see MAV_STATUS ENUM
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param vbat Battery voltage, in millivolts (1 = 1 millivolt)
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 1000)
* @param packet_drop Dropped packets (packets that were corrupted on reception on the MAV)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t mode, uint8_t nav_mode, uint8_t status, uint16_t load, uint16_t vbat, uint16_t battery_remaining, uint16_t packet_drop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[11];
_mav_put_uint8_t(buf, 0, mode);
_mav_put_uint8_t(buf, 1, nav_mode);
_mav_put_uint8_t(buf, 2, status);
_mav_put_uint16_t(buf, 3, load);
_mav_put_uint16_t(buf, 5, vbat);
_mav_put_uint16_t(buf, 7, battery_remaining);
_mav_put_uint16_t(buf, 9, packet_drop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 11);
#else
mavlink_sys_status_t packet;
packet.mode = mode;
packet.nav_mode = nav_mode;
packet.status = status;
packet.load = load;
packet.vbat = vbat;
packet.battery_remaining = battery_remaining;
packet.packet_drop = packet_drop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 11);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 11);
}
 
/**
* @brief Pack a sys_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param mode System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h
* @param nav_mode Navigation mode, see MAV_NAV_MODE ENUM
* @param status System status flag, see MAV_STATUS ENUM
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param vbat Battery voltage, in millivolts (1 = 1 millivolt)
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 1000)
* @param packet_drop Dropped packets (packets that were corrupted on reception on the MAV)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t mode,uint8_t nav_mode,uint8_t status,uint16_t load,uint16_t vbat,uint16_t battery_remaining,uint16_t packet_drop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[11];
_mav_put_uint8_t(buf, 0, mode);
_mav_put_uint8_t(buf, 1, nav_mode);
_mav_put_uint8_t(buf, 2, status);
_mav_put_uint16_t(buf, 3, load);
_mav_put_uint16_t(buf, 5, vbat);
_mav_put_uint16_t(buf, 7, battery_remaining);
_mav_put_uint16_t(buf, 9, packet_drop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 11);
#else
mavlink_sys_status_t packet;
packet.mode = mode;
packet.nav_mode = nav_mode;
packet.status = status;
packet.load = load;
packet.vbat = vbat;
packet.battery_remaining = battery_remaining;
packet.packet_drop = packet_drop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 11);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 11);
}
 
/**
* @brief Encode a sys_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param sys_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_sys_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_sys_status_t* sys_status)
{
return mavlink_msg_sys_status_pack(system_id, component_id, msg, sys_status->mode, sys_status->nav_mode, sys_status->status, sys_status->load, sys_status->vbat, sys_status->battery_remaining, sys_status->packet_drop);
}
 
/**
* @brief Send a sys_status message
* @param chan MAVLink channel to send the message
*
* @param mode System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h
* @param nav_mode Navigation mode, see MAV_NAV_MODE ENUM
* @param status System status flag, see MAV_STATUS ENUM
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param vbat Battery voltage, in millivolts (1 = 1 millivolt)
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 1000)
* @param packet_drop Dropped packets (packets that were corrupted on reception on the MAV)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_sys_status_send(mavlink_channel_t chan, uint8_t mode, uint8_t nav_mode, uint8_t status, uint16_t load, uint16_t vbat, uint16_t battery_remaining, uint16_t packet_drop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[11];
_mav_put_uint8_t(buf, 0, mode);
_mav_put_uint8_t(buf, 1, nav_mode);
_mav_put_uint8_t(buf, 2, status);
_mav_put_uint16_t(buf, 3, load);
_mav_put_uint16_t(buf, 5, vbat);
_mav_put_uint16_t(buf, 7, battery_remaining);
_mav_put_uint16_t(buf, 9, packet_drop);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_STATUS, buf, 11);
#else
mavlink_sys_status_t packet;
packet.mode = mode;
packet.nav_mode = nav_mode;
packet.status = status;
packet.load = load;
packet.vbat = vbat;
packet.battery_remaining = battery_remaining;
packet.packet_drop = packet_drop;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_STATUS, (const char *)&packet, 11);
#endif
}
 
#endif
 
// MESSAGE SYS_STATUS UNPACKING
 
 
/**
* @brief Get field mode from sys_status message
*
* @return System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h
*/
static inline uint8_t mavlink_msg_sys_status_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field nav_mode from sys_status message
*
* @return Navigation mode, see MAV_NAV_MODE ENUM
*/
static inline uint8_t mavlink_msg_sys_status_get_nav_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field status from sys_status message
*
* @return System status flag, see MAV_STATUS ENUM
*/
static inline uint8_t mavlink_msg_sys_status_get_status(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field load from sys_status message
*
* @return Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
*/
static inline uint16_t mavlink_msg_sys_status_get_load(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 3);
}
 
/**
* @brief Get field vbat from sys_status message
*
* @return Battery voltage, in millivolts (1 = 1 millivolt)
*/
static inline uint16_t mavlink_msg_sys_status_get_vbat(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 5);
}
 
/**
* @brief Get field battery_remaining from sys_status message
*
* @return Remaining battery energy: (0%: 0, 100%: 1000)
*/
static inline uint16_t mavlink_msg_sys_status_get_battery_remaining(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 7);
}
 
/**
* @brief Get field packet_drop from sys_status message
*
* @return Dropped packets (packets that were corrupted on reception on the MAV)
*/
static inline uint16_t mavlink_msg_sys_status_get_packet_drop(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 9);
}
 
/**
* @brief Decode a sys_status message into a struct
*
* @param msg The message to decode
* @param sys_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_sys_status_decode(const mavlink_message_t* msg, mavlink_sys_status_t* sys_status)
{
#if MAVLINK_NEED_BYTE_SWAP
sys_status->mode = mavlink_msg_sys_status_get_mode(msg);
sys_status->nav_mode = mavlink_msg_sys_status_get_nav_mode(msg);
sys_status->status = mavlink_msg_sys_status_get_status(msg);
sys_status->load = mavlink_msg_sys_status_get_load(msg);
sys_status->vbat = mavlink_msg_sys_status_get_vbat(msg);
sys_status->battery_remaining = mavlink_msg_sys_status_get_battery_remaining(msg);
sys_status->packet_drop = mavlink_msg_sys_status_get_packet_drop(msg);
#else
memcpy(sys_status, _MAV_PAYLOAD(msg), 11);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_system_time.h
0,0 → 1,144
// MESSAGE SYSTEM_TIME PACKING
 
#define MAVLINK_MSG_ID_SYSTEM_TIME 2
 
typedef struct __mavlink_system_time_t
{
uint64_t time_usec; ///< Timestamp of the master clock in microseconds since UNIX epoch.
} mavlink_system_time_t;
 
#define MAVLINK_MSG_ID_SYSTEM_TIME_LEN 8
#define MAVLINK_MSG_ID_2_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_SYSTEM_TIME { \
"SYSTEM_TIME", \
1, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_system_time_t, time_usec) }, \
} \
}
 
 
/**
* @brief Pack a system_time message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp of the master clock in microseconds since UNIX epoch.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint64_t(buf, 0, time_usec);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_system_time_t packet;
packet.time_usec = time_usec;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a system_time message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp of the master clock in microseconds since UNIX epoch.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint64_t(buf, 0, time_usec);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_system_time_t packet;
packet.time_usec = time_usec;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a system_time struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param system_time C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_system_time_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_system_time_t* system_time)
{
return mavlink_msg_system_time_pack(system_id, component_id, msg, system_time->time_usec);
}
 
/**
* @brief Send a system_time message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp of the master clock in microseconds since UNIX epoch.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_system_time_send(mavlink_channel_t chan, uint64_t time_usec)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint64_t(buf, 0, time_usec);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME, buf, 8);
#else
mavlink_system_time_t packet;
packet.time_usec = time_usec;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE SYSTEM_TIME UNPACKING
 
 
/**
* @brief Get field time_usec from system_time message
*
* @return Timestamp of the master clock in microseconds since UNIX epoch.
*/
static inline uint64_t mavlink_msg_system_time_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Decode a system_time message into a struct
*
* @param msg The message to decode
* @param system_time C-struct to decode the message contents into
*/
static inline void mavlink_msg_system_time_decode(const mavlink_message_t* msg, mavlink_system_time_t* system_time)
{
#if MAVLINK_NEED_BYTE_SWAP
system_time->time_usec = mavlink_msg_system_time_get_time_usec(msg);
#else
memcpy(system_time, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_system_time_utc.h
0,0 → 1,166
// MESSAGE SYSTEM_TIME_UTC PACKING
 
#define MAVLINK_MSG_ID_SYSTEM_TIME_UTC 4
 
typedef struct __mavlink_system_time_utc_t
{
uint32_t utc_date; ///< GPS UTC date ddmmyy
uint32_t utc_time; ///< GPS UTC time hhmmss
} mavlink_system_time_utc_t;
 
#define MAVLINK_MSG_ID_SYSTEM_TIME_UTC_LEN 8
#define MAVLINK_MSG_ID_4_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_SYSTEM_TIME_UTC { \
"SYSTEM_TIME_UTC", \
2, \
{ { "utc_date", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_system_time_utc_t, utc_date) }, \
{ "utc_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_system_time_utc_t, utc_time) }, \
} \
}
 
 
/**
* @brief Pack a system_time_utc message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param utc_date GPS UTC date ddmmyy
* @param utc_time GPS UTC time hhmmss
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_utc_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t utc_date, uint32_t utc_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, utc_date);
_mav_put_uint32_t(buf, 4, utc_time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_system_time_utc_t packet;
packet.utc_date = utc_date;
packet.utc_time = utc_time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME_UTC;
return mavlink_finalize_message(msg, system_id, component_id, 8);
}
 
/**
* @brief Pack a system_time_utc message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param utc_date GPS UTC date ddmmyy
* @param utc_time GPS UTC time hhmmss
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_utc_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t utc_date,uint32_t utc_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, utc_date);
_mav_put_uint32_t(buf, 4, utc_time);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_system_time_utc_t packet;
packet.utc_date = utc_date;
packet.utc_time = utc_time;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME_UTC;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8);
}
 
/**
* @brief Encode a system_time_utc struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param system_time_utc C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_system_time_utc_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_system_time_utc_t* system_time_utc)
{
return mavlink_msg_system_time_utc_pack(system_id, component_id, msg, system_time_utc->utc_date, system_time_utc->utc_time);
}
 
/**
* @brief Send a system_time_utc message
* @param chan MAVLink channel to send the message
*
* @param utc_date GPS UTC date ddmmyy
* @param utc_time GPS UTC time hhmmss
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_system_time_utc_send(mavlink_channel_t chan, uint32_t utc_date, uint32_t utc_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, utc_date);
_mav_put_uint32_t(buf, 4, utc_time);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME_UTC, buf, 8);
#else
mavlink_system_time_utc_t packet;
packet.utc_date = utc_date;
packet.utc_time = utc_time;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME_UTC, (const char *)&packet, 8);
#endif
}
 
#endif
 
// MESSAGE SYSTEM_TIME_UTC UNPACKING
 
 
/**
* @brief Get field utc_date from system_time_utc message
*
* @return GPS UTC date ddmmyy
*/
static inline uint32_t mavlink_msg_system_time_utc_get_utc_date(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field utc_time from system_time_utc message
*
* @return GPS UTC time hhmmss
*/
static inline uint32_t mavlink_msg_system_time_utc_get_utc_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 4);
}
 
/**
* @brief Decode a system_time_utc message into a struct
*
* @param msg The message to decode
* @param system_time_utc C-struct to decode the message contents into
*/
static inline void mavlink_msg_system_time_utc_decode(const mavlink_message_t* msg, mavlink_system_time_utc_t* system_time_utc)
{
#if MAVLINK_NEED_BYTE_SWAP
system_time_utc->utc_date = mavlink_msg_system_time_utc_get_utc_date(msg);
system_time_utc->utc_time = mavlink_msg_system_time_utc_get_utc_time(msg);
#else
memcpy(system_time_utc, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_vfr_hud.h
0,0 → 1,254
// MESSAGE VFR_HUD PACKING
 
#define MAVLINK_MSG_ID_VFR_HUD 74
 
typedef struct __mavlink_vfr_hud_t
{
float airspeed; ///< Current airspeed in m/s
float groundspeed; ///< Current ground speed in m/s
int16_t heading; ///< Current heading in degrees, in compass units (0..360, 0=north)
uint16_t throttle; ///< Current throttle setting in integer percent, 0 to 100
float alt; ///< Current altitude (MSL), in meters
float climb; ///< Current climb rate in meters/second
} mavlink_vfr_hud_t;
 
#define MAVLINK_MSG_ID_VFR_HUD_LEN 20
#define MAVLINK_MSG_ID_74_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_VFR_HUD { \
"VFR_HUD", \
6, \
{ { "airspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_vfr_hud_t, airspeed) }, \
{ "groundspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vfr_hud_t, groundspeed) }, \
{ "heading", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_vfr_hud_t, heading) }, \
{ "throttle", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_vfr_hud_t, throttle) }, \
{ "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_vfr_hud_t, alt) }, \
{ "climb", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vfr_hud_t, climb) }, \
} \
}
 
 
/**
* @brief Pack a vfr_hud message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vfr_hud_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float airspeed, float groundspeed, int16_t heading, uint16_t throttle, float alt, float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_int16_t(buf, 8, heading);
_mav_put_uint16_t(buf, 10, throttle);
_mav_put_float(buf, 12, alt);
_mav_put_float(buf, 16, climb);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.heading = heading;
packet.throttle = throttle;
packet.alt = alt;
packet.climb = climb;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VFR_HUD;
return mavlink_finalize_message(msg, system_id, component_id, 20);
}
 
/**
* @brief Pack a vfr_hud message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vfr_hud_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float airspeed,float groundspeed,int16_t heading,uint16_t throttle,float alt,float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_int16_t(buf, 8, heading);
_mav_put_uint16_t(buf, 10, throttle);
_mav_put_float(buf, 12, alt);
_mav_put_float(buf, 16, climb);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.heading = heading;
packet.throttle = throttle;
packet.alt = alt;
packet.climb = climb;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VFR_HUD;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20);
}
 
/**
* @brief Encode a vfr_hud struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param vfr_hud C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_vfr_hud_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vfr_hud_t* vfr_hud)
{
return mavlink_msg_vfr_hud_pack(system_id, component_id, msg, vfr_hud->airspeed, vfr_hud->groundspeed, vfr_hud->heading, vfr_hud->throttle, vfr_hud->alt, vfr_hud->climb);
}
 
/**
* @brief Send a vfr_hud message
* @param chan MAVLink channel to send the message
*
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_vfr_hud_send(mavlink_channel_t chan, float airspeed, float groundspeed, int16_t heading, uint16_t throttle, float alt, float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_int16_t(buf, 8, heading);
_mav_put_uint16_t(buf, 10, throttle);
_mav_put_float(buf, 12, alt);
_mav_put_float(buf, 16, climb);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VFR_HUD, buf, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.heading = heading;
packet.throttle = throttle;
packet.alt = alt;
packet.climb = climb;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VFR_HUD, (const char *)&packet, 20);
#endif
}
 
#endif
 
// MESSAGE VFR_HUD UNPACKING
 
 
/**
* @brief Get field airspeed from vfr_hud message
*
* @return Current airspeed in m/s
*/
static inline float mavlink_msg_vfr_hud_get_airspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field groundspeed from vfr_hud message
*
* @return Current ground speed in m/s
*/
static inline float mavlink_msg_vfr_hud_get_groundspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field heading from vfr_hud message
*
* @return Current heading in degrees, in compass units (0..360, 0=north)
*/
static inline int16_t mavlink_msg_vfr_hud_get_heading(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field throttle from vfr_hud message
*
* @return Current throttle setting in integer percent, 0 to 100
*/
static inline uint16_t mavlink_msg_vfr_hud_get_throttle(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field alt from vfr_hud message
*
* @return Current altitude (MSL), in meters
*/
static inline float mavlink_msg_vfr_hud_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field climb from vfr_hud message
*
* @return Current climb rate in meters/second
*/
static inline float mavlink_msg_vfr_hud_get_climb(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a vfr_hud message into a struct
*
* @param msg The message to decode
* @param vfr_hud C-struct to decode the message contents into
*/
static inline void mavlink_msg_vfr_hud_decode(const mavlink_message_t* msg, mavlink_vfr_hud_t* vfr_hud)
{
#if MAVLINK_NEED_BYTE_SWAP
vfr_hud->airspeed = mavlink_msg_vfr_hud_get_airspeed(msg);
vfr_hud->groundspeed = mavlink_msg_vfr_hud_get_groundspeed(msg);
vfr_hud->heading = mavlink_msg_vfr_hud_get_heading(msg);
vfr_hud->throttle = mavlink_msg_vfr_hud_get_throttle(msg);
vfr_hud->alt = mavlink_msg_vfr_hud_get_alt(msg);
vfr_hud->climb = mavlink_msg_vfr_hud_get_climb(msg);
#else
memcpy(vfr_hud, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint.h
0,0 → 1,430
// MESSAGE WAYPOINT PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT 39
 
typedef struct __mavlink_waypoint_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint16_t seq; ///< Sequence
uint8_t frame; ///< The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h
uint8_t command; ///< The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs
uint8_t current; ///< false:0, true:1
uint8_t autocontinue; ///< autocontinue to next wp
float param1; ///< PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters
float param2; ///< PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
float param3; ///< PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
float param4; ///< PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH
float x; ///< PARAM5 / local: x position, global: latitude
float y; ///< PARAM6 / y position: global: longitude
float z; ///< PARAM7 / z position: global: altitude
} mavlink_waypoint_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_LEN 36
#define MAVLINK_MSG_ID_39_LEN 36
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT { \
"WAYPOINT", \
14, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_t, target_component) }, \
{ "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_waypoint_t, seq) }, \
{ "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_waypoint_t, frame) }, \
{ "command", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_waypoint_t, command) }, \
{ "current", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_waypoint_t, current) }, \
{ "autocontinue", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_waypoint_t, autocontinue) }, \
{ "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_waypoint_t, param1) }, \
{ "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_waypoint_t, param2) }, \
{ "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_waypoint_t, param3) }, \
{ "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_waypoint_t, param4) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_waypoint_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_waypoint_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_waypoint_t, z) }, \
} \
}
 
 
/**
* @brief Pack a waypoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq, uint8_t frame, uint8_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
_mav_put_uint8_t(buf, 4, frame);
_mav_put_uint8_t(buf, 5, command);
_mav_put_uint8_t(buf, 6, current);
_mav_put_uint8_t(buf, 7, autocontinue);
_mav_put_float(buf, 8, param1);
_mav_put_float(buf, 12, param2);
_mav_put_float(buf, 16, param3);
_mav_put_float(buf, 20, param4);
_mav_put_float(buf, 24, x);
_mav_put_float(buf, 28, y);
_mav_put_float(buf, 32, z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_waypoint_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
packet.frame = frame;
packet.command = command;
packet.current = current;
packet.autocontinue = autocontinue;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 36);
}
 
/**
* @brief Pack a waypoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq,uint8_t frame,uint8_t command,uint8_t current,uint8_t autocontinue,float param1,float param2,float param3,float param4,float x,float y,float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
_mav_put_uint8_t(buf, 4, frame);
_mav_put_uint8_t(buf, 5, command);
_mav_put_uint8_t(buf, 6, current);
_mav_put_uint8_t(buf, 7, autocontinue);
_mav_put_float(buf, 8, param1);
_mav_put_float(buf, 12, param2);
_mav_put_float(buf, 16, param3);
_mav_put_float(buf, 20, param4);
_mav_put_float(buf, 24, x);
_mav_put_float(buf, 28, y);
_mav_put_float(buf, 32, z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_waypoint_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
packet.frame = frame;
packet.command = command;
packet.current = current;
packet.autocontinue = autocontinue;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36);
}
 
/**
* @brief Encode a waypoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_t* waypoint)
{
return mavlink_msg_waypoint_pack(system_id, component_id, msg, waypoint->target_system, waypoint->target_component, waypoint->seq, waypoint->frame, waypoint->command, waypoint->current, waypoint->autocontinue, waypoint->param1, waypoint->param2, waypoint->param3, waypoint->param4, waypoint->x, waypoint->y, waypoint->z);
}
 
/**
* @brief Send a waypoint message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq, uint8_t frame, uint8_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
_mav_put_uint8_t(buf, 4, frame);
_mav_put_uint8_t(buf, 5, command);
_mav_put_uint8_t(buf, 6, current);
_mav_put_uint8_t(buf, 7, autocontinue);
_mav_put_float(buf, 8, param1);
_mav_put_float(buf, 12, param2);
_mav_put_float(buf, 16, param3);
_mav_put_float(buf, 20, param4);
_mav_put_float(buf, 24, x);
_mav_put_float(buf, 28, y);
_mav_put_float(buf, 32, z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT, buf, 36);
#else
mavlink_waypoint_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
packet.frame = frame;
packet.command = command;
packet.current = current;
packet.autocontinue = autocontinue;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT, (const char *)&packet, 36);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT UNPACKING
 
 
/**
* @brief Get field target_system from waypoint message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field seq from waypoint message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_waypoint_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field frame from waypoint message
*
* @return The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h
*/
static inline uint8_t mavlink_msg_waypoint_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field command from waypoint message
*
* @return The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs
*/
static inline uint8_t mavlink_msg_waypoint_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field current from waypoint message
*
* @return false:0, true:1
*/
static inline uint8_t mavlink_msg_waypoint_get_current(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field autocontinue from waypoint message
*
* @return autocontinue to next wp
*/
static inline uint8_t mavlink_msg_waypoint_get_autocontinue(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field param1 from waypoint message
*
* @return PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters
*/
static inline float mavlink_msg_waypoint_get_param1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field param2 from waypoint message
*
* @return PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
*/
static inline float mavlink_msg_waypoint_get_param2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field param3 from waypoint message
*
* @return PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
*/
static inline float mavlink_msg_waypoint_get_param3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field param4 from waypoint message
*
* @return PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH
*/
static inline float mavlink_msg_waypoint_get_param4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field x from waypoint message
*
* @return PARAM5 / local: x position, global: latitude
*/
static inline float mavlink_msg_waypoint_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field y from waypoint message
*
* @return PARAM6 / y position: global: longitude
*/
static inline float mavlink_msg_waypoint_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field z from waypoint message
*
* @return PARAM7 / z position: global: altitude
*/
static inline float mavlink_msg_waypoint_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a waypoint message into a struct
*
* @param msg The message to decode
* @param waypoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_decode(const mavlink_message_t* msg, mavlink_waypoint_t* waypoint)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint->target_system = mavlink_msg_waypoint_get_target_system(msg);
waypoint->target_component = mavlink_msg_waypoint_get_target_component(msg);
waypoint->seq = mavlink_msg_waypoint_get_seq(msg);
waypoint->frame = mavlink_msg_waypoint_get_frame(msg);
waypoint->command = mavlink_msg_waypoint_get_command(msg);
waypoint->current = mavlink_msg_waypoint_get_current(msg);
waypoint->autocontinue = mavlink_msg_waypoint_get_autocontinue(msg);
waypoint->param1 = mavlink_msg_waypoint_get_param1(msg);
waypoint->param2 = mavlink_msg_waypoint_get_param2(msg);
waypoint->param3 = mavlink_msg_waypoint_get_param3(msg);
waypoint->param4 = mavlink_msg_waypoint_get_param4(msg);
waypoint->x = mavlink_msg_waypoint_get_x(msg);
waypoint->y = mavlink_msg_waypoint_get_y(msg);
waypoint->z = mavlink_msg_waypoint_get_z(msg);
#else
memcpy(waypoint, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_ack.h
0,0 → 1,188
// MESSAGE WAYPOINT_ACK PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_ACK 47
 
typedef struct __mavlink_waypoint_ack_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t type; ///< 0: OK, 1: Error
} mavlink_waypoint_ack_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_ACK_LEN 3
#define MAVLINK_MSG_ID_47_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_ACK { \
"WAYPOINT_ACK", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_ack_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_ack_t, target_component) }, \
{ "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_waypoint_ack_t, type) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param type 0: OK, 1: Error
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_waypoint_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 3);
}
 
/**
* @brief Pack a waypoint_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param type 0: OK, 1: Error
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_waypoint_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3);
}
 
/**
* @brief Encode a waypoint_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_ack_t* waypoint_ack)
{
return mavlink_msg_waypoint_ack_pack(system_id, component_id, msg, waypoint_ack->target_system, waypoint_ack->target_component, waypoint_ack->type);
}
 
/**
* @brief Send a waypoint_ack message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param type 0: OK, 1: Error
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_ack_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_ACK, buf, 3);
#else
mavlink_waypoint_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_ACK, (const char *)&packet, 3);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_ACK UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_ack message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_ack_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_ack message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_ack_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field type from waypoint_ack message
*
* @return 0: OK, 1: Error
*/
static inline uint8_t mavlink_msg_waypoint_ack_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a waypoint_ack message into a struct
*
* @param msg The message to decode
* @param waypoint_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_ack_decode(const mavlink_message_t* msg, mavlink_waypoint_ack_t* waypoint_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_ack->target_system = mavlink_msg_waypoint_ack_get_target_system(msg);
waypoint_ack->target_component = mavlink_msg_waypoint_ack_get_target_component(msg);
waypoint_ack->type = mavlink_msg_waypoint_ack_get_type(msg);
#else
memcpy(waypoint_ack, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_clear_all.h
0,0 → 1,166
// MESSAGE WAYPOINT_CLEAR_ALL PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL 45
 
typedef struct __mavlink_waypoint_clear_all_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_waypoint_clear_all_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL_LEN 2
#define MAVLINK_MSG_ID_45_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_CLEAR_ALL { \
"WAYPOINT_CLEAR_ALL", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_clear_all_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_clear_all_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_clear_all message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_clear_all_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a waypoint_clear_all message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_clear_all_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a waypoint_clear_all struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_clear_all C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_clear_all_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_clear_all_t* waypoint_clear_all)
{
return mavlink_msg_waypoint_clear_all_pack(system_id, component_id, msg, waypoint_clear_all->target_system, waypoint_clear_all->target_component);
}
 
/**
* @brief Send a waypoint_clear_all message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_clear_all_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL, buf, 2);
#else
mavlink_waypoint_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_CLEAR_ALL UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_clear_all message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_clear_all_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_clear_all message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_clear_all_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a waypoint_clear_all message into a struct
*
* @param msg The message to decode
* @param waypoint_clear_all C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_clear_all_decode(const mavlink_message_t* msg, mavlink_waypoint_clear_all_t* waypoint_clear_all)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_clear_all->target_system = mavlink_msg_waypoint_clear_all_get_target_system(msg);
waypoint_clear_all->target_component = mavlink_msg_waypoint_clear_all_get_target_component(msg);
#else
memcpy(waypoint_clear_all, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_count.h
0,0 → 1,188
// MESSAGE WAYPOINT_COUNT PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_COUNT 44
 
typedef struct __mavlink_waypoint_count_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint16_t count; ///< Number of Waypoints in the Sequence
} mavlink_waypoint_count_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_COUNT_LEN 4
#define MAVLINK_MSG_ID_44_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_COUNT { \
"WAYPOINT_COUNT", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_count_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_count_t, target_component) }, \
{ "count", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_waypoint_count_t, count) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_count message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param count Number of Waypoints in the Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_count_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, count);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_count_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.count = count;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_COUNT;
return mavlink_finalize_message(msg, system_id, component_id, 4);
}
 
/**
* @brief Pack a waypoint_count message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param count Number of Waypoints in the Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_count_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, count);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_count_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.count = count;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_COUNT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4);
}
 
/**
* @brief Encode a waypoint_count struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_count C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_count_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_count_t* waypoint_count)
{
return mavlink_msg_waypoint_count_pack(system_id, component_id, msg, waypoint_count->target_system, waypoint_count->target_component, waypoint_count->count);
}
 
/**
* @brief Send a waypoint_count message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param count Number of Waypoints in the Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_count_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, count);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_COUNT, buf, 4);
#else
mavlink_waypoint_count_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.count = count;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_COUNT, (const char *)&packet, 4);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_COUNT UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_count message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_count_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_count message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_count_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field count from waypoint_count message
*
* @return Number of Waypoints in the Sequence
*/
static inline uint16_t mavlink_msg_waypoint_count_get_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a waypoint_count message into a struct
*
* @param msg The message to decode
* @param waypoint_count C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_count_decode(const mavlink_message_t* msg, mavlink_waypoint_count_t* waypoint_count)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_count->target_system = mavlink_msg_waypoint_count_get_target_system(msg);
waypoint_count->target_component = mavlink_msg_waypoint_count_get_target_component(msg);
waypoint_count->count = mavlink_msg_waypoint_count_get_count(msg);
#else
memcpy(waypoint_count, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_current.h
0,0 → 1,144
// MESSAGE WAYPOINT_CURRENT PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_CURRENT 42
 
typedef struct __mavlink_waypoint_current_t
{
uint16_t seq; ///< Sequence
} mavlink_waypoint_current_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_CURRENT_LEN 2
#define MAVLINK_MSG_ID_42_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_CURRENT { \
"WAYPOINT_CURRENT", \
1, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_waypoint_current_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_current message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_current_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_current_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_CURRENT;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a waypoint_current message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_current_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_current_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_CURRENT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a waypoint_current struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_current C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_current_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_current_t* waypoint_current)
{
return mavlink_msg_waypoint_current_pack(system_id, component_id, msg, waypoint_current->seq);
}
 
/**
* @brief Send a waypoint_current message
* @param chan MAVLink channel to send the message
*
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_current_send(mavlink_channel_t chan, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_CURRENT, buf, 2);
#else
mavlink_waypoint_current_t packet;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_CURRENT, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_CURRENT UNPACKING
 
 
/**
* @brief Get field seq from waypoint_current message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_waypoint_current_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a waypoint_current message into a struct
*
* @param msg The message to decode
* @param waypoint_current C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_current_decode(const mavlink_message_t* msg, mavlink_waypoint_current_t* waypoint_current)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_current->seq = mavlink_msg_waypoint_current_get_seq(msg);
#else
memcpy(waypoint_current, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_reached.h
0,0 → 1,144
// MESSAGE WAYPOINT_REACHED PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_REACHED 46
 
typedef struct __mavlink_waypoint_reached_t
{
uint16_t seq; ///< Sequence
} mavlink_waypoint_reached_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_REACHED_LEN 2
#define MAVLINK_MSG_ID_46_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_REACHED { \
"WAYPOINT_REACHED", \
1, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_waypoint_reached_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_reached message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_reached_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_reached_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REACHED;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a waypoint_reached message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_reached_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_reached_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REACHED;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a waypoint_reached struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_reached C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_reached_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_reached_t* waypoint_reached)
{
return mavlink_msg_waypoint_reached_pack(system_id, component_id, msg, waypoint_reached->seq);
}
 
/**
* @brief Send a waypoint_reached message
* @param chan MAVLink channel to send the message
*
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_reached_send(mavlink_channel_t chan, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REACHED, buf, 2);
#else
mavlink_waypoint_reached_t packet;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REACHED, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_REACHED UNPACKING
 
 
/**
* @brief Get field seq from waypoint_reached message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_waypoint_reached_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a waypoint_reached message into a struct
*
* @param msg The message to decode
* @param waypoint_reached C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_reached_decode(const mavlink_message_t* msg, mavlink_waypoint_reached_t* waypoint_reached)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_reached->seq = mavlink_msg_waypoint_reached_get_seq(msg);
#else
memcpy(waypoint_reached, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_request.h
0,0 → 1,188
// MESSAGE WAYPOINT_REQUEST PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST 40
 
typedef struct __mavlink_waypoint_request_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint16_t seq; ///< Sequence
} mavlink_waypoint_request_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LEN 4
#define MAVLINK_MSG_ID_40_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST { \
"WAYPOINT_REQUEST", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_request_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_request_t, target_component) }, \
{ "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_waypoint_request_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_request message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_request_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_request_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REQUEST;
return mavlink_finalize_message(msg, system_id, component_id, 4);
}
 
/**
* @brief Pack a waypoint_request message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_request_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_request_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REQUEST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4);
}
 
/**
* @brief Encode a waypoint_request struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_request C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_request_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_request_t* waypoint_request)
{
return mavlink_msg_waypoint_request_pack(system_id, component_id, msg, waypoint_request->target_system, waypoint_request->target_component, waypoint_request->seq);
}
 
/**
* @brief Send a waypoint_request message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_request_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REQUEST, buf, 4);
#else
mavlink_waypoint_request_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REQUEST, (const char *)&packet, 4);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_REQUEST UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_request message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_request_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_request message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_request_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field seq from waypoint_request message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_waypoint_request_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a waypoint_request message into a struct
*
* @param msg The message to decode
* @param waypoint_request C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_request_decode(const mavlink_message_t* msg, mavlink_waypoint_request_t* waypoint_request)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_request->target_system = mavlink_msg_waypoint_request_get_target_system(msg);
waypoint_request->target_component = mavlink_msg_waypoint_request_get_target_component(msg);
waypoint_request->seq = mavlink_msg_waypoint_request_get_seq(msg);
#else
memcpy(waypoint_request, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_request_list.h
0,0 → 1,166
// MESSAGE WAYPOINT_REQUEST_LIST PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST 43
 
typedef struct __mavlink_waypoint_request_list_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_waypoint_request_list_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST_LEN 2
#define MAVLINK_MSG_ID_43_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_REQUEST_LIST { \
"WAYPOINT_REQUEST_LIST", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_request_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_request_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_request_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_request_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 2);
}
 
/**
* @brief Pack a waypoint_request_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_request_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_waypoint_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2);
}
 
/**
* @brief Encode a waypoint_request_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_request_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_request_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_request_list_t* waypoint_request_list)
{
return mavlink_msg_waypoint_request_list_pack(system_id, component_id, msg, waypoint_request_list->target_system, waypoint_request_list->target_component);
}
 
/**
* @brief Send a waypoint_request_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_request_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST, buf, 2);
#else
mavlink_waypoint_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST, (const char *)&packet, 2);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_REQUEST_LIST UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_request_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_request_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_request_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_request_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a waypoint_request_list message into a struct
*
* @param msg The message to decode
* @param waypoint_request_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_request_list_decode(const mavlink_message_t* msg, mavlink_waypoint_request_list_t* waypoint_request_list)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_request_list->target_system = mavlink_msg_waypoint_request_list_get_target_system(msg);
waypoint_request_list->target_component = mavlink_msg_waypoint_request_list_get_target_component(msg);
#else
memcpy(waypoint_request_list, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/mavlink_msg_waypoint_set_current.h
0,0 → 1,188
// MESSAGE WAYPOINT_SET_CURRENT PACKING
 
#define MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT 41
 
typedef struct __mavlink_waypoint_set_current_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint16_t seq; ///< Sequence
} mavlink_waypoint_set_current_t;
 
#define MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT_LEN 4
#define MAVLINK_MSG_ID_41_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_WAYPOINT_SET_CURRENT { \
"WAYPOINT_SET_CURRENT", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_waypoint_set_current_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_waypoint_set_current_t, target_component) }, \
{ "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_waypoint_set_current_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a waypoint_set_current message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_set_current_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_set_current_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT;
return mavlink_finalize_message(msg, system_id, component_id, 4);
}
 
/**
* @brief Pack a waypoint_set_current message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_waypoint_set_current_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_waypoint_set_current_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4);
}
 
/**
* @brief Encode a waypoint_set_current struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param waypoint_set_current C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_waypoint_set_current_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_waypoint_set_current_t* waypoint_set_current)
{
return mavlink_msg_waypoint_set_current_pack(system_id, component_id, msg, waypoint_set_current->target_system, waypoint_set_current->target_component, waypoint_set_current->seq);
}
 
/**
* @brief Send a waypoint_set_current message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_waypoint_set_current_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint16_t(buf, 2, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT, buf, 4);
#else
mavlink_waypoint_set_current_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT, (const char *)&packet, 4);
#endif
}
 
#endif
 
// MESSAGE WAYPOINT_SET_CURRENT UNPACKING
 
 
/**
* @brief Get field target_system from waypoint_set_current message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_waypoint_set_current_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from waypoint_set_current message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_waypoint_set_current_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field seq from waypoint_set_current message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_waypoint_set_current_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a waypoint_set_current message into a struct
*
* @param msg The message to decode
* @param waypoint_set_current C-struct to decode the message contents into
*/
static inline void mavlink_msg_waypoint_set_current_decode(const mavlink_message_t* msg, mavlink_waypoint_set_current_t* waypoint_set_current)
{
#if MAVLINK_NEED_BYTE_SWAP
waypoint_set_current->target_system = mavlink_msg_waypoint_set_current_get_target_system(msg);
waypoint_set_current->target_component = mavlink_msg_waypoint_set_current_get_target_component(msg);
waypoint_set_current->seq = mavlink_msg_waypoint_set_current_get_seq(msg);
#else
memcpy(waypoint_set_current, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/testsuite.h
0,0 → 1,3700
/** @file
* @brief MAVLink comm protocol testsuite generated from common.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef COMMON_TESTSUITE_H
#define COMMON_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
 
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
 
mavlink_test_common(system_id, component_id, last_msg);
}
#endif
 
 
 
 
static void mavlink_test_heartbeat(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_heartbeat_t packet_in = {
5,
72,
2,
};
mavlink_heartbeat_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.type = packet_in.type;
packet1.autopilot = packet_in.autopilot;
packet1.mavlink_version = packet_in.mavlink_version;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_pack(system_id, component_id, &msg , packet1.type , packet1.autopilot );
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.type , packet1.autopilot );
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_heartbeat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_send(MAVLINK_COMM_1 , packet1.type , packet1.autopilot );
mavlink_msg_heartbeat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_boot(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_boot_t packet_in = {
963497464,
};
mavlink_boot_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.version = packet_in.version;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_boot_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_boot_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_boot_pack(system_id, component_id, &msg , packet1.version );
mavlink_msg_boot_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_boot_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.version );
mavlink_msg_boot_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_boot_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_boot_send(MAVLINK_COMM_1 , packet1.version );
mavlink_msg_boot_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_system_time(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_system_time_t packet_in = {
93372036854775807ULL,
};
mavlink_system_time_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_pack(system_id, component_id, &msg , packet1.time_usec );
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec );
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_system_time_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_send(MAVLINK_COMM_1 , packet1.time_usec );
mavlink_msg_system_time_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ping(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ping_t packet_in = {
963497464,
17,
84,
93372036854776185ULL,
};
mavlink_ping_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.time = packet_in.time;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_pack(system_id, component_id, &msg , packet1.seq , packet1.target_system , packet1.target_component , packet1.time );
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.seq , packet1.target_system , packet1.target_component , packet1.time );
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ping_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_send(MAVLINK_COMM_1 , packet1.seq , packet1.target_system , packet1.target_component , packet1.time );
mavlink_msg_ping_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_system_time_utc(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_system_time_utc_t packet_in = {
963497464,
963497672,
};
mavlink_system_time_utc_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.utc_date = packet_in.utc_date;
packet1.utc_time = packet_in.utc_time;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_utc_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_system_time_utc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_utc_pack(system_id, component_id, &msg , packet1.utc_date , packet1.utc_time );
mavlink_msg_system_time_utc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_utc_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.utc_date , packet1.utc_time );
mavlink_msg_system_time_utc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_system_time_utc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_utc_send(MAVLINK_COMM_1 , packet1.utc_date , packet1.utc_time );
mavlink_msg_system_time_utc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_change_operator_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_change_operator_control_t packet_in = {
5,
72,
139,
"DEFGHIJKLMNOPQRSTUVWXYZA",
};
mavlink_change_operator_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.control_request = packet_in.control_request;
packet1.version = packet_in.version;
mav_array_memcpy(packet1.passkey, packet_in.passkey, sizeof(char)*25);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_change_operator_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_change_operator_control_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_change_operator_control_ack_t packet_in = {
5,
72,
139,
};
mavlink_change_operator_control_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.gcs_system_id = packet_in.gcs_system_id;
packet1.control_request = packet_in.control_request;
packet1.ack = packet_in.ack;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_pack(system_id, component_id, &msg , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_change_operator_control_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_send(MAVLINK_COMM_1 , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_auth_key(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_auth_key_t packet_in = {
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE",
};
mavlink_auth_key_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.key, packet_in.key, sizeof(char)*32);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_pack(system_id, component_id, &msg , packet1.key );
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.key );
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_auth_key_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_send(MAVLINK_COMM_1 , packet1.key );
mavlink_msg_auth_key_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_action_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_action_ack_t packet_in = {
5,
72,
};
mavlink_action_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.action = packet_in.action;
packet1.result = packet_in.result;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_action_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_ack_pack(system_id, component_id, &msg , packet1.action , packet1.result );
mavlink_msg_action_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.action , packet1.result );
mavlink_msg_action_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_action_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_ack_send(MAVLINK_COMM_1 , packet1.action , packet1.result );
mavlink_msg_action_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_action(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_action_t packet_in = {
5,
72,
139,
};
mavlink_action_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target = packet_in.target;
packet1.target_component = packet_in.target_component;
packet1.action = packet_in.action;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_action_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_pack(system_id, component_id, &msg , packet1.target , packet1.target_component , packet1.action );
mavlink_msg_action_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.target_component , packet1.action );
mavlink_msg_action_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_action_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_action_send(MAVLINK_COMM_1 , packet1.target , packet1.target_component , packet1.action );
mavlink_msg_action_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_mode(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_mode_t packet_in = {
5,
72,
};
mavlink_set_mode_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target = packet_in.target;
packet1.mode = packet_in.mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_pack(system_id, component_id, &msg , packet1.target , packet1.mode );
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.mode );
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_send(MAVLINK_COMM_1 , packet1.target , packet1.mode );
mavlink_msg_set_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_nav_mode(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_nav_mode_t packet_in = {
5,
72,
};
mavlink_set_nav_mode_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target = packet_in.target;
packet1.nav_mode = packet_in.nav_mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_nav_mode_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_nav_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_nav_mode_pack(system_id, component_id, &msg , packet1.target , packet1.nav_mode );
mavlink_msg_set_nav_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_nav_mode_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.nav_mode );
mavlink_msg_set_nav_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_nav_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_nav_mode_send(MAVLINK_COMM_1 , packet1.target , packet1.nav_mode );
mavlink_msg_set_nav_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_request_read(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_request_read_t packet_in = {
5,
72,
{ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153 },
18119,
};
mavlink_param_request_read_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.param_index = packet_in.param_index;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(int8_t)*15);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_request_read_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_request_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_request_list_t packet_in = {
5,
72,
};
mavlink_param_request_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_value(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_value_t packet_in = {
{ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
122.0,
18223,
18327,
};
mavlink_param_value_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param_value = packet_in.param_value;
packet1.param_count = packet_in.param_count;
packet1.param_index = packet_in.param_index;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(int8_t)*15);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_pack(system_id, component_id, &msg , packet1.param_id , packet1.param_value , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.param_id , packet1.param_value , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_value_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_send(MAVLINK_COMM_1 , packet1.param_id , packet1.param_value , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_set(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_set_t packet_in = {
5,
72,
{ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153 },
136.0,
};
mavlink_param_set_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.param_value = packet_in.param_value;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(int8_t)*15);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value );
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value );
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value );
mavlink_msg_param_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_raw_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_raw_int_t packet_in = {
93372036854775807ULL,
29,
963497932,
963498140,
963498348,
164.0,
192.0,
220.0,
248.0,
};
mavlink_gps_raw_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.fix_type = packet_in.fix_type;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.eph = packet_in.eph;
packet1.epv = packet_in.epv;
packet1.v = packet_in.v;
packet1.hdg = packet_in.hdg;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_pack(system_id, component_id, &msg , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_raw_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_send(MAVLINK_COMM_1 , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_scaled_imu(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_scaled_imu_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
18067,
18171,
18275,
18379,
18483,
};
mavlink_scaled_imu_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
packet1.xmag = packet_in.xmag;
packet1.ymag = packet_in.ymag;
packet1.zmag = packet_in.zmag;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_pack(system_id, component_id, &msg , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_scaled_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_send(MAVLINK_COMM_1 , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_status_t packet_in = {
5,
{ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 },
{ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151 },
{ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211 },
{ 252, 253, 254, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
{ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 },
};
mavlink_gps_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.satellites_visible = packet_in.satellites_visible;
mav_array_memcpy(packet1.satellite_prn, packet_in.satellite_prn, sizeof(int8_t)*20);
mav_array_memcpy(packet1.satellite_used, packet_in.satellite_used, sizeof(int8_t)*20);
mav_array_memcpy(packet1.satellite_elevation, packet_in.satellite_elevation, sizeof(int8_t)*20);
mav_array_memcpy(packet1.satellite_azimuth, packet_in.satellite_azimuth, sizeof(int8_t)*20);
mav_array_memcpy(packet1.satellite_snr, packet_in.satellite_snr, sizeof(int8_t)*20);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_pack(system_id, component_id, &msg , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_send(MAVLINK_COMM_1 , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_raw_imu(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_raw_imu_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
18067,
18171,
18275,
18379,
18483,
};
mavlink_raw_imu_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
packet1.xmag = packet_in.xmag;
packet1.ymag = packet_in.ymag;
packet1.zmag = packet_in.zmag;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_pack(system_id, component_id, &msg , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_raw_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_send(MAVLINK_COMM_1 , packet1.usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_raw_pressure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_raw_pressure_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
};
mavlink_raw_pressure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.press_abs = packet_in.press_abs;
packet1.press_diff1 = packet_in.press_diff1;
packet1.press_diff2 = packet_in.press_diff2;
packet1.temperature = packet_in.temperature;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_pack(system_id, component_id, &msg , packet1.usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_raw_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_send(MAVLINK_COMM_1 , packet1.usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_scaled_pressure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_scaled_pressure_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
18067,
};
mavlink_scaled_pressure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.press_abs = packet_in.press_abs;
packet1.press_diff = packet_in.press_diff;
packet1.temperature = packet_in.temperature;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_pack(system_id, component_id, &msg , packet1.usec , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_scaled_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_send(MAVLINK_COMM_1 , packet1.usec , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_attitude(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_attitude_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_attitude_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.rollspeed = packet_in.rollspeed;
packet1.pitchspeed = packet_in.pitchspeed;
packet1.yawspeed = packet_in.yawspeed;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_pack(system_id, component_id, &msg , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_send(MAVLINK_COMM_1 , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_local_position_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_pack(system_id, component_id, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_send(MAVLINK_COMM_1 , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_global_position(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_global_position_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_global_position_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_global_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_pack(system_id, component_id, &msg , packet1.usec , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_global_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_send(MAVLINK_COMM_1 , packet1.usec , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_raw_t packet_in = {
93372036854775807ULL,
29,
80.0,
108.0,
136.0,
164.0,
192.0,
220.0,
248.0,
};
mavlink_gps_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.fix_type = packet_in.fix_type;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.eph = packet_in.eph;
packet1.epv = packet_in.epv;
packet1.v = packet_in.v;
packet1.hdg = packet_in.hdg;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_pack(system_id, component_id, &msg , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_send(MAVLINK_COMM_1 , packet1.usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.v , packet1.hdg );
mavlink_msg_gps_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_sys_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_sys_status_t packet_in = {
5,
72,
139,
17391,
17495,
17599,
17703,
};
mavlink_sys_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.mode = packet_in.mode;
packet1.nav_mode = packet_in.nav_mode;
packet1.status = packet_in.status;
packet1.load = packet_in.load;
packet1.vbat = packet_in.vbat;
packet1.battery_remaining = packet_in.battery_remaining;
packet1.packet_drop = packet_in.packet_drop;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_pack(system_id, component_id, &msg , packet1.mode , packet1.nav_mode , packet1.status , packet1.load , packet1.vbat , packet1.battery_remaining , packet1.packet_drop );
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.mode , packet1.nav_mode , packet1.status , packet1.load , packet1.vbat , packet1.battery_remaining , packet1.packet_drop );
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_sys_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_send(MAVLINK_COMM_1 , packet1.mode , packet1.nav_mode , packet1.status , packet1.load , packet1.vbat , packet1.battery_remaining , packet1.packet_drop );
mavlink_msg_sys_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_raw_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
17859,
17963,
53,
};
mavlink_rc_channels_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.chan1_raw = packet_in.chan1_raw;
packet1.chan2_raw = packet_in.chan2_raw;
packet1.chan3_raw = packet_in.chan3_raw;
packet1.chan4_raw = packet_in.chan4_raw;
packet1.chan5_raw = packet_in.chan5_raw;
packet1.chan6_raw = packet_in.chan6_raw;
packet1.chan7_raw = packet_in.chan7_raw;
packet1.chan8_raw = packet_in.chan8_raw;
packet1.rssi = packet_in.rssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_pack(system_id, component_id, &msg , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_send(MAVLINK_COMM_1 , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_scaled(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_scaled_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
17859,
17963,
53,
};
mavlink_rc_channels_scaled_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.chan1_scaled = packet_in.chan1_scaled;
packet1.chan2_scaled = packet_in.chan2_scaled;
packet1.chan3_scaled = packet_in.chan3_scaled;
packet1.chan4_scaled = packet_in.chan4_scaled;
packet1.chan5_scaled = packet_in.chan5_scaled;
packet1.chan6_scaled = packet_in.chan6_scaled;
packet1.chan7_scaled = packet_in.chan7_scaled;
packet1.chan8_scaled = packet_in.chan8_scaled;
packet1.rssi = packet_in.rssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_pack(system_id, component_id, &msg , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_scaled_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_send(MAVLINK_COMM_1 , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_servo_output_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_servo_output_raw_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
17859,
17963,
};
mavlink_servo_output_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.servo1_raw = packet_in.servo1_raw;
packet1.servo2_raw = packet_in.servo2_raw;
packet1.servo3_raw = packet_in.servo3_raw;
packet1.servo4_raw = packet_in.servo4_raw;
packet1.servo5_raw = packet_in.servo5_raw;
packet1.servo6_raw = packet_in.servo6_raw;
packet1.servo7_raw = packet_in.servo7_raw;
packet1.servo8_raw = packet_in.servo8_raw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_pack(system_id, component_id, &msg , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_servo_output_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_send(MAVLINK_COMM_1 , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_t packet_in = {
5,
72,
17339,
17,
84,
151,
218,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
};
mavlink_waypoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.seq = packet_in.seq;
packet1.frame = packet_in.frame;
packet1.command = packet_in.command;
packet1.current = packet_in.current;
packet1.autocontinue = packet_in.autocontinue;
packet1.param1 = packet_in.param1;
packet1.param2 = packet_in.param2;
packet1.param3 = packet_in.param3;
packet1.param4 = packet_in.param4;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_waypoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_waypoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_waypoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_request(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_request_t packet_in = {
5,
72,
17339,
};
mavlink_waypoint_request_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_request_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_request_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_set_current(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_set_current_t packet_in = {
5,
72,
17339,
};
mavlink_waypoint_set_current_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_set_current_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_set_current_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_set_current_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_set_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_set_current_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_waypoint_set_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_current(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_current_t packet_in = {
17235,
};
mavlink_waypoint_current_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_current_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_current_pack(system_id, component_id, &msg , packet1.seq );
mavlink_msg_waypoint_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_current_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.seq );
mavlink_msg_waypoint_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_current_send(MAVLINK_COMM_1 , packet1.seq );
mavlink_msg_waypoint_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_request_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_request_list_t packet_in = {
5,
72,
};
mavlink_waypoint_request_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_request_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_count(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_count_t packet_in = {
5,
72,
17339,
};
mavlink_waypoint_count_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.count = packet_in.count;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_count_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_count_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_waypoint_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_count_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_waypoint_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_count_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_count_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_waypoint_count_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_clear_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_clear_all_t packet_in = {
5,
72,
};
mavlink_waypoint_clear_all_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_clear_all_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_clear_all_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_clear_all_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_clear_all_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_clear_all_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_waypoint_clear_all_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_reached(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_reached_t packet_in = {
17235,
};
mavlink_waypoint_reached_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_reached_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_reached_pack(system_id, component_id, &msg , packet1.seq );
mavlink_msg_waypoint_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_reached_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.seq );
mavlink_msg_waypoint_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_reached_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_reached_send(MAVLINK_COMM_1 , packet1.seq );
mavlink_msg_waypoint_reached_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_waypoint_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_waypoint_ack_t packet_in = {
5,
72,
139,
};
mavlink_waypoint_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.type = packet_in.type;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_waypoint_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_ack_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_waypoint_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_waypoint_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_waypoint_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_waypoint_ack_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_waypoint_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_set_global_origin(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_set_global_origin_t packet_in = {
5,
72,
963497568,
963497776,
963497984,
};
mavlink_gps_set_global_origin_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_set_global_origin_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_set_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_set_global_origin_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_set_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_set_global_origin_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_set_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_set_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_set_global_origin_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_set_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_local_origin_set(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_local_origin_set_t packet_in = {
963497464,
963497672,
963497880,
};
mavlink_gps_local_origin_set_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_local_origin_set_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_local_origin_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_local_origin_set_pack(system_id, component_id, &msg , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_local_origin_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_local_origin_set_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_local_origin_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_local_origin_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_local_origin_set_send(MAVLINK_COMM_1 , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_local_origin_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position_setpoint_set(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_setpoint_set_t packet_in = {
5,
72,
31.0,
59.0,
87.0,
115.0,
};
mavlink_local_position_setpoint_set_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_set_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_setpoint_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_set_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_set_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_setpoint_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_set_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_setpoint_t packet_in = {
17.0,
45.0,
73.0,
101.0,
};
mavlink_local_position_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_pack(system_id, component_id, &msg , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_send(MAVLINK_COMM_1 , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_control_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_control_status_t packet_in = {
5,
72,
139,
206,
17,
84,
151,
218,
};
mavlink_control_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.position_fix = packet_in.position_fix;
packet1.vision_fix = packet_in.vision_fix;
packet1.gps_fix = packet_in.gps_fix;
packet1.ahrs_health = packet_in.ahrs_health;
packet1.control_att = packet_in.control_att;
packet1.control_pos_xy = packet_in.control_pos_xy;
packet1.control_pos_z = packet_in.control_pos_z;
packet1.control_pos_yaw = packet_in.control_pos_yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_control_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_control_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_control_status_pack(system_id, component_id, &msg , packet1.position_fix , packet1.vision_fix , packet1.gps_fix , packet1.ahrs_health , packet1.control_att , packet1.control_pos_xy , packet1.control_pos_z , packet1.control_pos_yaw );
mavlink_msg_control_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_control_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.position_fix , packet1.vision_fix , packet1.gps_fix , packet1.ahrs_health , packet1.control_att , packet1.control_pos_xy , packet1.control_pos_z , packet1.control_pos_yaw );
mavlink_msg_control_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_control_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_control_status_send(MAVLINK_COMM_1 , packet1.position_fix , packet1.vision_fix , packet1.gps_fix , packet1.ahrs_health , packet1.control_att , packet1.control_pos_xy , packet1.control_pos_z , packet1.control_pos_yaw );
mavlink_msg_control_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_safety_set_allowed_area(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_safety_set_allowed_area_t packet_in = {
5,
72,
139,
38.0,
66.0,
94.0,
122.0,
150.0,
178.0,
};
mavlink_safety_set_allowed_area_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.frame = packet_in.frame;
packet1.p1x = packet_in.p1x;
packet1.p1y = packet_in.p1y;
packet1.p1z = packet_in.p1z;
packet1.p2x = packet_in.p2x;
packet1.p2y = packet_in.p2y;
packet1.p2z = packet_in.p2z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_safety_set_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_safety_allowed_area(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_safety_allowed_area_t packet_in = {
5,
24.0,
52.0,
80.0,
108.0,
136.0,
164.0,
};
mavlink_safety_allowed_area_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.frame = packet_in.frame;
packet1.p1x = packet_in.p1x;
packet1.p1y = packet_in.p1y;
packet1.p1z = packet_in.p1z;
packet1.p2x = packet_in.p2x;
packet1.p2y = packet_in.p2y;
packet1.p2z = packet_in.p2z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_pack(system_id, component_id, &msg , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_safety_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_send(MAVLINK_COMM_1 , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_roll_pitch_yaw_thrust(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_roll_pitch_yaw_thrust_t packet_in = {
5,
72,
31.0,
59.0,
87.0,
115.0,
};
mavlink_set_roll_pitch_yaw_thrust_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_roll_pitch_yaw_speed_thrust(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_roll_pitch_yaw_speed_thrust_t packet_in = {
5,
72,
31.0,
59.0,
87.0,
115.0,
};
mavlink_set_roll_pitch_yaw_speed_thrust_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.roll_speed = packet_in.roll_speed;
packet1.pitch_speed = packet_in.pitch_speed;
packet1.yaw_speed = packet_in.yaw_speed;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_roll_pitch_yaw_thrust_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_roll_pitch_yaw_thrust_setpoint_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
};
mavlink_roll_pitch_yaw_thrust_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_us = packet_in.time_us;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(system_id, component_id, &msg , packet1.time_us , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_us , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_send(MAVLINK_COMM_1 , packet1.time_us , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_roll_pitch_yaw_speed_thrust_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
};
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_us = packet_in.time_us;
packet1.roll_speed = packet_in.roll_speed;
packet1.pitch_speed = packet_in.pitch_speed;
packet1.yaw_speed = packet_in.yaw_speed;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(system_id, component_id, &msg , packet1.time_us , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_us , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_send(MAVLINK_COMM_1 , packet1.time_us , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_nav_controller_output(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_nav_controller_output_t packet_in = {
17.0,
45.0,
17651,
17755,
17859,
115.0,
143.0,
171.0,
};
mavlink_nav_controller_output_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.nav_roll = packet_in.nav_roll;
packet1.nav_pitch = packet_in.nav_pitch;
packet1.nav_bearing = packet_in.nav_bearing;
packet1.target_bearing = packet_in.target_bearing;
packet1.wp_dist = packet_in.wp_dist;
packet1.alt_error = packet_in.alt_error;
packet1.aspd_error = packet_in.aspd_error;
packet1.xtrack_error = packet_in.xtrack_error;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_pack(system_id, component_id, &msg , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_nav_controller_output_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_send(MAVLINK_COMM_1 , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_position_target(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_position_target_t packet_in = {
17.0,
45.0,
73.0,
101.0,
};
mavlink_position_target_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_position_target_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_position_target_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_position_target_pack(system_id, component_id, &msg , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_position_target_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_position_target_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_position_target_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_position_target_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_position_target_send(MAVLINK_COMM_1 , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_position_target_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_state_correction(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_state_correction_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
};
mavlink_state_correction_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.xErr = packet_in.xErr;
packet1.yErr = packet_in.yErr;
packet1.zErr = packet_in.zErr;
packet1.rollErr = packet_in.rollErr;
packet1.pitchErr = packet_in.pitchErr;
packet1.yawErr = packet_in.yawErr;
packet1.vxErr = packet_in.vxErr;
packet1.vyErr = packet_in.vyErr;
packet1.vzErr = packet_in.vzErr;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_pack(system_id, component_id, &msg , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_state_correction_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_send(MAVLINK_COMM_1 , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_altitude(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_altitude_t packet_in = {
5,
963497516,
};
mavlink_set_altitude_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target = packet_in.target;
packet1.mode = packet_in.mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_altitude_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_altitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_altitude_pack(system_id, component_id, &msg , packet1.target , packet1.mode );
mavlink_msg_set_altitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_altitude_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.mode );
mavlink_msg_set_altitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_altitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_altitude_send(MAVLINK_COMM_1 , packet1.target , packet1.mode );
mavlink_msg_set_altitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_request_data_stream(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_request_data_stream_t packet_in = {
5,
72,
139,
17391,
84,
};
mavlink_request_data_stream_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.req_stream_id = packet_in.req_stream_id;
packet1.req_message_rate = packet_in.req_message_rate;
packet1.start_stop = packet_in.start_stop;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_request_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hil_state(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hil_state_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
963499128,
963499336,
963499544,
19523,
19627,
19731,
19835,
19939,
20043,
};
mavlink_hil_state_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.rollspeed = packet_in.rollspeed;
packet1.pitchspeed = packet_in.pitchspeed;
packet1.yawspeed = packet_in.yawspeed;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_pack(system_id, component_id, &msg , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hil_state_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_send(MAVLINK_COMM_1 , packet1.usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hil_controls(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hil_controls_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
77,
144,
};
mavlink_hil_controls_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_us = packet_in.time_us;
packet1.roll_ailerons = packet_in.roll_ailerons;
packet1.pitch_elevator = packet_in.pitch_elevator;
packet1.yaw_rudder = packet_in.yaw_rudder;
packet1.throttle = packet_in.throttle;
packet1.mode = packet_in.mode;
packet1.nav_mode = packet_in.nav_mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_pack(system_id, component_id, &msg , packet1.time_us , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_us , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hil_controls_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_send(MAVLINK_COMM_1 , packet1.time_us , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_manual_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_manual_control_t packet_in = {
5,
24.0,
52.0,
80.0,
108.0,
120,
187,
254,
65,
};
mavlink_manual_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target = packet_in.target;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
packet1.roll_manual = packet_in.roll_manual;
packet1.pitch_manual = packet_in.pitch_manual;
packet1.yaw_manual = packet_in.yaw_manual;
packet1.thrust_manual = packet_in.thrust_manual;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_pack(system_id, component_id, &msg , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_manual_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_send(MAVLINK_COMM_1 , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_override(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_override_t packet_in = {
5,
72,
17339,
17443,
17547,
17651,
17755,
17859,
17963,
18067,
};
mavlink_rc_channels_override_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.chan1_raw = packet_in.chan1_raw;
packet1.chan2_raw = packet_in.chan2_raw;
packet1.chan3_raw = packet_in.chan3_raw;
packet1.chan4_raw = packet_in.chan4_raw;
packet1.chan5_raw = packet_in.chan5_raw;
packet1.chan6_raw = packet_in.chan6_raw;
packet1.chan7_raw = packet_in.chan7_raw;
packet1.chan8_raw = packet_in.chan8_raw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_override_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_global_position_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_global_position_int_t packet_in = {
963497464,
963497672,
963497880,
17859,
17963,
18067,
};
mavlink_global_position_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_pack(system_id, component_id, &msg , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_global_position_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_send(MAVLINK_COMM_1 , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_global_position_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_vfr_hud(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_vfr_hud_t packet_in = {
17.0,
45.0,
17651,
17755,
101.0,
129.0,
};
mavlink_vfr_hud_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.airspeed = packet_in.airspeed;
packet1.groundspeed = packet_in.groundspeed;
packet1.heading = packet_in.heading;
packet1.throttle = packet_in.throttle;
packet1.alt = packet_in.alt;
packet1.climb = packet_in.climb;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_pack(system_id, component_id, &msg , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_vfr_hud_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_send(MAVLINK_COMM_1 , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_command(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_command_t packet_in = {
5,
72,
139,
206,
45.0,
73.0,
101.0,
129.0,
};
mavlink_command_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.command = packet_in.command;
packet1.confirmation = packet_in.confirmation;
packet1.param1 = packet_in.param1;
packet1.param2 = packet_in.param2;
packet1.param3 = packet_in.param3;
packet1.param4 = packet_in.param4;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_command_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 );
mavlink_msg_command_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 );
mavlink_msg_command_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_command_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 );
mavlink_msg_command_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_command_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_command_ack_t packet_in = {
17.0,
45.0,
};
mavlink_command_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.command = packet_in.command;
packet1.result = packet_in.result;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_pack(system_id, component_id, &msg , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_command_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_send(MAVLINK_COMM_1 , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_optical_flow(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_optical_flow_t packet_in = {
93372036854775807ULL,
29,
17703,
17807,
108,
115.0,
};
mavlink_optical_flow_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time = packet_in.time;
packet1.sensor_id = packet_in.sensor_id;
packet1.flow_x = packet_in.flow_x;
packet1.flow_y = packet_in.flow_y;
packet1.quality = packet_in.quality;
packet1.ground_distance = packet_in.ground_distance;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_pack(system_id, component_id, &msg , packet1.time , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_optical_flow_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_send(MAVLINK_COMM_1 , packet1.time , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_object_detection_event(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_object_detection_event_t packet_in = {
963497464,
17443,
151,
"HIJKLMNOPQRSTUVWXYZ",
22,
213.0,
241.0,
};
mavlink_object_detection_event_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time = packet_in.time;
packet1.object_id = packet_in.object_id;
packet1.type = packet_in.type;
packet1.quality = packet_in.quality;
packet1.bearing = packet_in.bearing;
packet1.distance = packet_in.distance;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*20);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_object_detection_event_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_object_detection_event_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_object_detection_event_pack(system_id, component_id, &msg , packet1.time , packet1.object_id , packet1.type , packet1.name , packet1.quality , packet1.bearing , packet1.distance );
mavlink_msg_object_detection_event_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_object_detection_event_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time , packet1.object_id , packet1.type , packet1.name , packet1.quality , packet1.bearing , packet1.distance );
mavlink_msg_object_detection_event_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_object_detection_event_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_object_detection_event_send(MAVLINK_COMM_1 , packet1.time , packet1.object_id , packet1.type , packet1.name , packet1.quality , packet1.bearing , packet1.distance );
mavlink_msg_object_detection_event_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_debug_vect(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_debug_vect_t packet_in = {
"ABCDEFGHI",
93372036854776437ULL,
143.0,
171.0,
199.0,
};
mavlink_debug_vect_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_pack(system_id, component_id, &msg , packet1.name , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.name , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_debug_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_send(MAVLINK_COMM_1 , packet1.name , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_named_value_float(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_named_value_float_t packet_in = {
"ABCDEFGHI",
87.0,
};
mavlink_named_value_float_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.value = packet_in.value;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_pack(system_id, component_id, &msg , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_named_value_float_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_send(MAVLINK_COMM_1 , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_named_value_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_named_value_int_t packet_in = {
"ABCDEFGHI",
963497984,
};
mavlink_named_value_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.value = packet_in.value;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_pack(system_id, component_id, &msg , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_named_value_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_send(MAVLINK_COMM_1 , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_statustext(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_statustext_t packet_in = {
5,
{ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121 },
};
mavlink_statustext_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.severity = packet_in.severity;
mav_array_memcpy(packet1.text, packet_in.text, sizeof(int8_t)*50);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_pack(system_id, component_id, &msg , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_statustext_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_send(MAVLINK_COMM_1 , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_debug(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_debug_t packet_in = {
5,
24.0,
};
mavlink_debug_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.ind = packet_in.ind;
packet1.value = packet_in.value;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_pack(system_id, component_id, &msg , packet1.ind , packet1.value );
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.ind , packet1.value );
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_debug_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_send(MAVLINK_COMM_1 , packet1.ind , packet1.value );
mavlink_msg_debug_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_common(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_heartbeat(system_id, component_id, last_msg);
mavlink_test_boot(system_id, component_id, last_msg);
mavlink_test_system_time(system_id, component_id, last_msg);
mavlink_test_ping(system_id, component_id, last_msg);
mavlink_test_system_time_utc(system_id, component_id, last_msg);
mavlink_test_change_operator_control(system_id, component_id, last_msg);
mavlink_test_change_operator_control_ack(system_id, component_id, last_msg);
mavlink_test_auth_key(system_id, component_id, last_msg);
mavlink_test_action_ack(system_id, component_id, last_msg);
mavlink_test_action(system_id, component_id, last_msg);
mavlink_test_set_mode(system_id, component_id, last_msg);
mavlink_test_set_nav_mode(system_id, component_id, last_msg);
mavlink_test_param_request_read(system_id, component_id, last_msg);
mavlink_test_param_request_list(system_id, component_id, last_msg);
mavlink_test_param_value(system_id, component_id, last_msg);
mavlink_test_param_set(system_id, component_id, last_msg);
mavlink_test_gps_raw_int(system_id, component_id, last_msg);
mavlink_test_scaled_imu(system_id, component_id, last_msg);
mavlink_test_gps_status(system_id, component_id, last_msg);
mavlink_test_raw_imu(system_id, component_id, last_msg);
mavlink_test_raw_pressure(system_id, component_id, last_msg);
mavlink_test_scaled_pressure(system_id, component_id, last_msg);
mavlink_test_attitude(system_id, component_id, last_msg);
mavlink_test_local_position(system_id, component_id, last_msg);
mavlink_test_global_position(system_id, component_id, last_msg);
mavlink_test_gps_raw(system_id, component_id, last_msg);
mavlink_test_sys_status(system_id, component_id, last_msg);
mavlink_test_rc_channels_raw(system_id, component_id, last_msg);
mavlink_test_rc_channels_scaled(system_id, component_id, last_msg);
mavlink_test_servo_output_raw(system_id, component_id, last_msg);
mavlink_test_waypoint(system_id, component_id, last_msg);
mavlink_test_waypoint_request(system_id, component_id, last_msg);
mavlink_test_waypoint_set_current(system_id, component_id, last_msg);
mavlink_test_waypoint_current(system_id, component_id, last_msg);
mavlink_test_waypoint_request_list(system_id, component_id, last_msg);
mavlink_test_waypoint_count(system_id, component_id, last_msg);
mavlink_test_waypoint_clear_all(system_id, component_id, last_msg);
mavlink_test_waypoint_reached(system_id, component_id, last_msg);
mavlink_test_waypoint_ack(system_id, component_id, last_msg);
mavlink_test_gps_set_global_origin(system_id, component_id, last_msg);
mavlink_test_gps_local_origin_set(system_id, component_id, last_msg);
mavlink_test_local_position_setpoint_set(system_id, component_id, last_msg);
mavlink_test_local_position_setpoint(system_id, component_id, last_msg);
mavlink_test_control_status(system_id, component_id, last_msg);
mavlink_test_safety_set_allowed_area(system_id, component_id, last_msg);
mavlink_test_safety_allowed_area(system_id, component_id, last_msg);
mavlink_test_set_roll_pitch_yaw_thrust(system_id, component_id, last_msg);
mavlink_test_set_roll_pitch_yaw_speed_thrust(system_id, component_id, last_msg);
mavlink_test_roll_pitch_yaw_thrust_setpoint(system_id, component_id, last_msg);
mavlink_test_roll_pitch_yaw_speed_thrust_setpoint(system_id, component_id, last_msg);
mavlink_test_nav_controller_output(system_id, component_id, last_msg);
mavlink_test_position_target(system_id, component_id, last_msg);
mavlink_test_state_correction(system_id, component_id, last_msg);
mavlink_test_set_altitude(system_id, component_id, last_msg);
mavlink_test_request_data_stream(system_id, component_id, last_msg);
mavlink_test_hil_state(system_id, component_id, last_msg);
mavlink_test_hil_controls(system_id, component_id, last_msg);
mavlink_test_manual_control(system_id, component_id, last_msg);
mavlink_test_rc_channels_override(system_id, component_id, last_msg);
mavlink_test_global_position_int(system_id, component_id, last_msg);
mavlink_test_vfr_hud(system_id, component_id, last_msg);
mavlink_test_command(system_id, component_id, last_msg);
mavlink_test_command_ack(system_id, component_id, last_msg);
mavlink_test_optical_flow(system_id, component_id, last_msg);
mavlink_test_object_detection_event(system_id, component_id, last_msg);
mavlink_test_debug_vect(system_id, component_id, last_msg);
mavlink_test_named_value_float(system_id, component_id, last_msg);
mavlink_test_named_value_int(system_id, component_id, last_msg);
mavlink_test_statustext(system_id, component_id, last_msg);
mavlink_test_debug(system_id, component_id, last_msg);
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // COMMON_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/common/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from common.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Mon Apr 30 11:40:11 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "0.9"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/mavlink_helpers.h
0,0 → 1,507
#ifndef _MAVLINK_HELPERS_H_
#define _MAVLINK_HELPERS_H_
 
#include "string.h"
#include "checksum.h"
#include "mavlink_types.h"
 
#ifndef MAVLINK_HELPER
#define MAVLINK_HELPER
#endif
 
/*
internal function to give access to the channel status for each channel
*/
MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan)
{
static mavlink_status_t m_mavlink_status[MAVLINK_COMM_NUM_BUFFERS];
return &m_mavlink_status[chan];
}
 
/*
internal function to give access to the channel buffer for each channel
*/
MAVLINK_HELPER mavlink_message_t* mavlink_get_channel_buffer(uint8_t chan)
{
 
#if MAVLINK_EXTERNAL_RX_BUFFER
// No m_mavlink_message array defined in function,
// has to be defined externally
#ifndef m_mavlink_message
#error ERROR: IF #define MAVLINK_EXTERNAL_RX_BUFFER IS SET, THE BUFFER HAS TO BE ALLOCATED OUTSIDE OF THIS FUNCTION (mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS];)
#endif
#else
static mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS];
#endif
return &m_mavlink_buffer[chan];
}
 
/**
* @brief Finalize a MAVLink message with channel assignment
*
* This function calculates the checksum and sets length and aircraft id correctly.
* It assumes that the message id and the payload are already correctly set. This function
* can also be used if the message header has already been written before (as in mavlink_msg_xxx_pack
* instead of mavlink_msg_xxx_pack_headerless), it just introduces little extra overhead.
*
* @param msg Message to finalize
* @param system_id Id of the sending (this) system, 1-127
* @param length Message length
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length, uint8_t crc_extra)
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length)
#endif
{
// This code part is the same for all messages;
uint16_t checksum;
msg->magic = MAVLINK_STX;
msg->len = length;
msg->sysid = system_id;
msg->compid = component_id;
// One sequence number per component
msg->seq = mavlink_get_channel_status(chan)->current_tx_seq;
mavlink_get_channel_status(chan)->current_tx_seq = mavlink_get_channel_status(chan)->current_tx_seq+1;
checksum = crc_calculate((uint8_t*)&msg->len, length + MAVLINK_CORE_HEADER_LEN);
#if MAVLINK_CRC_EXTRA
crc_accumulate(crc_extra, &checksum);
#endif
mavlink_ck_a(msg) = (uint8_t)(checksum & 0xFF);
mavlink_ck_b(msg) = (uint8_t)(checksum >> 8);
 
return length + MAVLINK_NUM_NON_PAYLOAD_BYTES;
}
 
 
/**
* @brief Finalize a MAVLink message with MAVLINK_COMM_0 as default channel
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length, uint8_t crc_extra)
{
return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, length, crc_extra);
}
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length)
{
return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, length);
}
#endif
 
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len);
 
/**
* @brief Finalize a MAVLink message with channel assignment and send
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet,
uint8_t length, uint8_t crc_extra)
#else
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length)
#endif
{
uint16_t checksum;
uint8_t buf[MAVLINK_NUM_HEADER_BYTES];
uint8_t ck[2];
mavlink_status_t *status = mavlink_get_channel_status(chan);
buf[0] = MAVLINK_STX;
buf[1] = length;
buf[2] = status->current_tx_seq;
buf[3] = mavlink_system.sysid;
buf[4] = mavlink_system.compid;
buf[5] = msgid;
status->current_tx_seq++;
checksum = crc_calculate((uint8_t*)&buf[1], MAVLINK_CORE_HEADER_LEN);
crc_accumulate_buffer(&checksum, packet, length);
#if MAVLINK_CRC_EXTRA
crc_accumulate(crc_extra, &checksum);
#endif
ck[0] = (uint8_t)(checksum & 0xFF);
ck[1] = (uint8_t)(checksum >> 8);
 
MAVLINK_START_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length);
_mavlink_send_uart(chan, (const char *)buf, MAVLINK_NUM_HEADER_BYTES);
_mavlink_send_uart(chan, packet, length);
_mavlink_send_uart(chan, (const char *)ck, 2);
MAVLINK_END_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length);
}
#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
/**
* @brief Pack a message to send it over a serial byte stream
*/
MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg)
{
memcpy(buffer, (const uint8_t *)&msg->magic, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len);
return MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len;
}
 
union __mavlink_bitfield {
uint8_t uint8;
int8_t int8;
uint16_t uint16;
int16_t int16;
uint32_t uint32;
int32_t int32;
};
 
 
MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg)
{
crc_init(&msg->checksum);
}
 
MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c)
{
crc_accumulate(c, &msg->checksum);
}
 
/**
* This is a convenience function which handles the complete MAVLink parsing.
* the function will parse one byte at a time and return the complete packet once
* it could be successfully decoded. Checksum and other failures will be silently
* ignored.
*
* @param chan ID of the current channel. This allows to parse different channels with this function.
* a channel is not a physical message channel like a serial port, but a logic partition of
* the communication streams in this case. COMM_NB is the limit for the number of channels
* on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows
* @param c The char to barse
*
* @param returnMsg NULL if no message could be decoded, the message data else
* @return 0 if no message could be decoded, 1 else
*
* A typical use scenario of this function call is:
*
* @code
* #include <inttypes.h> // For fixed-width uint8_t type
*
* mavlink_message_t msg;
* int chan = 0;
*
*
* while(serial.bytesAvailable > 0)
* {
* uint8_t byte = serial.getNextByte();
* if (mavlink_parse_char(chan, byte, &msg))
* {
* printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid);
* }
* }
*
*
* @endcode
*/
MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status)
{
/*
default message crc function. You can override this per-system to
put this data in a different memory segment
*/
#if MAVLINK_CRC_EXTRA
#ifndef MAVLINK_MESSAGE_CRC
static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS;
#define MAVLINK_MESSAGE_CRC(msgid) mavlink_message_crcs[msgid]
#endif
#endif
 
mavlink_message_t* rxmsg = mavlink_get_channel_buffer(chan); ///< The currently decoded message
mavlink_status_t* status = mavlink_get_channel_status(chan); ///< The current decode status
int bufferIndex = 0;
 
status->msg_received = 0;
 
switch (status->parse_state)
{
case MAVLINK_PARSE_STATE_UNINIT:
case MAVLINK_PARSE_STATE_IDLE:
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
rxmsg->magic = c;
mavlink_start_checksum(rxmsg);
}
break;
 
case MAVLINK_PARSE_STATE_GOT_STX:
if (status->msg_received
/* Support shorter buffers than the
default maximum packet size */
#if (MAVLINK_MAX_PAYLOAD_LEN < 255)
|| c > MAVLINK_MAX_PAYLOAD_LEN
#endif
)
{
status->buffer_overrun++;
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
}
else
{
// NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2
rxmsg->len = c;
status->packet_idx = 0;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_LENGTH:
rxmsg->seq = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ;
break;
 
case MAVLINK_PARSE_STATE_GOT_SEQ:
rxmsg->sysid = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID;
break;
 
case MAVLINK_PARSE_STATE_GOT_SYSID:
rxmsg->compid = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID;
break;
 
case MAVLINK_PARSE_STATE_GOT_COMPID:
rxmsg->msgid = c;
mavlink_update_checksum(rxmsg, c);
if (rxmsg->len == 0)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD;
}
else
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_MSGID:
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c;
mavlink_update_checksum(rxmsg, c);
if (status->packet_idx == rxmsg->len)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_PAYLOAD:
#if MAVLINK_CRC_EXTRA
mavlink_update_checksum(rxmsg, MAVLINK_MESSAGE_CRC(rxmsg->msgid));
#endif
if (c != (rxmsg->checksum & 0xFF)) {
// Check first checksum byte
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
mavlink_start_checksum(rxmsg);
}
}
else
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1;
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx] = (char)c;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_CRC1:
if (c != (rxmsg->checksum >> 8)) {
// Check second checksum byte
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
mavlink_start_checksum(rxmsg);
}
}
else
{
// Successfully got message
status->msg_received = 1;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx+1] = (char)c;
memcpy(r_message, rxmsg, sizeof(mavlink_message_t));
}
break;
}
 
bufferIndex++;
// If a message has been sucessfully decoded, check index
if (status->msg_received == 1)
{
//while(status->current_seq != rxmsg->seq)
//{
// status->packet_rx_drop_count++;
// status->current_seq++;
//}
status->current_rx_seq = rxmsg->seq;
// Initial condition: If no packet has been received so far, drop count is undefined
if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0;
// Count this packet as received
status->packet_rx_success_count++;
}
 
r_mavlink_status->current_rx_seq = status->current_rx_seq+1;
r_mavlink_status->packet_rx_success_count = status->packet_rx_success_count;
r_mavlink_status->packet_rx_drop_count = status->parse_error;
status->parse_error = 0;
return status->msg_received;
}
 
/**
* @brief Put a bitfield of length 1-32 bit into the buffer
*
* @param b the value to add, will be encoded in the bitfield
* @param bits number of bits to use to encode b, e.g. 1 for boolean, 2, 3, etc.
* @param packet_index the position in the packet (the index of the first byte to use)
* @param bit_index the position in the byte (the index of the first bit to use)
* @param buffer packet buffer to write into
* @return new position of the last used byte in the buffer
*/
MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, uint8_t* r_bit_index, uint8_t* buffer)
{
uint16_t bits_remain = bits;
// Transform number into network order
int32_t v;
uint8_t i_bit_index, i_byte_index, curr_bits_n;
#if MAVLINK_NEED_BYTE_SWAP
union {
int32_t i;
uint8_t b[4];
} bin, bout;
bin.i = b;
bout.b[0] = bin.b[3];
bout.b[1] = bin.b[2];
bout.b[2] = bin.b[1];
bout.b[3] = bin.b[0];
v = bout.i;
#else
v = b;
#endif
 
// buffer in
// 01100000 01000000 00000000 11110001
// buffer out
// 11110001 00000000 01000000 01100000
 
// Existing partly filled byte (four free slots)
// 0111xxxx
 
// Mask n free bits
// 00001111 = 2^0 + 2^1 + 2^2 + 2^3 = 2^n - 1
// = ((uint32_t)(1 << n)) - 1; // = 2^n - 1
 
// Shift n bits into the right position
// out = in >> n;
 
// Mask and shift bytes
i_bit_index = bit_index;
i_byte_index = packet_index;
if (bit_index > 0)
{
// If bits were available at start, they were available
// in the byte before the current index
i_byte_index--;
}
 
// While bits have not been packed yet
while (bits_remain > 0)
{
// Bits still have to be packed
// there can be more than 8 bits, so
// we might have to pack them into more than one byte
 
// First pack everything we can into the current 'open' byte
//curr_bits_n = bits_remain << 3; // Equals bits_remain mod 8
//FIXME
if (bits_remain <= (uint8_t)(8 - i_bit_index))
{
// Enough space
curr_bits_n = (uint8_t)bits_remain;
}
else
{
curr_bits_n = (8 - i_bit_index);
}
// Pack these n bits into the current byte
// Mask out whatever was at that position with ones (xxx11111)
buffer[i_byte_index] &= (0xFF >> (8 - curr_bits_n));
// Put content to this position, by masking out the non-used part
buffer[i_byte_index] |= ((0x00 << curr_bits_n) & v);
// Increment the bit index
i_bit_index += curr_bits_n;
 
// Now proceed to the next byte, if necessary
bits_remain -= curr_bits_n;
if (bits_remain > 0)
{
// Offer another 8 bits / one byte
i_byte_index++;
i_bit_index = 0;
}
}
*r_bit_index = i_bit_index;
// If a partly filled byte is present, mark this as consumed
if (i_bit_index != 7) i_byte_index++;
return i_byte_index - packet_index;
}
 
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
// To make MAVLink work on your MCU, define comm_send_ch() if you wish
// to send 1 byte at a time, or MAVLINK_SEND_UART_BYTES() to send a
// whole packet at a time
 
/*
 
#include "mavlink_types.h"
 
void comm_send_ch(mavlink_channel_t chan, uint8_t ch)
{
if (chan == MAVLINK_COMM_0)
{
uart0_transmit(ch);
}
if (chan == MAVLINK_COMM_1)
{
uart1_transmit(ch);
}
}
*/
 
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len)
{
#ifdef MAVLINK_SEND_UART_BYTES
/* this is the more efficient approach, if the platform
defines it */
MAVLINK_SEND_UART_BYTES(chan, (uint8_t *)buf, len);
#else
/* fallback to one byte at a time */
uint16_t i;
for (i = 0; i < len; i++) {
comm_send_ch(chan, (uint8_t)buf[i]);
}
#endif
}
#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
#endif /* _MAVLINK_HELPERS_H_ */
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/mavlink_types.h
0,0 → 1,323
#ifndef MAVLINK_TYPES_H_
#define MAVLINK_TYPES_H_
 
#include "inttypes.h"
 
enum MAV_CLASS
{
MAV_CLASS_GENERIC = 0, ///< Generic autopilot, full support for everything
MAV_CLASS_PIXHAWK = 1, ///< PIXHAWK autopilot, http://pixhawk.ethz.ch
MAV_CLASS_SLUGS = 2, ///< SLUGS autopilot, http://slugsuav.soe.ucsc.edu
MAV_CLASS_ARDUPILOTMEGA = 3, ///< ArduPilotMega / ArduCopter, http://diydrones.com
MAV_CLASS_OPENPILOT = 4, ///< OpenPilot, http://openpilot.org
MAV_CLASS_GENERIC_MISSION_WAYPOINTS_ONLY = 5, ///< Generic autopilot only supporting simple waypoints
MAV_CLASS_GENERIC_MISSION_NAVIGATION_ONLY = 6, ///< Generic autopilot supporting waypoints and other simple navigation commands
MAV_CLASS_GENERIC_MISSION_FULL = 7, ///< Generic autopilot supporting the full mission command set
MAV_CLASS_NONE = 8, ///< No valid autopilot
MAV_CLASS_NB ///< Number of autopilot classes
};
 
enum MAV_ACTION
{
MAV_ACTION_HOLD = 0,
MAV_ACTION_MOTORS_START = 1,
MAV_ACTION_LAUNCH = 2,
MAV_ACTION_RETURN = 3,
MAV_ACTION_EMCY_LAND = 4,
MAV_ACTION_EMCY_KILL = 5,
MAV_ACTION_CONFIRM_KILL = 6,
MAV_ACTION_CONTINUE = 7,
MAV_ACTION_MOTORS_STOP = 8,
MAV_ACTION_HALT = 9,
MAV_ACTION_SHUTDOWN = 10,
MAV_ACTION_REBOOT = 11,
MAV_ACTION_SET_MANUAL = 12,
MAV_ACTION_SET_AUTO = 13,
MAV_ACTION_STORAGE_READ = 14,
MAV_ACTION_STORAGE_WRITE = 15,
MAV_ACTION_CALIBRATE_RC = 16,
MAV_ACTION_CALIBRATE_GYRO = 17,
MAV_ACTION_CALIBRATE_MAG = 18,
MAV_ACTION_CALIBRATE_ACC = 19,
MAV_ACTION_CALIBRATE_PRESSURE = 20,
MAV_ACTION_REC_START = 21,
MAV_ACTION_REC_PAUSE = 22,
MAV_ACTION_REC_STOP = 23,
MAV_ACTION_TAKEOFF = 24,
MAV_ACTION_NAVIGATE = 25,
MAV_ACTION_LAND = 26,
MAV_ACTION_LOITER = 27,
MAV_ACTION_SET_ORIGIN = 28,
MAV_ACTION_RELAY_ON = 29,
MAV_ACTION_RELAY_OFF = 30,
MAV_ACTION_GET_IMAGE = 31,
MAV_ACTION_VIDEO_START = 32,
MAV_ACTION_VIDEO_STOP = 33,
MAV_ACTION_RESET_MAP = 34,
MAV_ACTION_RESET_PLAN = 35,
MAV_ACTION_DELAY_BEFORE_COMMAND = 36,
MAV_ACTION_ASCEND_AT_RATE = 37,
MAV_ACTION_CHANGE_MODE = 38,
MAV_ACTION_LOITER_MAX_TURNS = 39,
MAV_ACTION_LOITER_MAX_TIME = 40,
MAV_ACTION_START_HILSIM = 41,
MAV_ACTION_STOP_HILSIM = 42,
MAV_ACTION_NB ///< Number of MAV actions
};
 
enum MAV_MODE
{
MAV_MODE_UNINIT = 0, ///< System is in undefined state
MAV_MODE_LOCKED = 1, ///< Motors are blocked, system is safe
MAV_MODE_MANUAL = 2, ///< System is allowed to be active, under manual (RC) control
MAV_MODE_GUIDED = 3, ///< System is allowed to be active, under autonomous control, manual setpoint
MAV_MODE_AUTO = 4, ///< System is allowed to be active, under autonomous control and navigation
MAV_MODE_TEST1 = 5, ///< Generic test mode, for custom use
MAV_MODE_TEST2 = 6, ///< Generic test mode, for custom use
MAV_MODE_TEST3 = 7, ///< Generic test mode, for custom use
MAV_MODE_READY = 8, ///< System is ready, motors are unblocked, but controllers are inactive
MAV_MODE_RC_TRAINING = 9 ///< System is blocked, only RC valued are read and reported back
};
 
enum MAV_STATE
{
MAV_STATE_UNINIT = 0,
MAV_STATE_BOOT,
MAV_STATE_CALIBRATING,
MAV_STATE_STANDBY,
MAV_STATE_ACTIVE,
MAV_STATE_CRITICAL,
MAV_STATE_EMERGENCY,
MAV_STATE_HILSIM,
MAV_STATE_POWEROFF
};
 
enum MAV_NAV
{
MAV_NAV_GROUNDED = 0,
MAV_NAV_LIFTOFF,
MAV_NAV_HOLD,
MAV_NAV_WAYPOINT,
MAV_NAV_VECTOR,
MAV_NAV_RETURNING,
MAV_NAV_LANDING,
MAV_NAV_LOST,
MAV_NAV_LOITER,
MAV_NAV_FREE_DRIFT
};
 
enum MAV_TYPE
{
MAV_GENERIC = 0,
MAV_FIXED_WING = 1,
MAV_QUADROTOR = 2,
MAV_COAXIAL = 3,
MAV_HELICOPTER = 4,
MAV_GROUND = 5,
OCU = 6,
MAV_AIRSHIP = 7,
MAV_FREE_BALLOON = 8,
MAV_ROCKET = 9,
UGV_GROUND_ROVER = 10,
UGV_SURFACE_SHIP = 11
};
 
enum MAV_AUTOPILOT_TYPE
{
MAV_AUTOPILOT_GENERIC = 0,
MAV_AUTOPILOT_PIXHAWK = 1,
MAV_AUTOPILOT_SLUGS = 2,
MAV_AUTOPILOT_ARDUPILOTMEGA = 3,
MAV_AUTOPILOT_NONE = 4
};
 
enum MAV_COMPONENT
{
MAV_COMP_ID_GPS,
MAV_COMP_ID_WAYPOINTPLANNER,
MAV_COMP_ID_BLOBTRACKER,
MAV_COMP_ID_PATHPLANNER,
MAV_COMP_ID_AIRSLAM,
MAV_COMP_ID_MAPPER,
MAV_COMP_ID_CAMERA,
MAV_COMP_ID_RADIO = 68,
MAV_COMP_ID_IMU = 200,
MAV_COMP_ID_IMU_2 = 201,
MAV_COMP_ID_IMU_3 = 202,
MAV_COMP_ID_UDP_BRIDGE = 240,
MAV_COMP_ID_UART_BRIDGE = 241,
MAV_COMP_ID_SYSTEM_CONTROL = 250
};
 
enum MAV_FRAME
{
MAV_FRAME_GLOBAL = 0,
MAV_FRAME_LOCAL = 1,
MAV_FRAME_MISSION = 2,
MAV_FRAME_GLOBAL_RELATIVE_ALT = 3,
MAV_FRAME_LOCAL_ENU = 4
};
 
enum MAVLINK_DATA_STREAM_TYPE
{
MAVLINK_DATA_STREAM_IMG_JPEG,
MAVLINK_DATA_STREAM_IMG_BMP,
MAVLINK_DATA_STREAM_IMG_RAW8U,
MAVLINK_DATA_STREAM_IMG_RAW32U,
MAVLINK_DATA_STREAM_IMG_PGM,
MAVLINK_DATA_STREAM_IMG_PNG
};
 
#ifndef MAVLINK_MAX_PAYLOAD_LEN
// it is possible to override this, but be careful!
#define MAVLINK_MAX_PAYLOAD_LEN 255 ///< Maximum payload length
#endif
 
#define MAVLINK_CORE_HEADER_LEN 5 ///< Length of core header (of the comm. layer): message length (1 byte) + message sequence (1 byte) + message system id (1 byte) + message component id (1 byte) + message type id (1 byte)
#define MAVLINK_NUM_HEADER_BYTES (MAVLINK_CORE_HEADER_LEN + 1) ///< Length of all header bytes, including core and checksum
#define MAVLINK_NUM_CHECKSUM_BYTES 2
#define MAVLINK_NUM_NON_PAYLOAD_BYTES (MAVLINK_NUM_HEADER_BYTES + MAVLINK_NUM_CHECKSUM_BYTES)
 
#define MAVLINK_MAX_PACKET_LEN (MAVLINK_MAX_PAYLOAD_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES) ///< Maximum packet length
 
#define MAVLINK_MSG_ID_EXTENDED_MESSAGE 255
#define MAVLINK_EXTENDED_HEADER_LEN 14
 
#if (defined _MSC_VER) | ((defined __APPLE__) & (defined __MACH__)) | (defined __linux__)
/* full fledged 32bit++ OS */
#define MAVLINK_MAX_EXTENDED_PACKET_LEN 65507
#else
/* small microcontrollers */
#define MAVLINK_MAX_EXTENDED_PACKET_LEN 2048
#endif
 
#define MAVLINK_MAX_EXTENDED_PAYLOAD_LEN (MAVLINK_MAX_EXTENDED_PACKET_LEN - MAVLINK_EXTENDED_HEADER_LEN - MAVLINK_NUM_NON_PAYLOAD_BYTES)
 
typedef struct param_union {
union {
float param_float;
int32_t param_int32;
uint32_t param_uint32;
uint8_t param_uint8;
uint8_t bytes[4];
};
uint8_t type;
} mavlink_param_union_t;
 
typedef struct __mavlink_system {
uint8_t sysid; ///< Used by the MAVLink message_xx_send() convenience function
uint8_t compid; ///< Used by the MAVLink message_xx_send() convenience function
uint8_t type; ///< Unused, can be used by user to store the system's type
uint8_t state; ///< Unused, can be used by user to store the system's state
uint8_t mode; ///< Unused, can be used by user to store the system's mode
uint8_t nav_mode; ///< Unused, can be used by user to store the system's navigation mode
} mavlink_system_t;
 
typedef struct __mavlink_message {
uint16_t checksum; /// sent at end of packet
uint8_t magic; ///< protocol magic marker
uint8_t len; ///< Length of payload
uint8_t seq; ///< Sequence of packet
uint8_t sysid; ///< ID of message sender system/aircraft
uint8_t compid; ///< ID of the message sender component
uint8_t msgid; ///< ID of message in payload
uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8];
} mavlink_message_t;
 
 
typedef struct __mavlink_extended_message {
mavlink_message_t base_msg;
int32_t extended_payload_len; ///< Length of extended payload if any
uint8_t extended_payload[MAVLINK_MAX_EXTENDED_PAYLOAD_LEN];
} mavlink_extended_message_t;
 
 
typedef enum {
MAVLINK_TYPE_CHAR = 0,
MAVLINK_TYPE_UINT8_T = 1,
MAVLINK_TYPE_INT8_T = 2,
MAVLINK_TYPE_UINT16_T = 3,
MAVLINK_TYPE_INT16_T = 4,
MAVLINK_TYPE_UINT32_T = 5,
MAVLINK_TYPE_INT32_T = 6,
MAVLINK_TYPE_UINT64_T = 7,
MAVLINK_TYPE_INT64_T = 8,
MAVLINK_TYPE_FLOAT = 9,
MAVLINK_TYPE_DOUBLE = 10
} mavlink_message_type_t;
 
#define MAVLINK_MAX_FIELDS 64
 
typedef struct __mavlink_field_info {
const char *name; // name of this field
const char *print_format; // printing format hint, or NULL
mavlink_message_type_t type; // type of this field
unsigned int array_length; // if non-zero, field is an array
unsigned int wire_offset; // offset of each field in the payload
unsigned int structure_offset; // offset in a C structure
} mavlink_field_info_t;
 
// note that in this structure the order of fields is the order
// in the XML file, not necessary the wire order
typedef struct __mavlink_message_info {
const char *name; // name of the message
unsigned num_fields; // how many fields in this message
mavlink_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information
} mavlink_message_info_t;
 
#define _MAV_PAYLOAD(msg) ((const char *)(&((msg)->payload64[0])))
#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)(&((msg)->payload64[0])))
 
// checksum is immediately after the payload bytes
#define mavlink_ck_a(msg) *((msg)->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
#define mavlink_ck_b(msg) *(((msg)->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
 
typedef enum {
MAVLINK_COMM_0,
MAVLINK_COMM_1,
MAVLINK_COMM_2,
MAVLINK_COMM_3
} mavlink_channel_t;
 
/*
* applications can set MAVLINK_COMM_NUM_BUFFERS to the maximum number
* of buffers they will use. If more are used, then the result will be
* a stack overrun
*/
#ifndef MAVLINK_COMM_NUM_BUFFERS
#if (defined linux) | (defined __linux) | (defined __MACH__) | (defined _WIN32)
# define MAVLINK_COMM_NUM_BUFFERS 16
#else
# define MAVLINK_COMM_NUM_BUFFERS 4
#endif
#endif
 
typedef enum {
MAVLINK_PARSE_STATE_UNINIT=0,
MAVLINK_PARSE_STATE_IDLE,
MAVLINK_PARSE_STATE_GOT_STX,
MAVLINK_PARSE_STATE_GOT_SEQ,
MAVLINK_PARSE_STATE_GOT_LENGTH,
MAVLINK_PARSE_STATE_GOT_SYSID,
MAVLINK_PARSE_STATE_GOT_COMPID,
MAVLINK_PARSE_STATE_GOT_MSGID,
MAVLINK_PARSE_STATE_GOT_PAYLOAD,
MAVLINK_PARSE_STATE_GOT_CRC1
} mavlink_parse_state_t; ///< The state machine for the comm parser
 
typedef struct __mavlink_status {
uint8_t msg_received; ///< Number of received messages
uint8_t buffer_overrun; ///< Number of buffer overruns
uint8_t parse_error; ///< Number of parse errors
mavlink_parse_state_t parse_state; ///< Parsing state machine
uint8_t packet_idx; ///< Index in current packet
uint8_t current_rx_seq; ///< Sequence number of last packet received
uint8_t current_tx_seq; ///< Sequence number of last packet sent
uint16_t packet_rx_success_count; ///< Received packets
uint16_t packet_rx_drop_count; ///< Number of packet drops
} mavlink_status_t;
 
#define MAVLINK_BIG_ENDIAN 0
#define MAVLINK_LITTLE_ENDIAN 1
 
#endif /* MAVLINK_TYPES_H_ */
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v0.9/protocol.h
0,0 → 1,322
#ifndef _MAVLINK_PROTOCOL_H_
#define _MAVLINK_PROTOCOL_H_
 
#include "string.h"
#include "mavlink_types.h"
 
/*
If you want MAVLink on a system that is native big-endian,
you need to define NATIVE_BIG_ENDIAN
*/
#ifdef NATIVE_BIG_ENDIAN
# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN)
#else
# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN != MAVLINK_LITTLE_ENDIAN)
#endif
 
#ifndef MAVLINK_STACK_BUFFER
#define MAVLINK_STACK_BUFFER 0
#endif
 
#ifndef MAVLINK_AVOID_GCC_STACK_BUG
# define MAVLINK_AVOID_GCC_STACK_BUG defined(__GNUC__)
#endif
 
#ifndef MAVLINK_ASSERT
#define MAVLINK_ASSERT(x)
#endif
 
#ifndef MAVLINK_START_UART_SEND
#define MAVLINK_START_UART_SEND(chan, length)
#endif
 
#ifndef MAVLINK_END_UART_SEND
#define MAVLINK_END_UART_SEND(chan, length)
#endif
 
#ifdef MAVLINK_SEPARATE_HELPERS
#define MAVLINK_HELPER
#else
#define MAVLINK_HELPER static inline
#include "mavlink_helpers.h"
#endif // MAVLINK_SEPARATE_HELPERS
 
/* always include the prototypes to ensure we don't get out of sync */
MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan);
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length, uint8_t crc_extra);
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length, uint8_t crc_extra);
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet,
uint8_t length, uint8_t crc_extra);
#endif
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length);
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length);
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length);
#endif // MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg);
MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg);
MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c);
MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status);
MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index,
uint8_t* r_bit_index, uint8_t* buffer);
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len);
#endif
 
/**
* @brief Get the required buffer size for this message
*/
static inline uint16_t mavlink_msg_get_send_buffer_length(const mavlink_message_t* msg)
{
return msg->len + MAVLINK_NUM_NON_PAYLOAD_BYTES;
}
 
#if MAVLINK_NEED_BYTE_SWAP
static inline void byte_swap_2(char *dst, const char *src)
{
dst[0] = src[1];
dst[1] = src[0];
}
static inline void byte_swap_4(char *dst, const char *src)
{
dst[0] = src[3];
dst[1] = src[2];
dst[2] = src[1];
dst[3] = src[0];
}
static inline void byte_swap_8(char *dst, const char *src)
{
dst[0] = src[7];
dst[1] = src[6];
dst[2] = src[5];
dst[3] = src[4];
dst[4] = src[3];
dst[5] = src[2];
dst[6] = src[1];
dst[7] = src[0];
}
#elif !MAVLINK_ALIGNED_FIELDS
static inline void byte_copy_2(char *dst, const char *src)
{
dst[0] = src[0];
dst[1] = src[1];
}
static inline void byte_copy_4(char *dst, const char *src)
{
dst[0] = src[0];
dst[1] = src[1];
dst[2] = src[2];
dst[3] = src[3];
}
static inline void byte_copy_8(char *dst, const char *src)
{
memcpy(dst, src, 8);
}
#endif
 
#define _mav_put_uint8_t(buf, wire_offset, b) buf[wire_offset] = (uint8_t)b
#define _mav_put_int8_t(buf, wire_offset, b) buf[wire_offset] = (int8_t)b
#define _mav_put_char(buf, wire_offset, b) buf[wire_offset] = b
 
#if MAVLINK_NEED_BYTE_SWAP
#define _mav_put_uint16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_int16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_int32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_int64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_float(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_double(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#elif !MAVLINK_ALIGNED_FIELDS
#define _mav_put_uint16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_int16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_int32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_int64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_float(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_double(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#else
#define _mav_put_uint16_t(buf, wire_offset, b) *(uint16_t *)&buf[wire_offset] = b
#define _mav_put_int16_t(buf, wire_offset, b) *(int16_t *)&buf[wire_offset] = b
#define _mav_put_uint32_t(buf, wire_offset, b) *(uint32_t *)&buf[wire_offset] = b
#define _mav_put_int32_t(buf, wire_offset, b) *(int32_t *)&buf[wire_offset] = b
#define _mav_put_uint64_t(buf, wire_offset, b) *(uint64_t *)&buf[wire_offset] = b
#define _mav_put_int64_t(buf, wire_offset, b) *(int64_t *)&buf[wire_offset] = b
#define _mav_put_float(buf, wire_offset, b) *(float *)&buf[wire_offset] = b
#define _mav_put_double(buf, wire_offset, b) *(double *)&buf[wire_offset] = b
#endif
 
/*
like memcpy(), but if src is NULL, do a memset to zero
*/
static void mav_array_memcpy(void *dest, const void *src, size_t n)
{
if (src == NULL) {
memset(dest, 0, n);
} else {
memcpy(dest, src, n);
}
}
 
/*
* Place a char array into a buffer
*/
static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
/*
* Place a uint8_t array into a buffer
*/
static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
/*
* Place a int8_t array into a buffer
*/
static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_PUT_ARRAY(TYPE, V) \
static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \
{ \
if (b == NULL) { \
memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \
} else { \
uint16_t i; \
for (i=0; i<array_length; i++) { \
_mav_put_## TYPE (buf, wire_offset+(i*sizeof(TYPE)), b[i]); \
} \
} \
}
#else
#define _MAV_PUT_ARRAY(TYPE, V) \
static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \
{ \
mav_array_memcpy(&buf[wire_offset], b, array_length*sizeof(TYPE)); \
}
#endif
 
_MAV_PUT_ARRAY(uint16_t, u16)
_MAV_PUT_ARRAY(uint32_t, u32)
_MAV_PUT_ARRAY(uint64_t, u64)
_MAV_PUT_ARRAY(int16_t, i16)
_MAV_PUT_ARRAY(int32_t, i32)
_MAV_PUT_ARRAY(int64_t, i64)
_MAV_PUT_ARRAY(float, f)
_MAV_PUT_ARRAY(double, d)
 
#define _MAV_RETURN_char(msg, wire_offset) (const char)_MAV_PAYLOAD(msg)[wire_offset]
#define _MAV_RETURN_int8_t(msg, wire_offset) (const int8_t)_MAV_PAYLOAD(msg)[wire_offset]
#define _MAV_RETURN_uint8_t(msg, wire_offset) (const uint8_t)_MAV_PAYLOAD(msg)[wire_offset]
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_MSG_RETURN_TYPE(TYPE, SIZE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ TYPE r; byte_swap_## SIZE((char*)&r, &_MAV_PAYLOAD(msg)[ofs]); return r; }
 
_MAV_MSG_RETURN_TYPE(uint16_t, 2)
_MAV_MSG_RETURN_TYPE(int16_t, 2)
_MAV_MSG_RETURN_TYPE(uint32_t, 4)
_MAV_MSG_RETURN_TYPE(int32_t, 4)
_MAV_MSG_RETURN_TYPE(uint64_t, 8)
_MAV_MSG_RETURN_TYPE(int64_t, 8)
_MAV_MSG_RETURN_TYPE(float, 4)
_MAV_MSG_RETURN_TYPE(double, 8)
 
#elif !MAVLINK_ALIGNED_FIELDS
#define _MAV_MSG_RETURN_TYPE(TYPE, SIZE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ TYPE r; byte_copy_## SIZE((char*)&r, &_MAV_PAYLOAD(msg)[ofs]); return r; }
 
_MAV_MSG_RETURN_TYPE(uint16_t, 2)
_MAV_MSG_RETURN_TYPE(int16_t, 2)
_MAV_MSG_RETURN_TYPE(uint32_t, 4)
_MAV_MSG_RETURN_TYPE(int32_t, 4)
_MAV_MSG_RETURN_TYPE(uint64_t, 8)
_MAV_MSG_RETURN_TYPE(int64_t, 8)
_MAV_MSG_RETURN_TYPE(float, 4)
_MAV_MSG_RETURN_TYPE(double, 8)
#else // nicely aligned, no swap
#define _MAV_MSG_RETURN_TYPE(TYPE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ return *(const TYPE *)(&_MAV_PAYLOAD(msg)[ofs]);}
 
_MAV_MSG_RETURN_TYPE(uint16_t)
_MAV_MSG_RETURN_TYPE(int16_t)
_MAV_MSG_RETURN_TYPE(uint32_t)
_MAV_MSG_RETURN_TYPE(int32_t)
_MAV_MSG_RETURN_TYPE(uint64_t)
_MAV_MSG_RETURN_TYPE(int64_t)
_MAV_MSG_RETURN_TYPE(float)
_MAV_MSG_RETURN_TYPE(double)
#endif // MAVLINK_NEED_BYTE_SWAP
 
static inline uint16_t _MAV_RETURN_char_array(const mavlink_message_t *msg, char *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
static inline uint16_t _MAV_RETURN_uint8_t_array(const mavlink_message_t *msg, uint8_t *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
static inline uint16_t _MAV_RETURN_int8_t_array(const mavlink_message_t *msg, int8_t *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_RETURN_ARRAY(TYPE, V) \
static inline uint16_t _MAV_RETURN_## TYPE ##_array(const mavlink_message_t *msg, TYPE *value, \
uint8_t array_length, uint8_t wire_offset) \
{ \
uint16_t i; \
for (i=0; i<array_length; i++) { \
value[i] = _MAV_RETURN_## TYPE (msg, wire_offset+(i*sizeof(value[0]))); \
} \
return array_length*sizeof(value[0]); \
}
#else
#define _MAV_RETURN_ARRAY(TYPE, V) \
static inline uint16_t _MAV_RETURN_## TYPE ##_array(const mavlink_message_t *msg, TYPE *value, \
uint8_t array_length, uint8_t wire_offset) \
{ \
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length*sizeof(TYPE)); \
return array_length*sizeof(TYPE); \
}
#endif
 
_MAV_RETURN_ARRAY(uint16_t, u16)
_MAV_RETURN_ARRAY(uint32_t, u32)
_MAV_RETURN_ARRAY(uint64_t, u64)
_MAV_RETURN_ARRAY(int16_t, i16)
_MAV_RETURN_ARRAY(int32_t, i32)
_MAV_RETURN_ARRAY(int64_t, i64)
_MAV_RETURN_ARRAY(float, f)
_MAV_RETURN_ARRAY(double, d)
 
#endif // _MAVLINK_PROTOCOL_H_
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/ardupilotmega.h
0,0 → 1,151
/** @file
* @brief MAVLink comm protocol generated from ardupilotmega.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef ARDUPILOTMEGA_H
#define ARDUPILOTMEGA_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 54, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 200, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 42, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SET_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_WRITE_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_ITEM, MAVLINK_MESSAGE_INFO_MISSION_REQUEST, MAVLINK_MESSAGE_INFO_MISSION_SET_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_LIST, MAVLINK_MESSAGE_INFO_MISSION_COUNT, MAVLINK_MESSAGE_INFO_MISSION_CLEAR_ALL, MAVLINK_MESSAGE_INFO_MISSION_ITEM_REACHED, MAVLINK_MESSAGE_INFO_MISSION_ACK, MAVLINK_MESSAGE_INFO_SET_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_SET_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SET_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_MOTORS_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_DATA_STREAM, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_VFR_HUD, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_COMMAND_LONG, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_SPEED_ESTIMATE, MAVLINK_MESSAGE_INFO_VICON_POSITION_ESTIMATE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SENSOR_OFFSETS, MAVLINK_MESSAGE_INFO_SET_MAG_OFFSETS, MAVLINK_MESSAGE_INFO_MEMINFO, MAVLINK_MESSAGE_INFO_AP_ADC, MAVLINK_MESSAGE_INFO_DIGICAM_CONFIGURE, MAVLINK_MESSAGE_INFO_DIGICAM_CONTROL, MAVLINK_MESSAGE_INFO_MOUNT_CONFIGURE, MAVLINK_MESSAGE_INFO_MOUNT_CONTROL, MAVLINK_MESSAGE_INFO_MOUNT_STATUS, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_FENCE_POINT, MAVLINK_MESSAGE_INFO_FENCE_FETCH_POINT, MAVLINK_MESSAGE_INFO_FENCE_STATUS, MAVLINK_MESSAGE_INFO_AHRS, MAVLINK_MESSAGE_INFO_SIMSTATE, MAVLINK_MESSAGE_INFO_HWSTATUS, MAVLINK_MESSAGE_INFO_RADIO, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MEMORY_VECT, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_ARDUPILOTMEGA
 
// ENUM DEFINITIONS
 
 
/** @brief Enumeration of possible mount operation modes */
#ifndef HAVE_ENUM_MAV_MOUNT_MODE
#define HAVE_ENUM_MAV_MOUNT_MODE
enum MAV_MOUNT_MODE
{
MAV_MOUNT_MODE_RETRACT=0, /* Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | */
MAV_MOUNT_MODE_NEUTRAL=1, /* Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | */
MAV_MOUNT_MODE_MAVLINK_TARGETING=2, /* Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | */
MAV_MOUNT_MODE_RC_TARGETING=3, /* Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | */
MAV_MOUNT_MODE_GPS_POINT=4, /* Load neutral position and start to point to Lat,Lon,Alt | */
MAV_MOUNT_MODE_ENUM_END=5, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_CMD
#define HAVE_ENUM_MAV_CMD
enum MAV_CMD
{
MAV_CMD_NAV_WAYPOINT=16, /* Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_UNLIM=17, /* Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_TURNS=18, /* Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_LOITER_TIME=19, /* Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_RETURN_TO_LAUNCH=20, /* Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_NAV_LAND=21, /* Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_TAKEOFF=22, /* Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| */
MAV_CMD_NAV_ROI=80, /* Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */
MAV_CMD_NAV_PATHPLANNING=81, /* Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| */
MAV_CMD_NAV_LAST=95, /* NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_DELAY=112, /* Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_CHANGE_ALT=113, /* Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| */
MAV_CMD_CONDITION_DISTANCE=114, /* Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_CONDITION_YAW=115, /* Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| */
MAV_CMD_CONDITION_LAST=159, /* NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_MODE=176, /* Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_JUMP=177, /* Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_CHANGE_SPEED=178, /* Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_HOME=179, /* Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| */
MAV_CMD_DO_SET_PARAMETER=180, /* Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_RELAY=181, /* Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_REPEAT_RELAY=182, /* Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_SET_SERVO=183, /* Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_REPEAT_SERVO=184, /* Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| */
MAV_CMD_DO_CONTROL_VIDEO=200, /* Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| */
MAV_CMD_DO_DIGICAM_CONFIGURE=202, /* Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| */
MAV_CMD_DO_DIGICAM_CONTROL=203, /* Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| */
MAV_CMD_DO_MOUNT_CONFIGURE=204, /* Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| */
MAV_CMD_DO_MOUNT_CONTROL=205, /* Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| */
MAV_CMD_DO_LAST=240, /* NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */
MAV_CMD_PREFLIGHT_CALIBRATION=241, /* Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| */
MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS=242, /* Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| */
MAV_CMD_PREFLIGHT_STORAGE=245, /* Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| */
MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN=246, /* Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| */
MAV_CMD_OVERRIDE_GOTO=252, /* Hold / continue the current action |MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan| MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position| MAV_FRAME coordinate frame of hold point| Desired yaw angle in degrees| Latitude / X position| Longitude / Y position| Altitude / Z position| */
MAV_CMD_MISSION_START=300, /* start running a mission |first_item: the first mission item to run| last_item: the last mission item to run (after this item is run, the mission ends)| */
MAV_CMD_COMPONENT_ARM_DISARM=400, /* Arms / Disarms a component |1 to arm, 0 to disarm| */
MAV_CMD_ENUM_END=401, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_FENCE_ACTION
#define HAVE_ENUM_FENCE_ACTION
enum FENCE_ACTION
{
FENCE_ACTION_NONE=0, /* Disable fenced mode | */
FENCE_ACTION_GUIDED=1, /* Switched to guided mode to return point (fence point 0) | */
FENCE_ACTION_ENUM_END=2, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_FENCE_BREACH
#define HAVE_ENUM_FENCE_BREACH
enum FENCE_BREACH
{
FENCE_BREACH_NONE=0, /* No last fence breach | */
FENCE_BREACH_MINALT=1, /* Breached minimum altitude | */
FENCE_BREACH_MAXALT=2, /* Breached minimum altitude | */
FENCE_BREACH_BOUNDARY=3, /* Breached fence boundary | */
FENCE_BREACH_ENUM_END=4, /* | */
};
#endif
 
#include "../common/common.h"
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
// MESSAGE DEFINITIONS
#include "./mavlink_msg_sensor_offsets.h"
#include "./mavlink_msg_set_mag_offsets.h"
#include "./mavlink_msg_meminfo.h"
#include "./mavlink_msg_ap_adc.h"
#include "./mavlink_msg_digicam_configure.h"
#include "./mavlink_msg_digicam_control.h"
#include "./mavlink_msg_mount_configure.h"
#include "./mavlink_msg_mount_control.h"
#include "./mavlink_msg_mount_status.h"
#include "./mavlink_msg_fence_point.h"
#include "./mavlink_msg_fence_fetch_point.h"
#include "./mavlink_msg_fence_status.h"
#include "./mavlink_msg_ahrs.h"
#include "./mavlink_msg_simstate.h"
#include "./mavlink_msg_hwstatus.h"
#include "./mavlink_msg_radio.h"
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // ARDUPILOTMEGA_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from ardupilotmega.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 254
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 1
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 1
#endif
 
#include "version.h"
#include "ardupilotmega.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_ahrs.h
0,0 → 1,276
// MESSAGE AHRS PACKING
 
#define MAVLINK_MSG_ID_AHRS 163
 
typedef struct __mavlink_ahrs_t
{
float omegaIx; ///< X gyro drift estimate rad/s
float omegaIy; ///< Y gyro drift estimate rad/s
float omegaIz; ///< Z gyro drift estimate rad/s
float accel_weight; ///< average accel_weight
float renorm_val; ///< average renormalisation value
float error_rp; ///< average error_roll_pitch value
float error_yaw; ///< average error_yaw value
} mavlink_ahrs_t;
 
#define MAVLINK_MSG_ID_AHRS_LEN 28
#define MAVLINK_MSG_ID_163_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_AHRS { \
"AHRS", \
7, \
{ { "omegaIx", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_ahrs_t, omegaIx) }, \
{ "omegaIy", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_ahrs_t, omegaIy) }, \
{ "omegaIz", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_ahrs_t, omegaIz) }, \
{ "accel_weight", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_ahrs_t, accel_weight) }, \
{ "renorm_val", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_ahrs_t, renorm_val) }, \
{ "error_rp", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_ahrs_t, error_rp) }, \
{ "error_yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_ahrs_t, error_yaw) }, \
} \
}
 
 
/**
* @brief Pack a ahrs message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ahrs_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float omegaIx, float omegaIy, float omegaIz, float accel_weight, float renorm_val, float error_rp, float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AHRS;
return mavlink_finalize_message(msg, system_id, component_id, 28, 127);
}
 
/**
* @brief Pack a ahrs message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ahrs_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float omegaIx,float omegaIy,float omegaIz,float accel_weight,float renorm_val,float error_rp,float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AHRS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 127);
}
 
/**
* @brief Encode a ahrs struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ahrs C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ahrs_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ahrs_t* ahrs)
{
return mavlink_msg_ahrs_pack(system_id, component_id, msg, ahrs->omegaIx, ahrs->omegaIy, ahrs->omegaIz, ahrs->accel_weight, ahrs->renorm_val, ahrs->error_rp, ahrs->error_yaw);
}
 
/**
* @brief Send a ahrs message
* @param chan MAVLink channel to send the message
*
* @param omegaIx X gyro drift estimate rad/s
* @param omegaIy Y gyro drift estimate rad/s
* @param omegaIz Z gyro drift estimate rad/s
* @param accel_weight average accel_weight
* @param renorm_val average renormalisation value
* @param error_rp average error_roll_pitch value
* @param error_yaw average error_yaw value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ahrs_send(mavlink_channel_t chan, float omegaIx, float omegaIy, float omegaIz, float accel_weight, float renorm_val, float error_rp, float error_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_float(buf, 0, omegaIx);
_mav_put_float(buf, 4, omegaIy);
_mav_put_float(buf, 8, omegaIz);
_mav_put_float(buf, 12, accel_weight);
_mav_put_float(buf, 16, renorm_val);
_mav_put_float(buf, 20, error_rp);
_mav_put_float(buf, 24, error_yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AHRS, buf, 28, 127);
#else
mavlink_ahrs_t packet;
packet.omegaIx = omegaIx;
packet.omegaIy = omegaIy;
packet.omegaIz = omegaIz;
packet.accel_weight = accel_weight;
packet.renorm_val = renorm_val;
packet.error_rp = error_rp;
packet.error_yaw = error_yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AHRS, (const char *)&packet, 28, 127);
#endif
}
 
#endif
 
// MESSAGE AHRS UNPACKING
 
 
/**
* @brief Get field omegaIx from ahrs message
*
* @return X gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIx(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field omegaIy from ahrs message
*
* @return Y gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIy(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field omegaIz from ahrs message
*
* @return Z gyro drift estimate rad/s
*/
static inline float mavlink_msg_ahrs_get_omegaIz(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field accel_weight from ahrs message
*
* @return average accel_weight
*/
static inline float mavlink_msg_ahrs_get_accel_weight(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field renorm_val from ahrs message
*
* @return average renormalisation value
*/
static inline float mavlink_msg_ahrs_get_renorm_val(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field error_rp from ahrs message
*
* @return average error_roll_pitch value
*/
static inline float mavlink_msg_ahrs_get_error_rp(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field error_yaw from ahrs message
*
* @return average error_yaw value
*/
static inline float mavlink_msg_ahrs_get_error_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a ahrs message into a struct
*
* @param msg The message to decode
* @param ahrs C-struct to decode the message contents into
*/
static inline void mavlink_msg_ahrs_decode(const mavlink_message_t* msg, mavlink_ahrs_t* ahrs)
{
#if MAVLINK_NEED_BYTE_SWAP
ahrs->omegaIx = mavlink_msg_ahrs_get_omegaIx(msg);
ahrs->omegaIy = mavlink_msg_ahrs_get_omegaIy(msg);
ahrs->omegaIz = mavlink_msg_ahrs_get_omegaIz(msg);
ahrs->accel_weight = mavlink_msg_ahrs_get_accel_weight(msg);
ahrs->renorm_val = mavlink_msg_ahrs_get_renorm_val(msg);
ahrs->error_rp = mavlink_msg_ahrs_get_error_rp(msg);
ahrs->error_yaw = mavlink_msg_ahrs_get_error_yaw(msg);
#else
memcpy(ahrs, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_ap_adc.h
0,0 → 1,254
// MESSAGE AP_ADC PACKING
 
#define MAVLINK_MSG_ID_AP_ADC 153
 
typedef struct __mavlink_ap_adc_t
{
uint16_t adc1; ///< ADC output 1
uint16_t adc2; ///< ADC output 2
uint16_t adc3; ///< ADC output 3
uint16_t adc4; ///< ADC output 4
uint16_t adc5; ///< ADC output 5
uint16_t adc6; ///< ADC output 6
} mavlink_ap_adc_t;
 
#define MAVLINK_MSG_ID_AP_ADC_LEN 12
#define MAVLINK_MSG_ID_153_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_AP_ADC { \
"AP_ADC", \
6, \
{ { "adc1", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_ap_adc_t, adc1) }, \
{ "adc2", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_ap_adc_t, adc2) }, \
{ "adc3", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_ap_adc_t, adc3) }, \
{ "adc4", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_ap_adc_t, adc4) }, \
{ "adc5", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_ap_adc_t, adc5) }, \
{ "adc6", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_ap_adc_t, adc6) }, \
} \
}
 
 
/**
* @brief Pack a ap_adc message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ap_adc_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t adc1, uint16_t adc2, uint16_t adc3, uint16_t adc4, uint16_t adc5, uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AP_ADC;
return mavlink_finalize_message(msg, system_id, component_id, 12, 188);
}
 
/**
* @brief Pack a ap_adc message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ap_adc_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t adc1,uint16_t adc2,uint16_t adc3,uint16_t adc4,uint16_t adc5,uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AP_ADC;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 188);
}
 
/**
* @brief Encode a ap_adc struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ap_adc C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ap_adc_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ap_adc_t* ap_adc)
{
return mavlink_msg_ap_adc_pack(system_id, component_id, msg, ap_adc->adc1, ap_adc->adc2, ap_adc->adc3, ap_adc->adc4, ap_adc->adc5, ap_adc->adc6);
}
 
/**
* @brief Send a ap_adc message
* @param chan MAVLink channel to send the message
*
* @param adc1 ADC output 1
* @param adc2 ADC output 2
* @param adc3 ADC output 3
* @param adc4 ADC output 4
* @param adc5 ADC output 5
* @param adc6 ADC output 6
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ap_adc_send(mavlink_channel_t chan, uint16_t adc1, uint16_t adc2, uint16_t adc3, uint16_t adc4, uint16_t adc5, uint16_t adc6)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint16_t(buf, 0, adc1);
_mav_put_uint16_t(buf, 2, adc2);
_mav_put_uint16_t(buf, 4, adc3);
_mav_put_uint16_t(buf, 6, adc4);
_mav_put_uint16_t(buf, 8, adc5);
_mav_put_uint16_t(buf, 10, adc6);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AP_ADC, buf, 12, 188);
#else
mavlink_ap_adc_t packet;
packet.adc1 = adc1;
packet.adc2 = adc2;
packet.adc3 = adc3;
packet.adc4 = adc4;
packet.adc5 = adc5;
packet.adc6 = adc6;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AP_ADC, (const char *)&packet, 12, 188);
#endif
}
 
#endif
 
// MESSAGE AP_ADC UNPACKING
 
 
/**
* @brief Get field adc1 from ap_adc message
*
* @return ADC output 1
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc1(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field adc2 from ap_adc message
*
* @return ADC output 2
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc2(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field adc3 from ap_adc message
*
* @return ADC output 3
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc3(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field adc4 from ap_adc message
*
* @return ADC output 4
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc4(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field adc5 from ap_adc message
*
* @return ADC output 5
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc5(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field adc6 from ap_adc message
*
* @return ADC output 6
*/
static inline uint16_t mavlink_msg_ap_adc_get_adc6(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Decode a ap_adc message into a struct
*
* @param msg The message to decode
* @param ap_adc C-struct to decode the message contents into
*/
static inline void mavlink_msg_ap_adc_decode(const mavlink_message_t* msg, mavlink_ap_adc_t* ap_adc)
{
#if MAVLINK_NEED_BYTE_SWAP
ap_adc->adc1 = mavlink_msg_ap_adc_get_adc1(msg);
ap_adc->adc2 = mavlink_msg_ap_adc_get_adc2(msg);
ap_adc->adc3 = mavlink_msg_ap_adc_get_adc3(msg);
ap_adc->adc4 = mavlink_msg_ap_adc_get_adc4(msg);
ap_adc->adc5 = mavlink_msg_ap_adc_get_adc5(msg);
ap_adc->adc6 = mavlink_msg_ap_adc_get_adc6(msg);
#else
memcpy(ap_adc, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_digicam_configure.h
0,0 → 1,364
// MESSAGE DIGICAM_CONFIGURE PACKING
 
#define MAVLINK_MSG_ID_DIGICAM_CONFIGURE 154
 
typedef struct __mavlink_digicam_configure_t
{
float extra_value; ///< Correspondent value to given extra_param
uint16_t shutter_speed; ///< Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t mode; ///< Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
uint8_t aperture; ///< F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
uint8_t iso; ///< ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
uint8_t exposure_type; ///< Exposure type enumeration from 1 to N (0 means ignore)
uint8_t command_id; ///< Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
uint8_t engine_cut_off; ///< Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
uint8_t extra_param; ///< Extra parameters enumeration (0 means ignore)
} mavlink_digicam_configure_t;
 
#define MAVLINK_MSG_ID_DIGICAM_CONFIGURE_LEN 15
#define MAVLINK_MSG_ID_154_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_DIGICAM_CONFIGURE { \
"DIGICAM_CONFIGURE", \
11, \
{ { "extra_value", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_digicam_configure_t, extra_value) }, \
{ "shutter_speed", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_digicam_configure_t, shutter_speed) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_digicam_configure_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_digicam_configure_t, target_component) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_digicam_configure_t, mode) }, \
{ "aperture", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_digicam_configure_t, aperture) }, \
{ "iso", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_digicam_configure_t, iso) }, \
{ "exposure_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_digicam_configure_t, exposure_type) }, \
{ "command_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_digicam_configure_t, command_id) }, \
{ "engine_cut_off", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_digicam_configure_t, engine_cut_off) }, \
{ "extra_param", NULL, MAVLINK_TYPE_UINT8_T, 0, 14, offsetof(mavlink_digicam_configure_t, extra_param) }, \
} \
}
 
 
/**
* @brief Pack a digicam_configure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_configure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t mode, uint16_t shutter_speed, uint8_t aperture, uint8_t iso, uint8_t exposure_type, uint8_t command_id, uint8_t engine_cut_off, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint16_t(buf, 4, shutter_speed);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
_mav_put_uint8_t(buf, 8, mode);
_mav_put_uint8_t(buf, 9, aperture);
_mav_put_uint8_t(buf, 10, iso);
_mav_put_uint8_t(buf, 11, exposure_type);
_mav_put_uint8_t(buf, 12, command_id);
_mav_put_uint8_t(buf, 13, engine_cut_off);
_mav_put_uint8_t(buf, 14, extra_param);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_digicam_configure_t packet;
packet.extra_value = extra_value;
packet.shutter_speed = shutter_speed;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONFIGURE;
return mavlink_finalize_message(msg, system_id, component_id, 15, 84);
}
 
/**
* @brief Pack a digicam_configure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_configure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t mode,uint16_t shutter_speed,uint8_t aperture,uint8_t iso,uint8_t exposure_type,uint8_t command_id,uint8_t engine_cut_off,uint8_t extra_param,float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint16_t(buf, 4, shutter_speed);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
_mav_put_uint8_t(buf, 8, mode);
_mav_put_uint8_t(buf, 9, aperture);
_mav_put_uint8_t(buf, 10, iso);
_mav_put_uint8_t(buf, 11, exposure_type);
_mav_put_uint8_t(buf, 12, command_id);
_mav_put_uint8_t(buf, 13, engine_cut_off);
_mav_put_uint8_t(buf, 14, extra_param);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_digicam_configure_t packet;
packet.extra_value = extra_value;
packet.shutter_speed = shutter_speed;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONFIGURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15, 84);
}
 
/**
* @brief Encode a digicam_configure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param digicam_configure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_digicam_configure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_digicam_configure_t* digicam_configure)
{
return mavlink_msg_digicam_configure_pack(system_id, component_id, msg, digicam_configure->target_system, digicam_configure->target_component, digicam_configure->mode, digicam_configure->shutter_speed, digicam_configure->aperture, digicam_configure->iso, digicam_configure->exposure_type, digicam_configure->command_id, digicam_configure->engine_cut_off, digicam_configure->extra_param, digicam_configure->extra_value);
}
 
/**
* @brief Send a digicam_configure message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mode Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
* @param shutter_speed Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
* @param aperture F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
* @param iso ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
* @param exposure_type Exposure type enumeration from 1 to N (0 means ignore)
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param engine_cut_off Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_digicam_configure_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t mode, uint16_t shutter_speed, uint8_t aperture, uint8_t iso, uint8_t exposure_type, uint8_t command_id, uint8_t engine_cut_off, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint16_t(buf, 4, shutter_speed);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
_mav_put_uint8_t(buf, 8, mode);
_mav_put_uint8_t(buf, 9, aperture);
_mav_put_uint8_t(buf, 10, iso);
_mav_put_uint8_t(buf, 11, exposure_type);
_mav_put_uint8_t(buf, 12, command_id);
_mav_put_uint8_t(buf, 13, engine_cut_off);
_mav_put_uint8_t(buf, 14, extra_param);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONFIGURE, buf, 15, 84);
#else
mavlink_digicam_configure_t packet;
packet.extra_value = extra_value;
packet.shutter_speed = shutter_speed;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mode = mode;
packet.aperture = aperture;
packet.iso = iso;
packet.exposure_type = exposure_type;
packet.command_id = command_id;
packet.engine_cut_off = engine_cut_off;
packet.extra_param = extra_param;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONFIGURE, (const char *)&packet, 15, 84);
#endif
}
 
#endif
 
// MESSAGE DIGICAM_CONFIGURE UNPACKING
 
 
/**
* @brief Get field target_system from digicam_configure message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_digicam_configure_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field target_component from digicam_configure message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_digicam_configure_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field mode from digicam_configure message
*
* @return Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field shutter_speed from digicam_configure message
*
* @return Divisor number //e.g. 1000 means 1/1000 (0 means ignore)
*/
static inline uint16_t mavlink_msg_digicam_configure_get_shutter_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field aperture from digicam_configure message
*
* @return F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_aperture(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 9);
}
 
/**
* @brief Get field iso from digicam_configure message
*
* @return ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_iso(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 10);
}
 
/**
* @brief Get field exposure_type from digicam_configure message
*
* @return Exposure type enumeration from 1 to N (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_exposure_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 11);
}
 
/**
* @brief Get field command_id from digicam_configure message
*
* @return Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
*/
static inline uint8_t mavlink_msg_digicam_configure_get_command_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field engine_cut_off from digicam_configure message
*
* @return Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_engine_cut_off(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 13);
}
 
/**
* @brief Get field extra_param from digicam_configure message
*
* @return Extra parameters enumeration (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_configure_get_extra_param(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 14);
}
 
/**
* @brief Get field extra_value from digicam_configure message
*
* @return Correspondent value to given extra_param
*/
static inline float mavlink_msg_digicam_configure_get_extra_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Decode a digicam_configure message into a struct
*
* @param msg The message to decode
* @param digicam_configure C-struct to decode the message contents into
*/
static inline void mavlink_msg_digicam_configure_decode(const mavlink_message_t* msg, mavlink_digicam_configure_t* digicam_configure)
{
#if MAVLINK_NEED_BYTE_SWAP
digicam_configure->extra_value = mavlink_msg_digicam_configure_get_extra_value(msg);
digicam_configure->shutter_speed = mavlink_msg_digicam_configure_get_shutter_speed(msg);
digicam_configure->target_system = mavlink_msg_digicam_configure_get_target_system(msg);
digicam_configure->target_component = mavlink_msg_digicam_configure_get_target_component(msg);
digicam_configure->mode = mavlink_msg_digicam_configure_get_mode(msg);
digicam_configure->aperture = mavlink_msg_digicam_configure_get_aperture(msg);
digicam_configure->iso = mavlink_msg_digicam_configure_get_iso(msg);
digicam_configure->exposure_type = mavlink_msg_digicam_configure_get_exposure_type(msg);
digicam_configure->command_id = mavlink_msg_digicam_configure_get_command_id(msg);
digicam_configure->engine_cut_off = mavlink_msg_digicam_configure_get_engine_cut_off(msg);
digicam_configure->extra_param = mavlink_msg_digicam_configure_get_extra_param(msg);
#else
memcpy(digicam_configure, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_digicam_control.h
0,0 → 1,342
// MESSAGE DIGICAM_CONTROL PACKING
 
#define MAVLINK_MSG_ID_DIGICAM_CONTROL 155
 
typedef struct __mavlink_digicam_control_t
{
float extra_value; ///< Correspondent value to given extra_param
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t session; ///< 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
uint8_t zoom_pos; ///< 1 to N //Zoom's absolute position (0 means ignore)
int8_t zoom_step; ///< -100 to 100 //Zooming step value to offset zoom from the current position
uint8_t focus_lock; ///< 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
uint8_t shot; ///< 0: ignore, 1: shot or start filming
uint8_t command_id; ///< Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
uint8_t extra_param; ///< Extra parameters enumeration (0 means ignore)
} mavlink_digicam_control_t;
 
#define MAVLINK_MSG_ID_DIGICAM_CONTROL_LEN 13
#define MAVLINK_MSG_ID_155_LEN 13
 
 
 
#define MAVLINK_MESSAGE_INFO_DIGICAM_CONTROL { \
"DIGICAM_CONTROL", \
10, \
{ { "extra_value", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_digicam_control_t, extra_value) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_digicam_control_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_digicam_control_t, target_component) }, \
{ "session", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_digicam_control_t, session) }, \
{ "zoom_pos", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_digicam_control_t, zoom_pos) }, \
{ "zoom_step", NULL, MAVLINK_TYPE_INT8_T, 0, 8, offsetof(mavlink_digicam_control_t, zoom_step) }, \
{ "focus_lock", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_digicam_control_t, focus_lock) }, \
{ "shot", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_digicam_control_t, shot) }, \
{ "command_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_digicam_control_t, command_id) }, \
{ "extra_param", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_digicam_control_t, extra_param) }, \
} \
}
 
 
/**
* @brief Pack a digicam_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t session, uint8_t zoom_pos, int8_t zoom_step, uint8_t focus_lock, uint8_t shot, uint8_t command_id, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 6, session);
_mav_put_uint8_t(buf, 7, zoom_pos);
_mav_put_int8_t(buf, 8, zoom_step);
_mav_put_uint8_t(buf, 9, focus_lock);
_mav_put_uint8_t(buf, 10, shot);
_mav_put_uint8_t(buf, 11, command_id);
_mav_put_uint8_t(buf, 12, extra_param);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_digicam_control_t packet;
packet.extra_value = extra_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 13, 22);
}
 
/**
* @brief Pack a digicam_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_digicam_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t session,uint8_t zoom_pos,int8_t zoom_step,uint8_t focus_lock,uint8_t shot,uint8_t command_id,uint8_t extra_param,float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 6, session);
_mav_put_uint8_t(buf, 7, zoom_pos);
_mav_put_int8_t(buf, 8, zoom_step);
_mav_put_uint8_t(buf, 9, focus_lock);
_mav_put_uint8_t(buf, 10, shot);
_mav_put_uint8_t(buf, 11, command_id);
_mav_put_uint8_t(buf, 12, extra_param);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_digicam_control_t packet;
packet.extra_value = extra_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DIGICAM_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 13, 22);
}
 
/**
* @brief Encode a digicam_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param digicam_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_digicam_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_digicam_control_t* digicam_control)
{
return mavlink_msg_digicam_control_pack(system_id, component_id, msg, digicam_control->target_system, digicam_control->target_component, digicam_control->session, digicam_control->zoom_pos, digicam_control->zoom_step, digicam_control->focus_lock, digicam_control->shot, digicam_control->command_id, digicam_control->extra_param, digicam_control->extra_value);
}
 
/**
* @brief Send a digicam_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param session 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
* @param zoom_pos 1 to N //Zoom's absolute position (0 means ignore)
* @param zoom_step -100 to 100 //Zooming step value to offset zoom from the current position
* @param focus_lock 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
* @param shot 0: ignore, 1: shot or start filming
* @param command_id Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
* @param extra_param Extra parameters enumeration (0 means ignore)
* @param extra_value Correspondent value to given extra_param
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_digicam_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t session, uint8_t zoom_pos, int8_t zoom_step, uint8_t focus_lock, uint8_t shot, uint8_t command_id, uint8_t extra_param, float extra_value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_float(buf, 0, extra_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 6, session);
_mav_put_uint8_t(buf, 7, zoom_pos);
_mav_put_int8_t(buf, 8, zoom_step);
_mav_put_uint8_t(buf, 9, focus_lock);
_mav_put_uint8_t(buf, 10, shot);
_mav_put_uint8_t(buf, 11, command_id);
_mav_put_uint8_t(buf, 12, extra_param);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONTROL, buf, 13, 22);
#else
mavlink_digicam_control_t packet;
packet.extra_value = extra_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.session = session;
packet.zoom_pos = zoom_pos;
packet.zoom_step = zoom_step;
packet.focus_lock = focus_lock;
packet.shot = shot;
packet.command_id = command_id;
packet.extra_param = extra_param;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DIGICAM_CONTROL, (const char *)&packet, 13, 22);
#endif
}
 
#endif
 
// MESSAGE DIGICAM_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from digicam_control message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_digicam_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field target_component from digicam_control message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_digicam_control_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field session from digicam_control message
*
* @return 0: stop, 1: start or keep it up //Session control e.g. show/hide lens
*/
static inline uint8_t mavlink_msg_digicam_control_get_session(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field zoom_pos from digicam_control message
*
* @return 1 to N //Zoom's absolute position (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_control_get_zoom_pos(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field zoom_step from digicam_control message
*
* @return -100 to 100 //Zooming step value to offset zoom from the current position
*/
static inline int8_t mavlink_msg_digicam_control_get_zoom_step(const mavlink_message_t* msg)
{
return _MAV_RETURN_int8_t(msg, 8);
}
 
/**
* @brief Get field focus_lock from digicam_control message
*
* @return 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus
*/
static inline uint8_t mavlink_msg_digicam_control_get_focus_lock(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 9);
}
 
/**
* @brief Get field shot from digicam_control message
*
* @return 0: ignore, 1: shot or start filming
*/
static inline uint8_t mavlink_msg_digicam_control_get_shot(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 10);
}
 
/**
* @brief Get field command_id from digicam_control message
*
* @return Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once
*/
static inline uint8_t mavlink_msg_digicam_control_get_command_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 11);
}
 
/**
* @brief Get field extra_param from digicam_control message
*
* @return Extra parameters enumeration (0 means ignore)
*/
static inline uint8_t mavlink_msg_digicam_control_get_extra_param(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field extra_value from digicam_control message
*
* @return Correspondent value to given extra_param
*/
static inline float mavlink_msg_digicam_control_get_extra_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Decode a digicam_control message into a struct
*
* @param msg The message to decode
* @param digicam_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_digicam_control_decode(const mavlink_message_t* msg, mavlink_digicam_control_t* digicam_control)
{
#if MAVLINK_NEED_BYTE_SWAP
digicam_control->extra_value = mavlink_msg_digicam_control_get_extra_value(msg);
digicam_control->target_system = mavlink_msg_digicam_control_get_target_system(msg);
digicam_control->target_component = mavlink_msg_digicam_control_get_target_component(msg);
digicam_control->session = mavlink_msg_digicam_control_get_session(msg);
digicam_control->zoom_pos = mavlink_msg_digicam_control_get_zoom_pos(msg);
digicam_control->zoom_step = mavlink_msg_digicam_control_get_zoom_step(msg);
digicam_control->focus_lock = mavlink_msg_digicam_control_get_focus_lock(msg);
digicam_control->shot = mavlink_msg_digicam_control_get_shot(msg);
digicam_control->command_id = mavlink_msg_digicam_control_get_command_id(msg);
digicam_control->extra_param = mavlink_msg_digicam_control_get_extra_param(msg);
#else
memcpy(digicam_control, _MAV_PAYLOAD(msg), 13);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_fence_fetch_point.h
0,0 → 1,188
// MESSAGE FENCE_FETCH_POINT PACKING
 
#define MAVLINK_MSG_ID_FENCE_FETCH_POINT 161
 
typedef struct __mavlink_fence_fetch_point_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t idx; ///< point index (first point is 1, 0 is for return point)
} mavlink_fence_fetch_point_t;
 
#define MAVLINK_MSG_ID_FENCE_FETCH_POINT_LEN 3
#define MAVLINK_MSG_ID_161_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_FETCH_POINT { \
"FENCE_FETCH_POINT", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_fence_fetch_point_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_fence_fetch_point_t, target_component) }, \
{ "idx", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_fence_fetch_point_t, idx) }, \
} \
}
 
 
/**
* @brief Pack a fence_fetch_point message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_fetch_point_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_FETCH_POINT;
return mavlink_finalize_message(msg, system_id, component_id, 3, 68);
}
 
/**
* @brief Pack a fence_fetch_point message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_fetch_point_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_FETCH_POINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3, 68);
}
 
/**
* @brief Encode a fence_fetch_point struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_fetch_point C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_fetch_point_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_fetch_point_t* fence_fetch_point)
{
return mavlink_msg_fence_fetch_point_pack(system_id, component_id, msg, fence_fetch_point->target_system, fence_fetch_point->target_component, fence_fetch_point->idx);
}
 
/**
* @brief Send a fence_fetch_point message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_fetch_point_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t idx)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, idx);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_FETCH_POINT, buf, 3, 68);
#else
mavlink_fence_fetch_point_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_FETCH_POINT, (const char *)&packet, 3, 68);
#endif
}
 
#endif
 
// MESSAGE FENCE_FETCH_POINT UNPACKING
 
 
/**
* @brief Get field target_system from fence_fetch_point message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from fence_fetch_point message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field idx from fence_fetch_point message
*
* @return point index (first point is 1, 0 is for return point)
*/
static inline uint8_t mavlink_msg_fence_fetch_point_get_idx(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a fence_fetch_point message into a struct
*
* @param msg The message to decode
* @param fence_fetch_point C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_fetch_point_decode(const mavlink_message_t* msg, mavlink_fence_fetch_point_t* fence_fetch_point)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_fetch_point->target_system = mavlink_msg_fence_fetch_point_get_target_system(msg);
fence_fetch_point->target_component = mavlink_msg_fence_fetch_point_get_target_component(msg);
fence_fetch_point->idx = mavlink_msg_fence_fetch_point_get_idx(msg);
#else
memcpy(fence_fetch_point, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_fence_point.h
0,0 → 1,254
// MESSAGE FENCE_POINT PACKING
 
#define MAVLINK_MSG_ID_FENCE_POINT 160
 
typedef struct __mavlink_fence_point_t
{
float lat; ///< Latitude of point
float lng; ///< Longitude of point
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t idx; ///< point index (first point is 1, 0 is for return point)
uint8_t count; ///< total number of points (for sanity checking)
} mavlink_fence_point_t;
 
#define MAVLINK_MSG_ID_FENCE_POINT_LEN 12
#define MAVLINK_MSG_ID_160_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_POINT { \
"FENCE_POINT", \
6, \
{ { "lat", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_fence_point_t, lat) }, \
{ "lng", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_fence_point_t, lng) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_fence_point_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_fence_point_t, target_component) }, \
{ "idx", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_fence_point_t, idx) }, \
{ "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_fence_point_t, count) }, \
} \
}
 
 
/**
* @brief Pack a fence_point message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_point_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t idx, uint8_t count, float lat, float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, lat);
_mav_put_float(buf, 4, lng);
_mav_put_uint8_t(buf, 8, target_system);
_mav_put_uint8_t(buf, 9, target_component);
_mav_put_uint8_t(buf, 10, idx);
_mav_put_uint8_t(buf, 11, count);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_fence_point_t packet;
packet.lat = lat;
packet.lng = lng;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_POINT;
return mavlink_finalize_message(msg, system_id, component_id, 12, 78);
}
 
/**
* @brief Pack a fence_point message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_point_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t idx,uint8_t count,float lat,float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, lat);
_mav_put_float(buf, 4, lng);
_mav_put_uint8_t(buf, 8, target_system);
_mav_put_uint8_t(buf, 9, target_component);
_mav_put_uint8_t(buf, 10, idx);
_mav_put_uint8_t(buf, 11, count);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_fence_point_t packet;
packet.lat = lat;
packet.lng = lng;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_POINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 78);
}
 
/**
* @brief Encode a fence_point struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_point C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_point_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_point_t* fence_point)
{
return mavlink_msg_fence_point_pack(system_id, component_id, msg, fence_point->target_system, fence_point->target_component, fence_point->idx, fence_point->count, fence_point->lat, fence_point->lng);
}
 
/**
* @brief Send a fence_point message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param idx point index (first point is 1, 0 is for return point)
* @param count total number of points (for sanity checking)
* @param lat Latitude of point
* @param lng Longitude of point
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_point_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t idx, uint8_t count, float lat, float lng)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, lat);
_mav_put_float(buf, 4, lng);
_mav_put_uint8_t(buf, 8, target_system);
_mav_put_uint8_t(buf, 9, target_component);
_mav_put_uint8_t(buf, 10, idx);
_mav_put_uint8_t(buf, 11, count);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_POINT, buf, 12, 78);
#else
mavlink_fence_point_t packet;
packet.lat = lat;
packet.lng = lng;
packet.target_system = target_system;
packet.target_component = target_component;
packet.idx = idx;
packet.count = count;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_POINT, (const char *)&packet, 12, 78);
#endif
}
 
#endif
 
// MESSAGE FENCE_POINT UNPACKING
 
 
/**
* @brief Get field target_system from fence_point message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_fence_point_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field target_component from fence_point message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_fence_point_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 9);
}
 
/**
* @brief Get field idx from fence_point message
*
* @return point index (first point is 1, 0 is for return point)
*/
static inline uint8_t mavlink_msg_fence_point_get_idx(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 10);
}
 
/**
* @brief Get field count from fence_point message
*
* @return total number of points (for sanity checking)
*/
static inline uint8_t mavlink_msg_fence_point_get_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 11);
}
 
/**
* @brief Get field lat from fence_point message
*
* @return Latitude of point
*/
static inline float mavlink_msg_fence_point_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field lng from fence_point message
*
* @return Longitude of point
*/
static inline float mavlink_msg_fence_point_get_lng(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Decode a fence_point message into a struct
*
* @param msg The message to decode
* @param fence_point C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_point_decode(const mavlink_message_t* msg, mavlink_fence_point_t* fence_point)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_point->lat = mavlink_msg_fence_point_get_lat(msg);
fence_point->lng = mavlink_msg_fence_point_get_lng(msg);
fence_point->target_system = mavlink_msg_fence_point_get_target_system(msg);
fence_point->target_component = mavlink_msg_fence_point_get_target_component(msg);
fence_point->idx = mavlink_msg_fence_point_get_idx(msg);
fence_point->count = mavlink_msg_fence_point_get_count(msg);
#else
memcpy(fence_point, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_fence_status.h
0,0 → 1,210
// MESSAGE FENCE_STATUS PACKING
 
#define MAVLINK_MSG_ID_FENCE_STATUS 162
 
typedef struct __mavlink_fence_status_t
{
uint32_t breach_time; ///< time of last breach in milliseconds since boot
uint16_t breach_count; ///< number of fence breaches
uint8_t breach_status; ///< 0 if currently inside fence, 1 if outside
uint8_t breach_type; ///< last breach type (see FENCE_BREACH_* enum)
} mavlink_fence_status_t;
 
#define MAVLINK_MSG_ID_FENCE_STATUS_LEN 8
#define MAVLINK_MSG_ID_162_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_FENCE_STATUS { \
"FENCE_STATUS", \
4, \
{ { "breach_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_fence_status_t, breach_time) }, \
{ "breach_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_fence_status_t, breach_count) }, \
{ "breach_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_fence_status_t, breach_status) }, \
{ "breach_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_fence_status_t, breach_type) }, \
} \
}
 
 
/**
* @brief Pack a fence_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, breach_time);
_mav_put_uint16_t(buf, 4, breach_count);
_mav_put_uint8_t(buf, 6, breach_status);
_mav_put_uint8_t(buf, 7, breach_type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_fence_status_t packet;
packet.breach_time = breach_time;
packet.breach_count = breach_count;
packet.breach_status = breach_status;
packet.breach_type = breach_type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 8, 189);
}
 
/**
* @brief Pack a fence_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_fence_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t breach_status,uint16_t breach_count,uint8_t breach_type,uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, breach_time);
_mav_put_uint16_t(buf, 4, breach_count);
_mav_put_uint8_t(buf, 6, breach_status);
_mav_put_uint8_t(buf, 7, breach_type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_fence_status_t packet;
packet.breach_time = breach_time;
packet.breach_count = breach_count;
packet.breach_status = breach_status;
packet.breach_type = breach_type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8, 189);
}
 
/**
* @brief Encode a fence_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param fence_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_fence_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_status_t* fence_status)
{
return mavlink_msg_fence_status_pack(system_id, component_id, msg, fence_status->breach_status, fence_status->breach_count, fence_status->breach_type, fence_status->breach_time);
}
 
/**
* @brief Send a fence_status message
* @param chan MAVLink channel to send the message
*
* @param breach_status 0 if currently inside fence, 1 if outside
* @param breach_count number of fence breaches
* @param breach_type last breach type (see FENCE_BREACH_* enum)
* @param breach_time time of last breach in milliseconds since boot
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_fence_status_send(mavlink_channel_t chan, uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_uint32_t(buf, 0, breach_time);
_mav_put_uint16_t(buf, 4, breach_count);
_mav_put_uint8_t(buf, 6, breach_status);
_mav_put_uint8_t(buf, 7, breach_type);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, buf, 8, 189);
#else
mavlink_fence_status_t packet;
packet.breach_time = breach_time;
packet.breach_count = breach_count;
packet.breach_status = breach_status;
packet.breach_type = breach_type;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, (const char *)&packet, 8, 189);
#endif
}
 
#endif
 
// MESSAGE FENCE_STATUS UNPACKING
 
 
/**
* @brief Get field breach_status from fence_status message
*
* @return 0 if currently inside fence, 1 if outside
*/
static inline uint8_t mavlink_msg_fence_status_get_breach_status(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field breach_count from fence_status message
*
* @return number of fence breaches
*/
static inline uint16_t mavlink_msg_fence_status_get_breach_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field breach_type from fence_status message
*
* @return last breach type (see FENCE_BREACH_* enum)
*/
static inline uint8_t mavlink_msg_fence_status_get_breach_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field breach_time from fence_status message
*
* @return time of last breach in milliseconds since boot
*/
static inline uint32_t mavlink_msg_fence_status_get_breach_time(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Decode a fence_status message into a struct
*
* @param msg The message to decode
* @param fence_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_fence_status_decode(const mavlink_message_t* msg, mavlink_fence_status_t* fence_status)
{
#if MAVLINK_NEED_BYTE_SWAP
fence_status->breach_time = mavlink_msg_fence_status_get_breach_time(msg);
fence_status->breach_count = mavlink_msg_fence_status_get_breach_count(msg);
fence_status->breach_status = mavlink_msg_fence_status_get_breach_status(msg);
fence_status->breach_type = mavlink_msg_fence_status_get_breach_type(msg);
#else
memcpy(fence_status, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_hwstatus.h
0,0 → 1,166
// MESSAGE HWSTATUS PACKING
 
#define MAVLINK_MSG_ID_HWSTATUS 165
 
typedef struct __mavlink_hwstatus_t
{
uint16_t Vcc; ///< board voltage (mV)
uint8_t I2Cerr; ///< I2C error count
} mavlink_hwstatus_t;
 
#define MAVLINK_MSG_ID_HWSTATUS_LEN 3
#define MAVLINK_MSG_ID_165_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_HWSTATUS { \
"HWSTATUS", \
2, \
{ { "Vcc", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_hwstatus_t, Vcc) }, \
{ "I2Cerr", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_hwstatus_t, I2Cerr) }, \
} \
}
 
 
/**
* @brief Pack a hwstatus message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hwstatus_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t Vcc, uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HWSTATUS;
return mavlink_finalize_message(msg, system_id, component_id, 3, 21);
}
 
/**
* @brief Pack a hwstatus message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hwstatus_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t Vcc,uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HWSTATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3, 21);
}
 
/**
* @brief Encode a hwstatus struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hwstatus C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hwstatus_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hwstatus_t* hwstatus)
{
return mavlink_msg_hwstatus_pack(system_id, component_id, msg, hwstatus->Vcc, hwstatus->I2Cerr);
}
 
/**
* @brief Send a hwstatus message
* @param chan MAVLink channel to send the message
*
* @param Vcc board voltage (mV)
* @param I2Cerr I2C error count
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hwstatus_send(mavlink_channel_t chan, uint16_t Vcc, uint8_t I2Cerr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, Vcc);
_mav_put_uint8_t(buf, 2, I2Cerr);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HWSTATUS, buf, 3, 21);
#else
mavlink_hwstatus_t packet;
packet.Vcc = Vcc;
packet.I2Cerr = I2Cerr;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HWSTATUS, (const char *)&packet, 3, 21);
#endif
}
 
#endif
 
// MESSAGE HWSTATUS UNPACKING
 
 
/**
* @brief Get field Vcc from hwstatus message
*
* @return board voltage (mV)
*/
static inline uint16_t mavlink_msg_hwstatus_get_Vcc(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field I2Cerr from hwstatus message
*
* @return I2C error count
*/
static inline uint8_t mavlink_msg_hwstatus_get_I2Cerr(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a hwstatus message into a struct
*
* @param msg The message to decode
* @param hwstatus C-struct to decode the message contents into
*/
static inline void mavlink_msg_hwstatus_decode(const mavlink_message_t* msg, mavlink_hwstatus_t* hwstatus)
{
#if MAVLINK_NEED_BYTE_SWAP
hwstatus->Vcc = mavlink_msg_hwstatus_get_Vcc(msg);
hwstatus->I2Cerr = mavlink_msg_hwstatus_get_I2Cerr(msg);
#else
memcpy(hwstatus, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_meminfo.h
0,0 → 1,166
// MESSAGE MEMINFO PACKING
 
#define MAVLINK_MSG_ID_MEMINFO 152
 
typedef struct __mavlink_meminfo_t
{
uint16_t brkval; ///< heap top
uint16_t freemem; ///< free memory
} mavlink_meminfo_t;
 
#define MAVLINK_MSG_ID_MEMINFO_LEN 4
#define MAVLINK_MSG_ID_152_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_MEMINFO { \
"MEMINFO", \
2, \
{ { "brkval", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_meminfo_t, brkval) }, \
{ "freemem", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_meminfo_t, freemem) }, \
} \
}
 
 
/**
* @brief Pack a meminfo message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param brkval heap top
* @param freemem free memory
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_meminfo_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t brkval, uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMINFO;
return mavlink_finalize_message(msg, system_id, component_id, 4, 208);
}
 
/**
* @brief Pack a meminfo message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param brkval heap top
* @param freemem free memory
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_meminfo_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t brkval,uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMINFO;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 208);
}
 
/**
* @brief Encode a meminfo struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param meminfo C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_meminfo_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_meminfo_t* meminfo)
{
return mavlink_msg_meminfo_pack(system_id, component_id, msg, meminfo->brkval, meminfo->freemem);
}
 
/**
* @brief Send a meminfo message
* @param chan MAVLink channel to send the message
*
* @param brkval heap top
* @param freemem free memory
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_meminfo_send(mavlink_channel_t chan, uint16_t brkval, uint16_t freemem)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, brkval);
_mav_put_uint16_t(buf, 2, freemem);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMINFO, buf, 4, 208);
#else
mavlink_meminfo_t packet;
packet.brkval = brkval;
packet.freemem = freemem;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMINFO, (const char *)&packet, 4, 208);
#endif
}
 
#endif
 
// MESSAGE MEMINFO UNPACKING
 
 
/**
* @brief Get field brkval from meminfo message
*
* @return heap top
*/
static inline uint16_t mavlink_msg_meminfo_get_brkval(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field freemem from meminfo message
*
* @return free memory
*/
static inline uint16_t mavlink_msg_meminfo_get_freemem(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a meminfo message into a struct
*
* @param msg The message to decode
* @param meminfo C-struct to decode the message contents into
*/
static inline void mavlink_msg_meminfo_decode(const mavlink_message_t* msg, mavlink_meminfo_t* meminfo)
{
#if MAVLINK_NEED_BYTE_SWAP
meminfo->brkval = mavlink_msg_meminfo_get_brkval(msg);
meminfo->freemem = mavlink_msg_meminfo_get_freemem(msg);
#else
memcpy(meminfo, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_mount_configure.h
0,0 → 1,254
// MESSAGE MOUNT_CONFIGURE PACKING
 
#define MAVLINK_MSG_ID_MOUNT_CONFIGURE 156
 
typedef struct __mavlink_mount_configure_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t mount_mode; ///< mount operating mode (see MAV_MOUNT_MODE enum)
uint8_t stab_roll; ///< (1 = yes, 0 = no)
uint8_t stab_pitch; ///< (1 = yes, 0 = no)
uint8_t stab_yaw; ///< (1 = yes, 0 = no)
} mavlink_mount_configure_t;
 
#define MAVLINK_MSG_ID_MOUNT_CONFIGURE_LEN 6
#define MAVLINK_MSG_ID_156_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_CONFIGURE { \
"MOUNT_CONFIGURE", \
6, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mount_configure_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mount_configure_t, target_component) }, \
{ "mount_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mount_configure_t, mount_mode) }, \
{ "stab_roll", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_mount_configure_t, stab_roll) }, \
{ "stab_pitch", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_mount_configure_t, stab_pitch) }, \
{ "stab_yaw", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_mount_configure_t, stab_yaw) }, \
} \
}
 
 
/**
* @brief Pack a mount_configure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_configure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t mount_mode, uint8_t stab_roll, uint8_t stab_pitch, uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONFIGURE;
return mavlink_finalize_message(msg, system_id, component_id, 6, 19);
}
 
/**
* @brief Pack a mount_configure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_configure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t mount_mode,uint8_t stab_roll,uint8_t stab_pitch,uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONFIGURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6, 19);
}
 
/**
* @brief Encode a mount_configure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_configure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_configure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_configure_t* mount_configure)
{
return mavlink_msg_mount_configure_pack(system_id, component_id, msg, mount_configure->target_system, mount_configure->target_component, mount_configure->mount_mode, mount_configure->stab_roll, mount_configure->stab_pitch, mount_configure->stab_yaw);
}
 
/**
* @brief Send a mount_configure message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mount_mode mount operating mode (see MAV_MOUNT_MODE enum)
* @param stab_roll (1 = yes, 0 = no)
* @param stab_pitch (1 = yes, 0 = no)
* @param stab_yaw (1 = yes, 0 = no)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_configure_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t mount_mode, uint8_t stab_roll, uint8_t stab_pitch, uint8_t stab_yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, mount_mode);
_mav_put_uint8_t(buf, 3, stab_roll);
_mav_put_uint8_t(buf, 4, stab_pitch);
_mav_put_uint8_t(buf, 5, stab_yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONFIGURE, buf, 6, 19);
#else
mavlink_mount_configure_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.mount_mode = mount_mode;
packet.stab_roll = stab_roll;
packet.stab_pitch = stab_pitch;
packet.stab_yaw = stab_yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONFIGURE, (const char *)&packet, 6, 19);
#endif
}
 
#endif
 
// MESSAGE MOUNT_CONFIGURE UNPACKING
 
 
/**
* @brief Get field target_system from mount_configure message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_configure_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mount_configure message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_configure_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mount_mode from mount_configure message
*
* @return mount operating mode (see MAV_MOUNT_MODE enum)
*/
static inline uint8_t mavlink_msg_mount_configure_get_mount_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field stab_roll from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field stab_pitch from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field stab_yaw from mount_configure message
*
* @return (1 = yes, 0 = no)
*/
static inline uint8_t mavlink_msg_mount_configure_get_stab_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Decode a mount_configure message into a struct
*
* @param msg The message to decode
* @param mount_configure C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_configure_decode(const mavlink_message_t* msg, mavlink_mount_configure_t* mount_configure)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_configure->target_system = mavlink_msg_mount_configure_get_target_system(msg);
mount_configure->target_component = mavlink_msg_mount_configure_get_target_component(msg);
mount_configure->mount_mode = mavlink_msg_mount_configure_get_mount_mode(msg);
mount_configure->stab_roll = mavlink_msg_mount_configure_get_stab_roll(msg);
mount_configure->stab_pitch = mavlink_msg_mount_configure_get_stab_pitch(msg);
mount_configure->stab_yaw = mavlink_msg_mount_configure_get_stab_yaw(msg);
#else
memcpy(mount_configure, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_mount_control.h
0,0 → 1,254
// MESSAGE MOUNT_CONTROL PACKING
 
#define MAVLINK_MSG_ID_MOUNT_CONTROL 157
 
typedef struct __mavlink_mount_control_t
{
int32_t input_a; ///< pitch(deg*100) or lat, depending on mount mode
int32_t input_b; ///< roll(deg*100) or lon depending on mount mode
int32_t input_c; ///< yaw(deg*100) or alt (in cm) depending on mount mode
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t save_position; ///< if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
} mavlink_mount_control_t;
 
#define MAVLINK_MSG_ID_MOUNT_CONTROL_LEN 15
#define MAVLINK_MSG_ID_157_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_CONTROL { \
"MOUNT_CONTROL", \
6, \
{ { "input_a", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_mount_control_t, input_a) }, \
{ "input_b", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_mount_control_t, input_b) }, \
{ "input_c", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_mount_control_t, input_c) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_mount_control_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_mount_control_t, target_component) }, \
{ "save_position", NULL, MAVLINK_TYPE_UINT8_T, 0, 14, offsetof(mavlink_mount_control_t, save_position) }, \
} \
}
 
 
/**
* @brief Pack a mount_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int32_t input_a, int32_t input_b, int32_t input_c, uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, input_a);
_mav_put_int32_t(buf, 4, input_b);
_mav_put_int32_t(buf, 8, input_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
_mav_put_uint8_t(buf, 14, save_position);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_mount_control_t packet;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.target_system = target_system;
packet.target_component = target_component;
packet.save_position = save_position;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 15, 21);
}
 
/**
* @brief Pack a mount_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int32_t input_a,int32_t input_b,int32_t input_c,uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, input_a);
_mav_put_int32_t(buf, 4, input_b);
_mav_put_int32_t(buf, 8, input_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
_mav_put_uint8_t(buf, 14, save_position);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_mount_control_t packet;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.target_system = target_system;
packet.target_component = target_component;
packet.save_position = save_position;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15, 21);
}
 
/**
* @brief Encode a mount_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_control_t* mount_control)
{
return mavlink_msg_mount_control_pack(system_id, component_id, msg, mount_control->target_system, mount_control->target_component, mount_control->input_a, mount_control->input_b, mount_control->input_c, mount_control->save_position);
}
 
/**
* @brief Send a mount_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param input_a pitch(deg*100) or lat, depending on mount mode
* @param input_b roll(deg*100) or lon depending on mount mode
* @param input_c yaw(deg*100) or alt (in cm) depending on mount mode
* @param save_position if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int32_t input_a, int32_t input_b, int32_t input_c, uint8_t save_position)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, input_a);
_mav_put_int32_t(buf, 4, input_b);
_mav_put_int32_t(buf, 8, input_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
_mav_put_uint8_t(buf, 14, save_position);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONTROL, buf, 15, 21);
#else
mavlink_mount_control_t packet;
packet.input_a = input_a;
packet.input_b = input_b;
packet.input_c = input_c;
packet.target_system = target_system;
packet.target_component = target_component;
packet.save_position = save_position;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_CONTROL, (const char *)&packet, 15, 21);
#endif
}
 
#endif
 
// MESSAGE MOUNT_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from mount_control message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field target_component from mount_control message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_control_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 13);
}
 
/**
* @brief Get field input_a from mount_control message
*
* @return pitch(deg*100) or lat, depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_a(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field input_b from mount_control message
*
* @return roll(deg*100) or lon depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_b(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field input_c from mount_control message
*
* @return yaw(deg*100) or alt (in cm) depending on mount mode
*/
static inline int32_t mavlink_msg_mount_control_get_input_c(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field save_position from mount_control message
*
* @return if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)
*/
static inline uint8_t mavlink_msg_mount_control_get_save_position(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 14);
}
 
/**
* @brief Decode a mount_control message into a struct
*
* @param msg The message to decode
* @param mount_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_control_decode(const mavlink_message_t* msg, mavlink_mount_control_t* mount_control)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_control->input_a = mavlink_msg_mount_control_get_input_a(msg);
mount_control->input_b = mavlink_msg_mount_control_get_input_b(msg);
mount_control->input_c = mavlink_msg_mount_control_get_input_c(msg);
mount_control->target_system = mavlink_msg_mount_control_get_target_system(msg);
mount_control->target_component = mavlink_msg_mount_control_get_target_component(msg);
mount_control->save_position = mavlink_msg_mount_control_get_save_position(msg);
#else
memcpy(mount_control, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_mount_status.h
0,0 → 1,232
// MESSAGE MOUNT_STATUS PACKING
 
#define MAVLINK_MSG_ID_MOUNT_STATUS 158
 
typedef struct __mavlink_mount_status_t
{
int32_t pointing_a; ///< pitch(deg*100) or lat, depending on mount mode
int32_t pointing_b; ///< roll(deg*100) or lon depending on mount mode
int32_t pointing_c; ///< yaw(deg*100) or alt (in cm) depending on mount mode
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mount_status_t;
 
#define MAVLINK_MSG_ID_MOUNT_STATUS_LEN 14
#define MAVLINK_MSG_ID_158_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_MOUNT_STATUS { \
"MOUNT_STATUS", \
5, \
{ { "pointing_a", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_mount_status_t, pointing_a) }, \
{ "pointing_b", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_mount_status_t, pointing_b) }, \
{ "pointing_c", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_mount_status_t, pointing_c) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_mount_status_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_mount_status_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mount_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int32_t pointing_a, int32_t pointing_b, int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 0, pointing_a);
_mav_put_int32_t(buf, 4, pointing_b);
_mav_put_int32_t(buf, 8, pointing_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_mount_status_t packet;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 14, 134);
}
 
/**
* @brief Pack a mount_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mount_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int32_t pointing_a,int32_t pointing_b,int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 0, pointing_a);
_mav_put_int32_t(buf, 4, pointing_b);
_mav_put_int32_t(buf, 8, pointing_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_mount_status_t packet;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MOUNT_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14, 134);
}
 
/**
* @brief Encode a mount_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mount_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mount_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mount_status_t* mount_status)
{
return mavlink_msg_mount_status_pack(system_id, component_id, msg, mount_status->target_system, mount_status->target_component, mount_status->pointing_a, mount_status->pointing_b, mount_status->pointing_c);
}
 
/**
* @brief Send a mount_status message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param pointing_a pitch(deg*100) or lat, depending on mount mode
* @param pointing_b roll(deg*100) or lon depending on mount mode
* @param pointing_c yaw(deg*100) or alt (in cm) depending on mount mode
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mount_status_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int32_t pointing_a, int32_t pointing_b, int32_t pointing_c)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_int32_t(buf, 0, pointing_a);
_mav_put_int32_t(buf, 4, pointing_b);
_mav_put_int32_t(buf, 8, pointing_c);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_STATUS, buf, 14, 134);
#else
mavlink_mount_status_t packet;
packet.pointing_a = pointing_a;
packet.pointing_b = pointing_b;
packet.pointing_c = pointing_c;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MOUNT_STATUS, (const char *)&packet, 14, 134);
#endif
}
 
#endif
 
// MESSAGE MOUNT_STATUS UNPACKING
 
 
/**
* @brief Get field target_system from mount_status message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mount_status_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field target_component from mount_status message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mount_status_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 13);
}
 
/**
* @brief Get field pointing_a from mount_status message
*
* @return pitch(deg*100) or lat, depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_a(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field pointing_b from mount_status message
*
* @return roll(deg*100) or lon depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_b(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field pointing_c from mount_status message
*
* @return yaw(deg*100) or alt (in cm) depending on mount mode
*/
static inline int32_t mavlink_msg_mount_status_get_pointing_c(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Decode a mount_status message into a struct
*
* @param msg The message to decode
* @param mount_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_mount_status_decode(const mavlink_message_t* msg, mavlink_mount_status_t* mount_status)
{
#if MAVLINK_NEED_BYTE_SWAP
mount_status->pointing_a = mavlink_msg_mount_status_get_pointing_a(msg);
mount_status->pointing_b = mavlink_msg_mount_status_get_pointing_b(msg);
mount_status->pointing_c = mavlink_msg_mount_status_get_pointing_c(msg);
mount_status->target_system = mavlink_msg_mount_status_get_target_system(msg);
mount_status->target_component = mavlink_msg_mount_status_get_target_component(msg);
#else
memcpy(mount_status, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_radio.h
0,0 → 1,276
// MESSAGE RADIO PACKING
 
#define MAVLINK_MSG_ID_RADIO 166
 
typedef struct __mavlink_radio_t
{
uint16_t rxerrors; ///< receive errors
uint16_t fixed; ///< count of error corrected packets
uint8_t rssi; ///< local signal strength
uint8_t remrssi; ///< remote signal strength
uint8_t txbuf; ///< how full the tx buffer is as a percentage
uint8_t noise; ///< background noise level
uint8_t remnoise; ///< remote background noise level
} mavlink_radio_t;
 
#define MAVLINK_MSG_ID_RADIO_LEN 9
#define MAVLINK_MSG_ID_166_LEN 9
 
 
 
#define MAVLINK_MESSAGE_INFO_RADIO { \
"RADIO", \
7, \
{ { "rxerrors", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_radio_t, rxerrors) }, \
{ "fixed", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_radio_t, fixed) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_radio_t, rssi) }, \
{ "remrssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_radio_t, remrssi) }, \
{ "txbuf", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_radio_t, txbuf) }, \
{ "noise", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_radio_t, noise) }, \
{ "remnoise", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_radio_t, remnoise) }, \
} \
}
 
 
/**
* @brief Pack a radio message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_radio_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t rssi, uint8_t remrssi, uint8_t txbuf, uint8_t noise, uint8_t remnoise, uint16_t rxerrors, uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, rxerrors);
_mav_put_uint16_t(buf, 2, fixed);
_mav_put_uint8_t(buf, 4, rssi);
_mav_put_uint8_t(buf, 5, remrssi);
_mav_put_uint8_t(buf, 6, txbuf);
_mav_put_uint8_t(buf, 7, noise);
_mav_put_uint8_t(buf, 8, remnoise);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_radio_t packet;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RADIO;
return mavlink_finalize_message(msg, system_id, component_id, 9, 21);
}
 
/**
* @brief Pack a radio message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_radio_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t rssi,uint8_t remrssi,uint8_t txbuf,uint8_t noise,uint8_t remnoise,uint16_t rxerrors,uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, rxerrors);
_mav_put_uint16_t(buf, 2, fixed);
_mav_put_uint8_t(buf, 4, rssi);
_mav_put_uint8_t(buf, 5, remrssi);
_mav_put_uint8_t(buf, 6, txbuf);
_mav_put_uint8_t(buf, 7, noise);
_mav_put_uint8_t(buf, 8, remnoise);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_radio_t packet;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RADIO;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 9, 21);
}
 
/**
* @brief Encode a radio struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param radio C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_radio_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_radio_t* radio)
{
return mavlink_msg_radio_pack(system_id, component_id, msg, radio->rssi, radio->remrssi, radio->txbuf, radio->noise, radio->remnoise, radio->rxerrors, radio->fixed);
}
 
/**
* @brief Send a radio message
* @param chan MAVLink channel to send the message
*
* @param rssi local signal strength
* @param remrssi remote signal strength
* @param txbuf how full the tx buffer is as a percentage
* @param noise background noise level
* @param remnoise remote background noise level
* @param rxerrors receive errors
* @param fixed count of error corrected packets
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_radio_send(mavlink_channel_t chan, uint8_t rssi, uint8_t remrssi, uint8_t txbuf, uint8_t noise, uint8_t remnoise, uint16_t rxerrors, uint16_t fixed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, rxerrors);
_mav_put_uint16_t(buf, 2, fixed);
_mav_put_uint8_t(buf, 4, rssi);
_mav_put_uint8_t(buf, 5, remrssi);
_mav_put_uint8_t(buf, 6, txbuf);
_mav_put_uint8_t(buf, 7, noise);
_mav_put_uint8_t(buf, 8, remnoise);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RADIO, buf, 9, 21);
#else
mavlink_radio_t packet;
packet.rxerrors = rxerrors;
packet.fixed = fixed;
packet.rssi = rssi;
packet.remrssi = remrssi;
packet.txbuf = txbuf;
packet.noise = noise;
packet.remnoise = remnoise;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RADIO, (const char *)&packet, 9, 21);
#endif
}
 
#endif
 
// MESSAGE RADIO UNPACKING
 
 
/**
* @brief Get field rssi from radio message
*
* @return local signal strength
*/
static inline uint8_t mavlink_msg_radio_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field remrssi from radio message
*
* @return remote signal strength
*/
static inline uint8_t mavlink_msg_radio_get_remrssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field txbuf from radio message
*
* @return how full the tx buffer is as a percentage
*/
static inline uint8_t mavlink_msg_radio_get_txbuf(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field noise from radio message
*
* @return background noise level
*/
static inline uint8_t mavlink_msg_radio_get_noise(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field remnoise from radio message
*
* @return remote background noise level
*/
static inline uint8_t mavlink_msg_radio_get_remnoise(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field rxerrors from radio message
*
* @return receive errors
*/
static inline uint16_t mavlink_msg_radio_get_rxerrors(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field fixed from radio message
*
* @return count of error corrected packets
*/
static inline uint16_t mavlink_msg_radio_get_fixed(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Decode a radio message into a struct
*
* @param msg The message to decode
* @param radio C-struct to decode the message contents into
*/
static inline void mavlink_msg_radio_decode(const mavlink_message_t* msg, mavlink_radio_t* radio)
{
#if MAVLINK_NEED_BYTE_SWAP
radio->rxerrors = mavlink_msg_radio_get_rxerrors(msg);
radio->fixed = mavlink_msg_radio_get_fixed(msg);
radio->rssi = mavlink_msg_radio_get_rssi(msg);
radio->remrssi = mavlink_msg_radio_get_remrssi(msg);
radio->txbuf = mavlink_msg_radio_get_txbuf(msg);
radio->noise = mavlink_msg_radio_get_noise(msg);
radio->remnoise = mavlink_msg_radio_get_remnoise(msg);
#else
memcpy(radio, _MAV_PAYLOAD(msg), 9);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_sensor_offsets.h
0,0 → 1,386
// MESSAGE SENSOR_OFFSETS PACKING
 
#define MAVLINK_MSG_ID_SENSOR_OFFSETS 150
 
typedef struct __mavlink_sensor_offsets_t
{
float mag_declination; ///< magnetic declination (radians)
int32_t raw_press; ///< raw pressure from barometer
int32_t raw_temp; ///< raw temperature from barometer
float gyro_cal_x; ///< gyro X calibration
float gyro_cal_y; ///< gyro Y calibration
float gyro_cal_z; ///< gyro Z calibration
float accel_cal_x; ///< accel X calibration
float accel_cal_y; ///< accel Y calibration
float accel_cal_z; ///< accel Z calibration
int16_t mag_ofs_x; ///< magnetometer X offset
int16_t mag_ofs_y; ///< magnetometer Y offset
int16_t mag_ofs_z; ///< magnetometer Z offset
} mavlink_sensor_offsets_t;
 
#define MAVLINK_MSG_ID_SENSOR_OFFSETS_LEN 42
#define MAVLINK_MSG_ID_150_LEN 42
 
 
 
#define MAVLINK_MESSAGE_INFO_SENSOR_OFFSETS { \
"SENSOR_OFFSETS", \
12, \
{ { "mag_declination", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_sensor_offsets_t, mag_declination) }, \
{ "raw_press", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_sensor_offsets_t, raw_press) }, \
{ "raw_temp", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_sensor_offsets_t, raw_temp) }, \
{ "gyro_cal_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_sensor_offsets_t, gyro_cal_x) }, \
{ "gyro_cal_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_sensor_offsets_t, gyro_cal_y) }, \
{ "gyro_cal_z", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_sensor_offsets_t, gyro_cal_z) }, \
{ "accel_cal_x", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_sensor_offsets_t, accel_cal_x) }, \
{ "accel_cal_y", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_sensor_offsets_t, accel_cal_y) }, \
{ "accel_cal_z", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_sensor_offsets_t, accel_cal_z) }, \
{ "mag_ofs_x", NULL, MAVLINK_TYPE_INT16_T, 0, 36, offsetof(mavlink_sensor_offsets_t, mag_ofs_x) }, \
{ "mag_ofs_y", NULL, MAVLINK_TYPE_INT16_T, 0, 38, offsetof(mavlink_sensor_offsets_t, mag_ofs_y) }, \
{ "mag_ofs_z", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_sensor_offsets_t, mag_ofs_z) }, \
} \
}
 
 
/**
* @brief Pack a sensor_offsets message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sensor_offsets_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z, float mag_declination, int32_t raw_press, int32_t raw_temp, float gyro_cal_x, float gyro_cal_y, float gyro_cal_z, float accel_cal_x, float accel_cal_y, float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_float(buf, 0, mag_declination);
_mav_put_int32_t(buf, 4, raw_press);
_mav_put_int32_t(buf, 8, raw_temp);
_mav_put_float(buf, 12, gyro_cal_x);
_mav_put_float(buf, 16, gyro_cal_y);
_mav_put_float(buf, 20, gyro_cal_z);
_mav_put_float(buf, 24, accel_cal_x);
_mav_put_float(buf, 28, accel_cal_y);
_mav_put_float(buf, 32, accel_cal_z);
_mav_put_int16_t(buf, 36, mag_ofs_x);
_mav_put_int16_t(buf, 38, mag_ofs_y);
_mav_put_int16_t(buf, 40, mag_ofs_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_sensor_offsets_t packet;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SENSOR_OFFSETS;
return mavlink_finalize_message(msg, system_id, component_id, 42, 134);
}
 
/**
* @brief Pack a sensor_offsets message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sensor_offsets_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int16_t mag_ofs_x,int16_t mag_ofs_y,int16_t mag_ofs_z,float mag_declination,int32_t raw_press,int32_t raw_temp,float gyro_cal_x,float gyro_cal_y,float gyro_cal_z,float accel_cal_x,float accel_cal_y,float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_float(buf, 0, mag_declination);
_mav_put_int32_t(buf, 4, raw_press);
_mav_put_int32_t(buf, 8, raw_temp);
_mav_put_float(buf, 12, gyro_cal_x);
_mav_put_float(buf, 16, gyro_cal_y);
_mav_put_float(buf, 20, gyro_cal_z);
_mav_put_float(buf, 24, accel_cal_x);
_mav_put_float(buf, 28, accel_cal_y);
_mav_put_float(buf, 32, accel_cal_z);
_mav_put_int16_t(buf, 36, mag_ofs_x);
_mav_put_int16_t(buf, 38, mag_ofs_y);
_mav_put_int16_t(buf, 40, mag_ofs_z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_sensor_offsets_t packet;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SENSOR_OFFSETS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 42, 134);
}
 
/**
* @brief Encode a sensor_offsets struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param sensor_offsets C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_sensor_offsets_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_sensor_offsets_t* sensor_offsets)
{
return mavlink_msg_sensor_offsets_pack(system_id, component_id, msg, sensor_offsets->mag_ofs_x, sensor_offsets->mag_ofs_y, sensor_offsets->mag_ofs_z, sensor_offsets->mag_declination, sensor_offsets->raw_press, sensor_offsets->raw_temp, sensor_offsets->gyro_cal_x, sensor_offsets->gyro_cal_y, sensor_offsets->gyro_cal_z, sensor_offsets->accel_cal_x, sensor_offsets->accel_cal_y, sensor_offsets->accel_cal_z);
}
 
/**
* @brief Send a sensor_offsets message
* @param chan MAVLink channel to send the message
*
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @param mag_declination magnetic declination (radians)
* @param raw_press raw pressure from barometer
* @param raw_temp raw temperature from barometer
* @param gyro_cal_x gyro X calibration
* @param gyro_cal_y gyro Y calibration
* @param gyro_cal_z gyro Z calibration
* @param accel_cal_x accel X calibration
* @param accel_cal_y accel Y calibration
* @param accel_cal_z accel Z calibration
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_sensor_offsets_send(mavlink_channel_t chan, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z, float mag_declination, int32_t raw_press, int32_t raw_temp, float gyro_cal_x, float gyro_cal_y, float gyro_cal_z, float accel_cal_x, float accel_cal_y, float accel_cal_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_float(buf, 0, mag_declination);
_mav_put_int32_t(buf, 4, raw_press);
_mav_put_int32_t(buf, 8, raw_temp);
_mav_put_float(buf, 12, gyro_cal_x);
_mav_put_float(buf, 16, gyro_cal_y);
_mav_put_float(buf, 20, gyro_cal_z);
_mav_put_float(buf, 24, accel_cal_x);
_mav_put_float(buf, 28, accel_cal_y);
_mav_put_float(buf, 32, accel_cal_z);
_mav_put_int16_t(buf, 36, mag_ofs_x);
_mav_put_int16_t(buf, 38, mag_ofs_y);
_mav_put_int16_t(buf, 40, mag_ofs_z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SENSOR_OFFSETS, buf, 42, 134);
#else
mavlink_sensor_offsets_t packet;
packet.mag_declination = mag_declination;
packet.raw_press = raw_press;
packet.raw_temp = raw_temp;
packet.gyro_cal_x = gyro_cal_x;
packet.gyro_cal_y = gyro_cal_y;
packet.gyro_cal_z = gyro_cal_z;
packet.accel_cal_x = accel_cal_x;
packet.accel_cal_y = accel_cal_y;
packet.accel_cal_z = accel_cal_z;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SENSOR_OFFSETS, (const char *)&packet, 42, 134);
#endif
}
 
#endif
 
// MESSAGE SENSOR_OFFSETS UNPACKING
 
 
/**
* @brief Get field mag_ofs_x from sensor_offsets message
*
* @return magnetometer X offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 36);
}
 
/**
* @brief Get field mag_ofs_y from sensor_offsets message
*
* @return magnetometer Y offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 38);
}
 
/**
* @brief Get field mag_ofs_z from sensor_offsets message
*
* @return magnetometer Z offset
*/
static inline int16_t mavlink_msg_sensor_offsets_get_mag_ofs_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 40);
}
 
/**
* @brief Get field mag_declination from sensor_offsets message
*
* @return magnetic declination (radians)
*/
static inline float mavlink_msg_sensor_offsets_get_mag_declination(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field raw_press from sensor_offsets message
*
* @return raw pressure from barometer
*/
static inline int32_t mavlink_msg_sensor_offsets_get_raw_press(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field raw_temp from sensor_offsets message
*
* @return raw temperature from barometer
*/
static inline int32_t mavlink_msg_sensor_offsets_get_raw_temp(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field gyro_cal_x from sensor_offsets message
*
* @return gyro X calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field gyro_cal_y from sensor_offsets message
*
* @return gyro Y calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field gyro_cal_z from sensor_offsets message
*
* @return gyro Z calibration
*/
static inline float mavlink_msg_sensor_offsets_get_gyro_cal_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field accel_cal_x from sensor_offsets message
*
* @return accel X calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field accel_cal_y from sensor_offsets message
*
* @return accel Y calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field accel_cal_z from sensor_offsets message
*
* @return accel Z calibration
*/
static inline float mavlink_msg_sensor_offsets_get_accel_cal_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a sensor_offsets message into a struct
*
* @param msg The message to decode
* @param sensor_offsets C-struct to decode the message contents into
*/
static inline void mavlink_msg_sensor_offsets_decode(const mavlink_message_t* msg, mavlink_sensor_offsets_t* sensor_offsets)
{
#if MAVLINK_NEED_BYTE_SWAP
sensor_offsets->mag_declination = mavlink_msg_sensor_offsets_get_mag_declination(msg);
sensor_offsets->raw_press = mavlink_msg_sensor_offsets_get_raw_press(msg);
sensor_offsets->raw_temp = mavlink_msg_sensor_offsets_get_raw_temp(msg);
sensor_offsets->gyro_cal_x = mavlink_msg_sensor_offsets_get_gyro_cal_x(msg);
sensor_offsets->gyro_cal_y = mavlink_msg_sensor_offsets_get_gyro_cal_y(msg);
sensor_offsets->gyro_cal_z = mavlink_msg_sensor_offsets_get_gyro_cal_z(msg);
sensor_offsets->accel_cal_x = mavlink_msg_sensor_offsets_get_accel_cal_x(msg);
sensor_offsets->accel_cal_y = mavlink_msg_sensor_offsets_get_accel_cal_y(msg);
sensor_offsets->accel_cal_z = mavlink_msg_sensor_offsets_get_accel_cal_z(msg);
sensor_offsets->mag_ofs_x = mavlink_msg_sensor_offsets_get_mag_ofs_x(msg);
sensor_offsets->mag_ofs_y = mavlink_msg_sensor_offsets_get_mag_ofs_y(msg);
sensor_offsets->mag_ofs_z = mavlink_msg_sensor_offsets_get_mag_ofs_z(msg);
#else
memcpy(sensor_offsets, _MAV_PAYLOAD(msg), 42);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_set_mag_offsets.h
0,0 → 1,232
// MESSAGE SET_MAG_OFFSETS PACKING
 
#define MAVLINK_MSG_ID_SET_MAG_OFFSETS 151
 
typedef struct __mavlink_set_mag_offsets_t
{
int16_t mag_ofs_x; ///< magnetometer X offset
int16_t mag_ofs_y; ///< magnetometer Y offset
int16_t mag_ofs_z; ///< magnetometer Z offset
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_set_mag_offsets_t;
 
#define MAVLINK_MSG_ID_SET_MAG_OFFSETS_LEN 8
#define MAVLINK_MSG_ID_151_LEN 8
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_MAG_OFFSETS { \
"SET_MAG_OFFSETS", \
5, \
{ { "mag_ofs_x", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_set_mag_offsets_t, mag_ofs_x) }, \
{ "mag_ofs_y", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_set_mag_offsets_t, mag_ofs_y) }, \
{ "mag_ofs_z", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_set_mag_offsets_t, mag_ofs_z) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_set_mag_offsets_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_set_mag_offsets_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a set_mag_offsets message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mag_offsets_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_set_mag_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MAG_OFFSETS;
return mavlink_finalize_message(msg, system_id, component_id, 8, 219);
}
 
/**
* @brief Pack a set_mag_offsets message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mag_offsets_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int16_t mag_ofs_x,int16_t mag_ofs_y,int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 8);
#else
mavlink_set_mag_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 8);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MAG_OFFSETS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 8, 219);
}
 
/**
* @brief Encode a set_mag_offsets struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_mag_offsets C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_mag_offsets_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_mag_offsets_t* set_mag_offsets)
{
return mavlink_msg_set_mag_offsets_pack(system_id, component_id, msg, set_mag_offsets->target_system, set_mag_offsets->target_component, set_mag_offsets->mag_ofs_x, set_mag_offsets->mag_ofs_y, set_mag_offsets->mag_ofs_z);
}
 
/**
* @brief Send a set_mag_offsets message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param mag_ofs_x magnetometer X offset
* @param mag_ofs_y magnetometer Y offset
* @param mag_ofs_z magnetometer Z offset
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_mag_offsets_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int16_t mag_ofs_x, int16_t mag_ofs_y, int16_t mag_ofs_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[8];
_mav_put_int16_t(buf, 0, mag_ofs_x);
_mav_put_int16_t(buf, 2, mag_ofs_y);
_mav_put_int16_t(buf, 4, mag_ofs_z);
_mav_put_uint8_t(buf, 6, target_system);
_mav_put_uint8_t(buf, 7, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MAG_OFFSETS, buf, 8, 219);
#else
mavlink_set_mag_offsets_t packet;
packet.mag_ofs_x = mag_ofs_x;
packet.mag_ofs_y = mag_ofs_y;
packet.mag_ofs_z = mag_ofs_z;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MAG_OFFSETS, (const char *)&packet, 8, 219);
#endif
}
 
#endif
 
// MESSAGE SET_MAG_OFFSETS UNPACKING
 
 
/**
* @brief Get field target_system from set_mag_offsets message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_mag_offsets_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field target_component from set_mag_offsets message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_mag_offsets_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field mag_ofs_x from set_mag_offsets message
*
* @return magnetometer X offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Get field mag_ofs_y from set_mag_offsets message
*
* @return magnetometer Y offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Get field mag_ofs_z from set_mag_offsets message
*
* @return magnetometer Z offset
*/
static inline int16_t mavlink_msg_set_mag_offsets_get_mag_ofs_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Decode a set_mag_offsets message into a struct
*
* @param msg The message to decode
* @param set_mag_offsets C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_mag_offsets_decode(const mavlink_message_t* msg, mavlink_set_mag_offsets_t* set_mag_offsets)
{
#if MAVLINK_NEED_BYTE_SWAP
set_mag_offsets->mag_ofs_x = mavlink_msg_set_mag_offsets_get_mag_ofs_x(msg);
set_mag_offsets->mag_ofs_y = mavlink_msg_set_mag_offsets_get_mag_ofs_y(msg);
set_mag_offsets->mag_ofs_z = mavlink_msg_set_mag_offsets_get_mag_ofs_z(msg);
set_mag_offsets->target_system = mavlink_msg_set_mag_offsets_get_target_system(msg);
set_mag_offsets->target_component = mavlink_msg_set_mag_offsets_get_target_component(msg);
#else
memcpy(set_mag_offsets, _MAV_PAYLOAD(msg), 8);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/mavlink_msg_simstate.h
0,0 → 1,320
// MESSAGE SIMSTATE PACKING
 
#define MAVLINK_MSG_ID_SIMSTATE 164
 
typedef struct __mavlink_simstate_t
{
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float xacc; ///< X acceleration m/s/s
float yacc; ///< Y acceleration m/s/s
float zacc; ///< Z acceleration m/s/s
float xgyro; ///< Angular speed around X axis rad/s
float ygyro; ///< Angular speed around Y axis rad/s
float zgyro; ///< Angular speed around Z axis rad/s
} mavlink_simstate_t;
 
#define MAVLINK_MSG_ID_SIMSTATE_LEN 36
#define MAVLINK_MSG_ID_164_LEN 36
 
 
 
#define MAVLINK_MESSAGE_INFO_SIMSTATE { \
"SIMSTATE", \
9, \
{ { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_simstate_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_simstate_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_simstate_t, yaw) }, \
{ "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_simstate_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_simstate_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_simstate_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_simstate_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_simstate_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_simstate_t, zgyro) }, \
} \
}
 
 
/**
* @brief Pack a simstate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_simstate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float roll, float pitch, float yaw, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SIMSTATE;
return mavlink_finalize_message(msg, system_id, component_id, 36, 42);
}
 
/**
* @brief Pack a simstate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_simstate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float roll,float pitch,float yaw,float xacc,float yacc,float zacc,float xgyro,float ygyro,float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SIMSTATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36, 42);
}
 
/**
* @brief Encode a simstate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param simstate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_simstate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_simstate_t* simstate)
{
return mavlink_msg_simstate_pack(system_id, component_id, msg, simstate->roll, simstate->pitch, simstate->yaw, simstate->xacc, simstate->yacc, simstate->zacc, simstate->xgyro, simstate->ygyro, simstate->zgyro);
}
 
/**
* @brief Send a simstate message
* @param chan MAVLink channel to send the message
*
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param xacc X acceleration m/s/s
* @param yacc Y acceleration m/s/s
* @param zacc Z acceleration m/s/s
* @param xgyro Angular speed around X axis rad/s
* @param ygyro Angular speed around Y axis rad/s
* @param zgyro Angular speed around Z axis rad/s
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_simstate_send(mavlink_channel_t chan, float roll, float pitch, float yaw, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, xacc);
_mav_put_float(buf, 16, yacc);
_mav_put_float(buf, 20, zacc);
_mav_put_float(buf, 24, xgyro);
_mav_put_float(buf, 28, ygyro);
_mav_put_float(buf, 32, zgyro);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SIMSTATE, buf, 36, 42);
#else
mavlink_simstate_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SIMSTATE, (const char *)&packet, 36, 42);
#endif
}
 
#endif
 
// MESSAGE SIMSTATE UNPACKING
 
 
/**
* @brief Get field roll from simstate message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_simstate_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field pitch from simstate message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_simstate_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field yaw from simstate message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_simstate_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field xacc from simstate message
*
* @return X acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yacc from simstate message
*
* @return Y acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field zacc from simstate message
*
* @return Z acceleration m/s/s
*/
static inline float mavlink_msg_simstate_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field xgyro from simstate message
*
* @return Angular speed around X axis rad/s
*/
static inline float mavlink_msg_simstate_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field ygyro from simstate message
*
* @return Angular speed around Y axis rad/s
*/
static inline float mavlink_msg_simstate_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field zgyro from simstate message
*
* @return Angular speed around Z axis rad/s
*/
static inline float mavlink_msg_simstate_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a simstate message into a struct
*
* @param msg The message to decode
* @param simstate C-struct to decode the message contents into
*/
static inline void mavlink_msg_simstate_decode(const mavlink_message_t* msg, mavlink_simstate_t* simstate)
{
#if MAVLINK_NEED_BYTE_SWAP
simstate->roll = mavlink_msg_simstate_get_roll(msg);
simstate->pitch = mavlink_msg_simstate_get_pitch(msg);
simstate->yaw = mavlink_msg_simstate_get_yaw(msg);
simstate->xacc = mavlink_msg_simstate_get_xacc(msg);
simstate->yacc = mavlink_msg_simstate_get_yacc(msg);
simstate->zacc = mavlink_msg_simstate_get_zacc(msg);
simstate->xgyro = mavlink_msg_simstate_get_xgyro(msg);
simstate->ygyro = mavlink_msg_simstate_get_ygyro(msg);
simstate->zgyro = mavlink_msg_simstate_get_zgyro(msg);
#else
memcpy(simstate, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/testsuite.h
0,0 → 1,908
/** @file
* @brief MAVLink comm protocol testsuite generated from ardupilotmega.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef ARDUPILOTMEGA_TESTSUITE_H
#define ARDUPILOTMEGA_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
static void mavlink_test_ardupilotmega(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_common(system_id, component_id, last_msg);
mavlink_test_ardupilotmega(system_id, component_id, last_msg);
}
#endif
 
#include "../common/testsuite.h"
 
 
static void mavlink_test_sensor_offsets(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_sensor_offsets_t packet_in = {
17.0,
963497672,
963497880,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
19107,
19211,
19315,
};
mavlink_sensor_offsets_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.mag_declination = packet_in.mag_declination;
packet1.raw_press = packet_in.raw_press;
packet1.raw_temp = packet_in.raw_temp;
packet1.gyro_cal_x = packet_in.gyro_cal_x;
packet1.gyro_cal_y = packet_in.gyro_cal_y;
packet1.gyro_cal_z = packet_in.gyro_cal_z;
packet1.accel_cal_x = packet_in.accel_cal_x;
packet1.accel_cal_y = packet_in.accel_cal_y;
packet1.accel_cal_z = packet_in.accel_cal_z;
packet1.mag_ofs_x = packet_in.mag_ofs_x;
packet1.mag_ofs_y = packet_in.mag_ofs_y;
packet1.mag_ofs_z = packet_in.mag_ofs_z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_pack(system_id, component_id, &msg , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_sensor_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sensor_offsets_send(MAVLINK_COMM_1 , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z , packet1.mag_declination , packet1.raw_press , packet1.raw_temp , packet1.gyro_cal_x , packet1.gyro_cal_y , packet1.gyro_cal_z , packet1.accel_cal_x , packet1.accel_cal_y , packet1.accel_cal_z );
mavlink_msg_sensor_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_mag_offsets(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_mag_offsets_t packet_in = {
17235,
17339,
17443,
151,
218,
};
mavlink_set_mag_offsets_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.mag_ofs_x = packet_in.mag_ofs_x;
packet1.mag_ofs_y = packet_in.mag_ofs_y;
packet1.mag_ofs_z = packet_in.mag_ofs_z;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_mag_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mag_offsets_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mag_ofs_x , packet1.mag_ofs_y , packet1.mag_ofs_z );
mavlink_msg_set_mag_offsets_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_meminfo(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_meminfo_t packet_in = {
17235,
17339,
};
mavlink_meminfo_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.brkval = packet_in.brkval;
packet1.freemem = packet_in.freemem;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_pack(system_id, component_id, &msg , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_meminfo_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_meminfo_send(MAVLINK_COMM_1 , packet1.brkval , packet1.freemem );
mavlink_msg_meminfo_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ap_adc(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ap_adc_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
};
mavlink_ap_adc_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.adc1 = packet_in.adc1;
packet1.adc2 = packet_in.adc2;
packet1.adc3 = packet_in.adc3;
packet1.adc4 = packet_in.adc4;
packet1.adc5 = packet_in.adc5;
packet1.adc6 = packet_in.adc6;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_pack(system_id, component_id, &msg , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ap_adc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ap_adc_send(MAVLINK_COMM_1 , packet1.adc1 , packet1.adc2 , packet1.adc3 , packet1.adc4 , packet1.adc5 , packet1.adc6 );
mavlink_msg_ap_adc_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_digicam_configure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_digicam_configure_t packet_in = {
17.0,
17443,
151,
218,
29,
96,
163,
230,
41,
108,
175,
};
mavlink_digicam_configure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.extra_value = packet_in.extra_value;
packet1.shutter_speed = packet_in.shutter_speed;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.mode = packet_in.mode;
packet1.aperture = packet_in.aperture;
packet1.iso = packet_in.iso;
packet1.exposure_type = packet_in.exposure_type;
packet1.command_id = packet_in.command_id;
packet1.engine_cut_off = packet_in.engine_cut_off;
packet1.extra_param = packet_in.extra_param;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_digicam_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_configure_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mode , packet1.shutter_speed , packet1.aperture , packet1.iso , packet1.exposure_type , packet1.command_id , packet1.engine_cut_off , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_digicam_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_digicam_control_t packet_in = {
17.0,
17,
84,
151,
218,
29,
96,
163,
230,
41,
};
mavlink_digicam_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.extra_value = packet_in.extra_value;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.session = packet_in.session;
packet1.zoom_pos = packet_in.zoom_pos;
packet1.zoom_step = packet_in.zoom_step;
packet1.focus_lock = packet_in.focus_lock;
packet1.shot = packet_in.shot;
packet1.command_id = packet_in.command_id;
packet1.extra_param = packet_in.extra_param;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_digicam_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_digicam_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.session , packet1.zoom_pos , packet1.zoom_step , packet1.focus_lock , packet1.shot , packet1.command_id , packet1.extra_param , packet1.extra_value );
mavlink_msg_digicam_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_configure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_configure_t packet_in = {
5,
72,
139,
206,
17,
84,
};
mavlink_mount_configure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.mount_mode = packet_in.mount_mode;
packet1.stab_roll = packet_in.stab_roll;
packet1.stab_pitch = packet_in.stab_pitch;
packet1.stab_yaw = packet_in.stab_yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_configure_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.mount_mode , packet1.stab_roll , packet1.stab_pitch , packet1.stab_yaw );
mavlink_msg_mount_configure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_control_t packet_in = {
963497464,
963497672,
963497880,
41,
108,
175,
};
mavlink_mount_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.input_a = packet_in.input_a;
packet1.input_b = packet_in.input_b;
packet1.input_c = packet_in.input_c;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.save_position = packet_in.save_position;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.input_a , packet1.input_b , packet1.input_c , packet1.save_position );
mavlink_msg_mount_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mount_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mount_status_t packet_in = {
963497464,
963497672,
963497880,
41,
108,
};
mavlink_mount_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.pointing_a = packet_in.pointing_a;
packet1.pointing_b = packet_in.pointing_b;
packet1.pointing_c = packet_in.pointing_c;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mount_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mount_status_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.pointing_a , packet1.pointing_b , packet1.pointing_c );
mavlink_msg_mount_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_point(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_point_t packet_in = {
17.0,
45.0,
29,
96,
163,
230,
};
mavlink_fence_point_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.lat = packet_in.lat;
packet1.lng = packet_in.lng;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.idx = packet_in.idx;
packet1.count = packet_in.count;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_point_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.idx , packet1.count , packet1.lat , packet1.lng );
mavlink_msg_fence_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_fetch_point(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_fetch_point_t packet_in = {
5,
72,
139,
};
mavlink_fence_fetch_point_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.idx = packet_in.idx;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_fetch_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_fetch_point_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.idx );
mavlink_msg_fence_fetch_point_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_fence_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_fence_status_t packet_in = {
963497464,
17443,
151,
218,
};
mavlink_fence_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.breach_time = packet_in.breach_time;
packet1.breach_count = packet_in.breach_count;
packet1.breach_status = packet_in.breach_status;
packet1.breach_type = packet_in.breach_type;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_pack(system_id, component_id, &msg , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_fence_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_fence_status_send(MAVLINK_COMM_1 , packet1.breach_status , packet1.breach_count , packet1.breach_type , packet1.breach_time );
mavlink_msg_fence_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ahrs(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ahrs_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
};
mavlink_ahrs_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.omegaIx = packet_in.omegaIx;
packet1.omegaIy = packet_in.omegaIy;
packet1.omegaIz = packet_in.omegaIz;
packet1.accel_weight = packet_in.accel_weight;
packet1.renorm_val = packet_in.renorm_val;
packet1.error_rp = packet_in.error_rp;
packet1.error_yaw = packet_in.error_yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_pack(system_id, component_id, &msg , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ahrs_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ahrs_send(MAVLINK_COMM_1 , packet1.omegaIx , packet1.omegaIy , packet1.omegaIz , packet1.accel_weight , packet1.renorm_val , packet1.error_rp , packet1.error_yaw );
mavlink_msg_ahrs_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_simstate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_simstate_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
};
mavlink_simstate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_pack(system_id, component_id, &msg , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_simstate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_simstate_send(MAVLINK_COMM_1 , packet1.roll , packet1.pitch , packet1.yaw , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro );
mavlink_msg_simstate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hwstatus(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hwstatus_t packet_in = {
17235,
139,
};
mavlink_hwstatus_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.Vcc = packet_in.Vcc;
packet1.I2Cerr = packet_in.I2Cerr;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_pack(system_id, component_id, &msg , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hwstatus_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hwstatus_send(MAVLINK_COMM_1 , packet1.Vcc , packet1.I2Cerr );
mavlink_msg_hwstatus_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_radio(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_radio_t packet_in = {
17235,
17339,
17,
84,
151,
218,
29,
};
mavlink_radio_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.rxerrors = packet_in.rxerrors;
packet1.fixed = packet_in.fixed;
packet1.rssi = packet_in.rssi;
packet1.remrssi = packet_in.remrssi;
packet1.txbuf = packet_in.txbuf;
packet1.noise = packet_in.noise;
packet1.remnoise = packet_in.remnoise;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_pack(system_id, component_id, &msg , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_radio_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_radio_send(MAVLINK_COMM_1 , packet1.rssi , packet1.remrssi , packet1.txbuf , packet1.noise , packet1.remnoise , packet1.rxerrors , packet1.fixed );
mavlink_msg_radio_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ardupilotmega(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_sensor_offsets(system_id, component_id, last_msg);
mavlink_test_set_mag_offsets(system_id, component_id, last_msg);
mavlink_test_meminfo(system_id, component_id, last_msg);
mavlink_test_ap_adc(system_id, component_id, last_msg);
mavlink_test_digicam_configure(system_id, component_id, last_msg);
mavlink_test_digicam_control(system_id, component_id, last_msg);
mavlink_test_mount_configure(system_id, component_id, last_msg);
mavlink_test_mount_control(system_id, component_id, last_msg);
mavlink_test_mount_status(system_id, component_id, last_msg);
mavlink_test_fence_point(system_id, component_id, last_msg);
mavlink_test_fence_fetch_point(system_id, component_id, last_msg);
mavlink_test_fence_status(system_id, component_id, last_msg);
mavlink_test_ahrs(system_id, component_id, last_msg);
mavlink_test_simstate(system_id, component_id, last_msg);
mavlink_test_hwstatus(system_id, component_id, last_msg);
mavlink_test_radio(system_id, component_id, last_msg);
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // ARDUPILOTMEGA_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from ardupilotmega.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Mon Apr 30 11:40:12 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "1.0"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/checksum.h
0,0 → 1,89
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef _CHECKSUM_H_
#define _CHECKSUM_H_
 
 
/**
*
* CALCULATE THE CHECKSUM
*
*/
 
#define X25_INIT_CRC 0xffff
#define X25_VALIDATE_CRC 0xf0b8
 
/**
* @brief Accumulate the X.25 CRC by adding one char at a time.
*
* The checksum function adds the hash of one char at a time to the
* 16 bit checksum (uint16_t).
*
* @param data new char to hash
* @param crcAccum the already accumulated checksum
**/
static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
/*Accumulate one byte of data into the CRC*/
uint8_t tmp;
 
tmp = data ^ (uint8_t)(*crcAccum &0xff);
tmp ^= (tmp<<4);
*crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
 
/**
* @brief Initiliaze the buffer for the X.25 CRC
*
* @param crcAccum the 16 bit X.25 CRC
*/
static inline void crc_init(uint16_t* crcAccum)
{
*crcAccum = X25_INIT_CRC;
}
 
 
/**
* @brief Calculates the X.25 checksum on a byte buffer
*
* @param pBuffer buffer containing the byte array to hash
* @param length length of the byte array
* @return the checksum over the buffer bytes
**/
static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length)
{
uint16_t crcTmp;
crc_init(&crcTmp);
while (length--) {
crc_accumulate(*pBuffer++, &crcTmp);
}
return crcTmp;
}
 
/**
* @brief Accumulate the X.25 CRC by adding an array of bytes
*
* The checksum function adds the hash of one char at a time to the
* 16 bit checksum (uint16_t).
*
* @param data new bytes to hash
* @param crcAccum the already accumulated checksum
**/
static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint8_t length)
{
const uint8_t *p = (const uint8_t *)pBuffer;
while (length--) {
crc_accumulate(*p++, crcAccum);
}
}
 
 
 
 
#endif /* _CHECKSUM_H_ */
 
#ifdef __cplusplus
}
#endif
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/common.h
0,0 → 1,446
/** @file
* @brief MAVLink comm protocol generated from common.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef COMMON_H
#define COMMON_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 54, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 200, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SET_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_WRITE_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_ITEM, MAVLINK_MESSAGE_INFO_MISSION_REQUEST, MAVLINK_MESSAGE_INFO_MISSION_SET_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_LIST, MAVLINK_MESSAGE_INFO_MISSION_COUNT, MAVLINK_MESSAGE_INFO_MISSION_CLEAR_ALL, MAVLINK_MESSAGE_INFO_MISSION_ITEM_REACHED, MAVLINK_MESSAGE_INFO_MISSION_ACK, MAVLINK_MESSAGE_INFO_SET_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_SET_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SET_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_MOTORS_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_DATA_STREAM, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_VFR_HUD, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_COMMAND_LONG, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_SPEED_ESTIMATE, MAVLINK_MESSAGE_INFO_VICON_POSITION_ESTIMATE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MEMORY_VECT, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_COMMON
 
// ENUM DEFINITIONS
 
 
/** @brief Micro air vehicle / autopilot classes. This identifies the individual model. */
#ifndef HAVE_ENUM_MAV_AUTOPILOT
#define HAVE_ENUM_MAV_AUTOPILOT
enum MAV_AUTOPILOT
{
MAV_AUTOPILOT_GENERIC=0, /* Generic autopilot, full support for everything | */
MAV_AUTOPILOT_PIXHAWK=1, /* PIXHAWK autopilot, http://pixhawk.ethz.ch | */
MAV_AUTOPILOT_SLUGS=2, /* SLUGS autopilot, http://slugsuav.soe.ucsc.edu | */
MAV_AUTOPILOT_ARDUPILOTMEGA=3, /* ArduPilotMega / ArduCopter, http://diydrones.com | */
MAV_AUTOPILOT_OPENPILOT=4, /* OpenPilot, http://openpilot.org | */
MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY=5, /* Generic autopilot only supporting simple waypoints | */
MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY=6, /* Generic autopilot supporting waypoints and other simple navigation commands | */
MAV_AUTOPILOT_GENERIC_MISSION_FULL=7, /* Generic autopilot supporting the full mission command set | */
MAV_AUTOPILOT_INVALID=8, /* No valid autopilot, e.g. a GCS or other MAVLink component | */
MAV_AUTOPILOT_PPZ=9, /* PPZ UAV - http://nongnu.org/paparazzi | */
MAV_AUTOPILOT_UDB=10, /* UAV Dev Board | */
MAV_AUTOPILOT_FP=11, /* FlexiPilot | */
MAV_AUTOPILOT_ENUM_END=12, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_TYPE
#define HAVE_ENUM_MAV_TYPE
enum MAV_TYPE
{
MAV_TYPE_GENERIC=0, /* Generic micro air vehicle. | */
MAV_TYPE_FIXED_WING=1, /* Fixed wing aircraft. | */
MAV_TYPE_QUADROTOR=2, /* Quadrotor | */
MAV_TYPE_COAXIAL=3, /* Coaxial helicopter | */
MAV_TYPE_HELICOPTER=4, /* Normal helicopter with tail rotor. | */
MAV_TYPE_ANTENNA_TRACKER=5, /* Ground installation | */
MAV_TYPE_GCS=6, /* Operator control unit / ground control station | */
MAV_TYPE_AIRSHIP=7, /* Airship, controlled | */
MAV_TYPE_FREE_BALLOON=8, /* Free balloon, uncontrolled | */
MAV_TYPE_ROCKET=9, /* Rocket | */
MAV_TYPE_GROUND_ROVER=10, /* Ground rover | */
MAV_TYPE_SURFACE_BOAT=11, /* Surface vessel, boat, ship | */
MAV_TYPE_SUBMARINE=12, /* Submarine | */
MAV_TYPE_HEXAROTOR=13, /* Hexarotor | */
MAV_TYPE_OCTOROTOR=14, /* Octorotor | */
MAV_TYPE_TRICOPTER=15, /* Octorotor | */
MAV_TYPE_FLAPPING_WING=16, /* Flapping wing | */
MAV_TYPE_ENUM_END=17, /* | */
};
#endif
 
/** @brief These flags encode the MAV mode. */
#ifndef HAVE_ENUM_MAV_MODE_FLAG
#define HAVE_ENUM_MAV_MODE_FLAG
enum MAV_MODE_FLAG
{
MAV_MODE_FLAG_CUSTOM_MODE_ENABLED=1, /* 0b00000001 Reserved for future use. | */
MAV_MODE_FLAG_TEST_ENABLED=2, /* 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. | */
MAV_MODE_FLAG_AUTO_ENABLED=4, /* 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. | */
MAV_MODE_FLAG_GUIDED_ENABLED=8, /* 0b00001000 guided mode enabled, system flies MISSIONs / mission items. | */
MAV_MODE_FLAG_STABILIZE_ENABLED=16, /* 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. | */
MAV_MODE_FLAG_HIL_ENABLED=32, /* 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. | */
MAV_MODE_FLAG_MANUAL_INPUT_ENABLED=64, /* 0b01000000 remote control input is enabled. | */
MAV_MODE_FLAG_SAFETY_ARMED=128, /* 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. | */
MAV_MODE_FLAG_ENUM_END=129, /* | */
};
#endif
 
/** @brief These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. */
#ifndef HAVE_ENUM_MAV_MODE_FLAG_DECODE_POSITION
#define HAVE_ENUM_MAV_MODE_FLAG_DECODE_POSITION
enum MAV_MODE_FLAG_DECODE_POSITION
{
MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE=1, /* Eighth bit: 00000001 | */
MAV_MODE_FLAG_DECODE_POSITION_TEST=2, /* Seventh bit: 00000010 | */
MAV_MODE_FLAG_DECODE_POSITION_AUTO=4, /* Sixt bit: 00000100 | */
MAV_MODE_FLAG_DECODE_POSITION_GUIDED=8, /* Fifth bit: 00001000 | */
MAV_MODE_FLAG_DECODE_POSITION_STABILIZE=16, /* Fourth bit: 00010000 | */
MAV_MODE_FLAG_DECODE_POSITION_HIL=32, /* Third bit: 00100000 | */
MAV_MODE_FLAG_DECODE_POSITION_MANUAL=64, /* Second bit: 01000000 | */
MAV_MODE_FLAG_DECODE_POSITION_SAFETY=128, /* First bit: 10000000 | */
MAV_MODE_FLAG_DECODE_POSITION_ENUM_END=129, /* | */
};
#endif
 
/** @brief Override command, pauses current mission execution and moves immediately to a position */
#ifndef HAVE_ENUM_MAV_GOTO
#define HAVE_ENUM_MAV_GOTO
enum MAV_GOTO
{
MAV_GOTO_DO_HOLD=0, /* Hold at the current position. | */
MAV_GOTO_DO_CONTINUE=1, /* Continue with the next item in mission execution. | */
MAV_GOTO_HOLD_AT_CURRENT_POSITION=2, /* Hold at the current position of the system | */
MAV_GOTO_HOLD_AT_SPECIFIED_POSITION=3, /* Hold at the position specified in the parameters of the DO_HOLD action | */
MAV_GOTO_ENUM_END=4, /* | */
};
#endif
 
/** @brief These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it
simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override. */
#ifndef HAVE_ENUM_MAV_MODE
#define HAVE_ENUM_MAV_MODE
enum MAV_MODE
{
MAV_MODE_PREFLIGHT=0, /* System is not ready to fly, booting, calibrating, etc. No flag is set. | */
MAV_MODE_MANUAL_DISARMED=64, /* System is allowed to be active, under manual (RC) control, no stabilization | */
MAV_MODE_TEST_DISARMED=66, /* UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. | */
MAV_MODE_STABILIZE_DISARMED=80, /* System is allowed to be active, under assisted RC control. | */
MAV_MODE_GUIDED_DISARMED=88, /* System is allowed to be active, under autonomous control, manual setpoint | */
MAV_MODE_AUTO_DISARMED=92, /* System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) | */
MAV_MODE_MANUAL_ARMED=192, /* System is allowed to be active, under manual (RC) control, no stabilization | */
MAV_MODE_TEST_ARMED=194, /* UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. | */
MAV_MODE_STABILIZE_ARMED=208, /* System is allowed to be active, under assisted RC control. | */
MAV_MODE_GUIDED_ARMED=216, /* System is allowed to be active, under autonomous control, manual setpoint | */
MAV_MODE_AUTO_ARMED=220, /* System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) | */
MAV_MODE_ENUM_END=221, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_STATE
#define HAVE_ENUM_MAV_STATE
enum MAV_STATE
{
MAV_STATE_UNINIT=0, /* Uninitialized system, state is unknown. | */
MAV_STATE_BOOT=1, /* System is booting up. | */
MAV_STATE_CALIBRATING=2, /* System is calibrating and not flight-ready. | */
MAV_STATE_STANDBY=3, /* System is grounded and on standby. It can be launched any time. | */
MAV_STATE_ACTIVE=4, /* System is active and might be already airborne. Motors are engaged. | */
MAV_STATE_CRITICAL=5, /* System is in a non-normal flight mode. It can however still navigate. | */
MAV_STATE_EMERGENCY=6, /* System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. | */
MAV_STATE_POWEROFF=7, /* System just initialized its power-down sequence, will shut down now. | */
MAV_STATE_ENUM_END=8, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_COMPONENT
#define HAVE_ENUM_MAV_COMPONENT
enum MAV_COMPONENT
{
MAV_COMP_ID_ALL=0, /* | */
MAV_COMP_ID_CAMERA=100, /* | */
MAV_COMP_ID_SERVO1=140, /* | */
MAV_COMP_ID_SERVO2=141, /* | */
MAV_COMP_ID_SERVO3=142, /* | */
MAV_COMP_ID_SERVO4=143, /* | */
MAV_COMP_ID_SERVO5=144, /* | */
MAV_COMP_ID_SERVO6=145, /* | */
MAV_COMP_ID_SERVO7=146, /* | */
MAV_COMP_ID_SERVO8=147, /* | */
MAV_COMP_ID_SERVO9=148, /* | */
MAV_COMP_ID_SERVO10=149, /* | */
MAV_COMP_ID_SERVO11=150, /* | */
MAV_COMP_ID_SERVO12=151, /* | */
MAV_COMP_ID_SERVO13=152, /* | */
MAV_COMP_ID_SERVO14=153, /* | */
MAV_COMP_ID_MAPPER=180, /* | */
MAV_COMP_ID_MISSIONPLANNER=190, /* | */
MAV_COMP_ID_PATHPLANNER=195, /* | */
MAV_COMP_ID_IMU=200, /* | */
MAV_COMP_ID_IMU_2=201, /* | */
MAV_COMP_ID_IMU_3=202, /* | */
MAV_COMP_ID_GPS=220, /* | */
MAV_COMP_ID_UDP_BRIDGE=240, /* | */
MAV_COMP_ID_UART_BRIDGE=241, /* | */
MAV_COMP_ID_SYSTEM_CONTROL=250, /* | */
MAV_COMPONENT_ENUM_END=251, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAV_FRAME
#define HAVE_ENUM_MAV_FRAME
enum MAV_FRAME
{
MAV_FRAME_GLOBAL=0, /* Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL) | */
MAV_FRAME_LOCAL_NED=1, /* Local coordinate frame, Z-up (x: north, y: east, z: down). | */
MAV_FRAME_MISSION=2, /* NOT a coordinate frame, indicates a mission command. | */
MAV_FRAME_GLOBAL_RELATIVE_ALT=3, /* Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location. | */
MAV_FRAME_LOCAL_ENU=4, /* Local coordinate frame, Z-down (x: east, y: north, z: up) | */
MAV_FRAME_ENUM_END=5, /* | */
};
#endif
 
/** @brief */
#ifndef HAVE_ENUM_MAVLINK_DATA_STREAM_TYPE
#define HAVE_ENUM_MAVLINK_DATA_STREAM_TYPE
enum MAVLINK_DATA_STREAM_TYPE
{
MAVLINK_DATA_STREAM_IMG_JPEG=1, /* | */
MAVLINK_DATA_STREAM_IMG_BMP=2, /* | */
MAVLINK_DATA_STREAM_IMG_RAW8U=3, /* | */
MAVLINK_DATA_STREAM_IMG_RAW32U=4, /* | */
MAVLINK_DATA_STREAM_IMG_PGM=5, /* | */
MAVLINK_DATA_STREAM_IMG_PNG=6, /* | */
MAVLINK_DATA_STREAM_TYPE_ENUM_END=7, /* | */
};
#endif
 
/** @brief Data stream IDs. A data stream is not a fixed set of messages, but rather a
recommendation to the autopilot software. Individual autopilots may or may not obey
the recommended messages. */
#ifndef HAVE_ENUM_MAV_DATA_STREAM
#define HAVE_ENUM_MAV_DATA_STREAM
enum MAV_DATA_STREAM
{
MAV_DATA_STREAM_ALL=0, /* Enable all data streams | */
MAV_DATA_STREAM_RAW_SENSORS=1, /* Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. | */
MAV_DATA_STREAM_EXTENDED_STATUS=2, /* Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS | */
MAV_DATA_STREAM_RC_CHANNELS=3, /* Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW | */
MAV_DATA_STREAM_RAW_CONTROLLER=4, /* Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. | */
MAV_DATA_STREAM_POSITION=6, /* Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. | */
MAV_DATA_STREAM_EXTRA1=10, /* Dependent on the autopilot | */
MAV_DATA_STREAM_EXTRA2=11, /* Dependent on the autopilot | */
MAV_DATA_STREAM_EXTRA3=12, /* Dependent on the autopilot | */
MAV_DATA_STREAM_ENUM_END=13, /* | */
};
#endif
 
/** @brief The ROI (region of interest) for the vehicle. This can be
be used by the vehicle for camera/vehicle attitude alignment (see
MAV_CMD_NAV_ROI). */
#ifndef HAVE_ENUM_MAV_ROI
#define HAVE_ENUM_MAV_ROI
enum MAV_ROI
{
MAV_ROI_NONE=0, /* No region of interest. | */
MAV_ROI_WPNEXT=1, /* Point toward next MISSION. | */
MAV_ROI_WPINDEX=2, /* Point toward given MISSION. | */
MAV_ROI_LOCATION=3, /* Point toward fixed location. | */
MAV_ROI_TARGET=4, /* Point toward of given id. | */
MAV_ROI_ENUM_END=5, /* | */
};
#endif
 
/** @brief ACK / NACK / ERROR values as a result of MAV_CMDs and for mission item transmission. */
#ifndef HAVE_ENUM_MAV_CMD_ACK
#define HAVE_ENUM_MAV_CMD_ACK
enum MAV_CMD_ACK
{
MAV_CMD_ACK_OK=1, /* Command / mission item is ok. | */
MAV_CMD_ACK_ERR_FAIL=2, /* Generic error message if none of the other reasons fails or if no detailed error reporting is implemented. | */
MAV_CMD_ACK_ERR_ACCESS_DENIED=3, /* The system is refusing to accept this command from this source / communication partner. | */
MAV_CMD_ACK_ERR_NOT_SUPPORTED=4, /* Command or mission item is not supported, other commands would be accepted. | */
MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED=5, /* The coordinate frame of this command / mission item is not supported. | */
MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE=6, /* The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible. | */
MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE=7, /* The X or latitude value is out of range. | */
MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE=8, /* The Y or longitude value is out of range. | */
MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE=9, /* The Z or altitude value is out of range. | */
MAV_CMD_ACK_ENUM_END=10, /* | */
};
#endif
 
/** @brief type of a mavlink parameter */
#ifndef HAVE_ENUM_MAV_VAR
#define HAVE_ENUM_MAV_VAR
enum MAV_VAR
{
MAV_VAR_FLOAT=0, /* 32 bit float | */
MAV_VAR_UINT8=1, /* 8 bit unsigned integer | */
MAV_VAR_INT8=2, /* 8 bit signed integer | */
MAV_VAR_UINT16=3, /* 16 bit unsigned integer | */
MAV_VAR_INT16=4, /* 16 bit signed integer | */
MAV_VAR_UINT32=5, /* 32 bit unsigned integer | */
MAV_VAR_INT32=6, /* 32 bit signed integer | */
MAV_VAR_ENUM_END=7, /* | */
};
#endif
 
/** @brief result from a mavlink command */
#ifndef HAVE_ENUM_MAV_RESULT
#define HAVE_ENUM_MAV_RESULT
enum MAV_RESULT
{
MAV_RESULT_ACCEPTED=0, /* Command ACCEPTED and EXECUTED | */
MAV_RESULT_TEMPORARILY_REJECTED=1, /* Command TEMPORARY REJECTED/DENIED | */
MAV_RESULT_DENIED=2, /* Command PERMANENTLY DENIED | */
MAV_RESULT_UNSUPPORTED=3, /* Command UNKNOWN/UNSUPPORTED | */
MAV_RESULT_FAILED=4, /* Command executed, but failed | */
MAV_RESULT_ENUM_END=5, /* | */
};
#endif
 
/** @brief result in a mavlink mission ack */
#ifndef HAVE_ENUM_MAV_MISSION_RESULT
#define HAVE_ENUM_MAV_MISSION_RESULT
enum MAV_MISSION_RESULT
{
MAV_MISSION_ACCEPTED=0, /* mission accepted OK | */
MAV_MISSION_ERROR=1, /* generic error / not accepting mission commands at all right now | */
MAV_MISSION_UNSUPPORTED_FRAME=2, /* coordinate frame is not supported | */
MAV_MISSION_UNSUPPORTED=3, /* command is not supported | */
MAV_MISSION_NO_SPACE=4, /* mission item exceeds storage space | */
MAV_MISSION_INVALID=5, /* one of the parameters has an invalid value | */
MAV_MISSION_INVALID_PARAM1=6, /* param1 has an invalid value | */
MAV_MISSION_INVALID_PARAM2=7, /* param2 has an invalid value | */
MAV_MISSION_INVALID_PARAM3=8, /* param3 has an invalid value | */
MAV_MISSION_INVALID_PARAM4=9, /* param4 has an invalid value | */
MAV_MISSION_INVALID_PARAM5_X=10, /* x/param5 has an invalid value | */
MAV_MISSION_INVALID_PARAM6_Y=11, /* y/param6 has an invalid value | */
MAV_MISSION_INVALID_PARAM7=12, /* param7 has an invalid value | */
MAV_MISSION_INVALID_SEQUENCE=13, /* received waypoint out of sequence | */
MAV_MISSION_DENIED=14, /* not accepting any mission commands from this communication partner | */
MAV_MISSION_RESULT_ENUM_END=15, /* | */
};
#endif
 
/** @brief Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/. */
#ifndef HAVE_ENUM_MAV_SEVERITY
#define HAVE_ENUM_MAV_SEVERITY
enum MAV_SEVERITY
{
MAV_SEVERITY_EMERGENCY=0, /* System is unusable. This is a "panic" condition. | */
MAV_SEVERITY_ALERT=1, /* Action should be taken immediately. Indicates error in non-critical systems. | */
MAV_SEVERITY_CRITICAL=2, /* Action must be taken immediately. Indicates failure in a primary system. | */
MAV_SEVERITY_ERROR=3, /* Indicates an error in secondary/redundant systems. | */
MAV_SEVERITY_WARNING=4, /* Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning. | */
MAV_SEVERITY_NOTICE=5, /* An unusual event has occured, though not an error condition. This should be investigated for the root cause. | */
MAV_SEVERITY_INFO=6, /* Normal operational messages. Useful for logging. No action is required for these messages. | */
MAV_SEVERITY_DEBUG=7, /* Useful non-operational messages that can assist in debugging. These should not occur during normal operation. | */
MAV_SEVERITY_ENUM_END=8, /* | */
};
#endif
 
 
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 3
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 3
#endif
 
// MESSAGE DEFINITIONS
#include "./mavlink_msg_heartbeat.h"
#include "./mavlink_msg_sys_status.h"
#include "./mavlink_msg_system_time.h"
#include "./mavlink_msg_ping.h"
#include "./mavlink_msg_change_operator_control.h"
#include "./mavlink_msg_change_operator_control_ack.h"
#include "./mavlink_msg_auth_key.h"
#include "./mavlink_msg_set_mode.h"
#include "./mavlink_msg_param_request_read.h"
#include "./mavlink_msg_param_request_list.h"
#include "./mavlink_msg_param_value.h"
#include "./mavlink_msg_param_set.h"
#include "./mavlink_msg_gps_raw_int.h"
#include "./mavlink_msg_gps_status.h"
#include "./mavlink_msg_scaled_imu.h"
#include "./mavlink_msg_raw_imu.h"
#include "./mavlink_msg_raw_pressure.h"
#include "./mavlink_msg_scaled_pressure.h"
#include "./mavlink_msg_attitude.h"
#include "./mavlink_msg_attitude_quaternion.h"
#include "./mavlink_msg_local_position_ned.h"
#include "./mavlink_msg_global_position_int.h"
#include "./mavlink_msg_rc_channels_scaled.h"
#include "./mavlink_msg_rc_channels_raw.h"
#include "./mavlink_msg_servo_output_raw.h"
#include "./mavlink_msg_mission_request_partial_list.h"
#include "./mavlink_msg_mission_write_partial_list.h"
#include "./mavlink_msg_mission_item.h"
#include "./mavlink_msg_mission_request.h"
#include "./mavlink_msg_mission_set_current.h"
#include "./mavlink_msg_mission_current.h"
#include "./mavlink_msg_mission_request_list.h"
#include "./mavlink_msg_mission_count.h"
#include "./mavlink_msg_mission_clear_all.h"
#include "./mavlink_msg_mission_item_reached.h"
#include "./mavlink_msg_mission_ack.h"
#include "./mavlink_msg_set_gps_global_origin.h"
#include "./mavlink_msg_gps_global_origin.h"
#include "./mavlink_msg_set_local_position_setpoint.h"
#include "./mavlink_msg_local_position_setpoint.h"
#include "./mavlink_msg_global_position_setpoint_int.h"
#include "./mavlink_msg_set_global_position_setpoint_int.h"
#include "./mavlink_msg_safety_set_allowed_area.h"
#include "./mavlink_msg_safety_allowed_area.h"
#include "./mavlink_msg_set_roll_pitch_yaw_thrust.h"
#include "./mavlink_msg_set_roll_pitch_yaw_speed_thrust.h"
#include "./mavlink_msg_roll_pitch_yaw_thrust_setpoint.h"
#include "./mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint.h"
#include "./mavlink_msg_set_quad_motors_setpoint.h"
#include "./mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust.h"
#include "./mavlink_msg_nav_controller_output.h"
#include "./mavlink_msg_state_correction.h"
#include "./mavlink_msg_request_data_stream.h"
#include "./mavlink_msg_data_stream.h"
#include "./mavlink_msg_manual_control.h"
#include "./mavlink_msg_rc_channels_override.h"
#include "./mavlink_msg_vfr_hud.h"
#include "./mavlink_msg_command_long.h"
#include "./mavlink_msg_command_ack.h"
#include "./mavlink_msg_local_position_ned_system_global_offset.h"
#include "./mavlink_msg_hil_state.h"
#include "./mavlink_msg_hil_controls.h"
#include "./mavlink_msg_hil_rc_inputs_raw.h"
#include "./mavlink_msg_optical_flow.h"
#include "./mavlink_msg_global_vision_position_estimate.h"
#include "./mavlink_msg_vision_position_estimate.h"
#include "./mavlink_msg_vision_speed_estimate.h"
#include "./mavlink_msg_vicon_position_estimate.h"
#include "./mavlink_msg_memory_vect.h"
#include "./mavlink_msg_debug_vect.h"
#include "./mavlink_msg_named_value_float.h"
#include "./mavlink_msg_named_value_int.h"
#include "./mavlink_msg_statustext.h"
#include "./mavlink_msg_debug.h"
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // COMMON_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from common.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 254
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 1
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 1
#endif
 
#include "version.h"
#include "common.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_attitude.h
0,0 → 1,276
// MESSAGE ATTITUDE PACKING
 
#define MAVLINK_MSG_ID_ATTITUDE 30
 
typedef struct __mavlink_attitude_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float rollspeed; ///< Roll angular speed (rad/s)
float pitchspeed; ///< Pitch angular speed (rad/s)
float yawspeed; ///< Yaw angular speed (rad/s)
} mavlink_attitude_t;
 
#define MAVLINK_MSG_ID_ATTITUDE_LEN 28
#define MAVLINK_MSG_ID_30_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_ATTITUDE { \
"ATTITUDE", \
7, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_t, time_boot_ms) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_t, yaw) }, \
{ "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_t, rollspeed) }, \
{ "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_t, pitchspeed) }, \
{ "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_t, yawspeed) }, \
} \
}
 
 
/**
* @brief Pack a attitude message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, rollspeed);
_mav_put_float(buf, 20, pitchspeed);
_mav_put_float(buf, 24, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_attitude_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
return mavlink_finalize_message(msg, system_id, component_id, 28, 39);
}
 
/**
* @brief Pack a attitude message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float roll,float pitch,float yaw,float rollspeed,float pitchspeed,float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, rollspeed);
_mav_put_float(buf, 20, pitchspeed);
_mav_put_float(buf, 24, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_attitude_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 39);
}
 
/**
* @brief Encode a attitude struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param attitude C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_t* attitude)
{
return mavlink_msg_attitude_pack(system_id, component_id, msg, attitude->time_boot_ms, attitude->roll, attitude->pitch, attitude->yaw, attitude->rollspeed, attitude->pitchspeed, attitude->yawspeed);
}
 
/**
* @brief Send a attitude message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_attitude_send(mavlink_channel_t chan, uint32_t time_boot_ms, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, rollspeed);
_mav_put_float(buf, 20, pitchspeed);
_mav_put_float(buf, 24, yawspeed);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, buf, 28, 39);
#else
mavlink_attitude_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, (const char *)&packet, 28, 39);
#endif
}
 
#endif
 
// MESSAGE ATTITUDE UNPACKING
 
 
/**
* @brief Get field time_boot_ms from attitude message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_attitude_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field roll from attitude message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_attitude_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field pitch from attitude message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_attitude_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from attitude message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_attitude_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field rollspeed from attitude message
*
* @return Roll angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_rollspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field pitchspeed from attitude message
*
* @return Pitch angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_pitchspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field yawspeed from attitude message
*
* @return Yaw angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_get_yawspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a attitude message into a struct
*
* @param msg The message to decode
* @param attitude C-struct to decode the message contents into
*/
static inline void mavlink_msg_attitude_decode(const mavlink_message_t* msg, mavlink_attitude_t* attitude)
{
#if MAVLINK_NEED_BYTE_SWAP
attitude->time_boot_ms = mavlink_msg_attitude_get_time_boot_ms(msg);
attitude->roll = mavlink_msg_attitude_get_roll(msg);
attitude->pitch = mavlink_msg_attitude_get_pitch(msg);
attitude->yaw = mavlink_msg_attitude_get_yaw(msg);
attitude->rollspeed = mavlink_msg_attitude_get_rollspeed(msg);
attitude->pitchspeed = mavlink_msg_attitude_get_pitchspeed(msg);
attitude->yawspeed = mavlink_msg_attitude_get_yawspeed(msg);
#else
memcpy(attitude, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_attitude_quaternion.h
0,0 → 1,298
// MESSAGE ATTITUDE_QUATERNION PACKING
 
#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION 31
 
typedef struct __mavlink_attitude_quaternion_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float q1; ///< Quaternion component 1
float q2; ///< Quaternion component 2
float q3; ///< Quaternion component 3
float q4; ///< Quaternion component 4
float rollspeed; ///< Roll angular speed (rad/s)
float pitchspeed; ///< Pitch angular speed (rad/s)
float yawspeed; ///< Yaw angular speed (rad/s)
} mavlink_attitude_quaternion_t;
 
#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN 32
#define MAVLINK_MSG_ID_31_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION { \
"ATTITUDE_QUATERNION", \
8, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_quaternion_t, time_boot_ms) }, \
{ "q1", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_quaternion_t, q1) }, \
{ "q2", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_quaternion_t, q2) }, \
{ "q3", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_quaternion_t, q3) }, \
{ "q4", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_quaternion_t, q4) }, \
{ "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_quaternion_t, rollspeed) }, \
{ "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_quaternion_t, pitchspeed) }, \
{ "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_quaternion_t, yawspeed) }, \
} \
}
 
 
/**
* @brief Pack a attitude_quaternion message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param q1 Quaternion component 1
* @param q2 Quaternion component 2
* @param q3 Quaternion component 3
* @param q4 Quaternion component 4
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_quaternion_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float q1, float q2, float q3, float q4, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, q1);
_mav_put_float(buf, 8, q2);
_mav_put_float(buf, 12, q3);
_mav_put_float(buf, 16, q4);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_attitude_quaternion_t packet;
packet.time_boot_ms = time_boot_ms;
packet.q1 = q1;
packet.q2 = q2;
packet.q3 = q3;
packet.q4 = q4;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
return mavlink_finalize_message(msg, system_id, component_id, 32, 246);
}
 
/**
* @brief Pack a attitude_quaternion message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param q1 Quaternion component 1
* @param q2 Quaternion component 2
* @param q3 Quaternion component 3
* @param q4 Quaternion component 4
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_attitude_quaternion_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float q1,float q2,float q3,float q4,float rollspeed,float pitchspeed,float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, q1);
_mav_put_float(buf, 8, q2);
_mav_put_float(buf, 12, q3);
_mav_put_float(buf, 16, q4);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_attitude_quaternion_t packet;
packet.time_boot_ms = time_boot_ms;
packet.q1 = q1;
packet.q2 = q2;
packet.q3 = q3;
packet.q4 = q4;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 246);
}
 
/**
* @brief Encode a attitude_quaternion struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param attitude_quaternion C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_attitude_quaternion_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_quaternion_t* attitude_quaternion)
{
return mavlink_msg_attitude_quaternion_pack(system_id, component_id, msg, attitude_quaternion->time_boot_ms, attitude_quaternion->q1, attitude_quaternion->q2, attitude_quaternion->q3, attitude_quaternion->q4, attitude_quaternion->rollspeed, attitude_quaternion->pitchspeed, attitude_quaternion->yawspeed);
}
 
/**
* @brief Send a attitude_quaternion message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param q1 Quaternion component 1
* @param q2 Quaternion component 2
* @param q3 Quaternion component 3
* @param q4 Quaternion component 4
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_attitude_quaternion_send(mavlink_channel_t chan, uint32_t time_boot_ms, float q1, float q2, float q3, float q4, float rollspeed, float pitchspeed, float yawspeed)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, q1);
_mav_put_float(buf, 8, q2);
_mav_put_float(buf, 12, q3);
_mav_put_float(buf, 16, q4);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, buf, 32, 246);
#else
mavlink_attitude_quaternion_t packet;
packet.time_boot_ms = time_boot_ms;
packet.q1 = q1;
packet.q2 = q2;
packet.q3 = q3;
packet.q4 = q4;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, (const char *)&packet, 32, 246);
#endif
}
 
#endif
 
// MESSAGE ATTITUDE_QUATERNION UNPACKING
 
 
/**
* @brief Get field time_boot_ms from attitude_quaternion message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_attitude_quaternion_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field q1 from attitude_quaternion message
*
* @return Quaternion component 1
*/
static inline float mavlink_msg_attitude_quaternion_get_q1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field q2 from attitude_quaternion message
*
* @return Quaternion component 2
*/
static inline float mavlink_msg_attitude_quaternion_get_q2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field q3 from attitude_quaternion message
*
* @return Quaternion component 3
*/
static inline float mavlink_msg_attitude_quaternion_get_q3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field q4 from attitude_quaternion message
*
* @return Quaternion component 4
*/
static inline float mavlink_msg_attitude_quaternion_get_q4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field rollspeed from attitude_quaternion message
*
* @return Roll angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_quaternion_get_rollspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitchspeed from attitude_quaternion message
*
* @return Pitch angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_quaternion_get_pitchspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yawspeed from attitude_quaternion message
*
* @return Yaw angular speed (rad/s)
*/
static inline float mavlink_msg_attitude_quaternion_get_yawspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a attitude_quaternion message into a struct
*
* @param msg The message to decode
* @param attitude_quaternion C-struct to decode the message contents into
*/
static inline void mavlink_msg_attitude_quaternion_decode(const mavlink_message_t* msg, mavlink_attitude_quaternion_t* attitude_quaternion)
{
#if MAVLINK_NEED_BYTE_SWAP
attitude_quaternion->time_boot_ms = mavlink_msg_attitude_quaternion_get_time_boot_ms(msg);
attitude_quaternion->q1 = mavlink_msg_attitude_quaternion_get_q1(msg);
attitude_quaternion->q2 = mavlink_msg_attitude_quaternion_get_q2(msg);
attitude_quaternion->q3 = mavlink_msg_attitude_quaternion_get_q3(msg);
attitude_quaternion->q4 = mavlink_msg_attitude_quaternion_get_q4(msg);
attitude_quaternion->rollspeed = mavlink_msg_attitude_quaternion_get_rollspeed(msg);
attitude_quaternion->pitchspeed = mavlink_msg_attitude_quaternion_get_pitchspeed(msg);
attitude_quaternion->yawspeed = mavlink_msg_attitude_quaternion_get_yawspeed(msg);
#else
memcpy(attitude_quaternion, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_auth_key.h
0,0 → 1,144
// MESSAGE AUTH_KEY PACKING
 
#define MAVLINK_MSG_ID_AUTH_KEY 7
 
typedef struct __mavlink_auth_key_t
{
char key[32]; ///< key
} mavlink_auth_key_t;
 
#define MAVLINK_MSG_ID_AUTH_KEY_LEN 32
#define MAVLINK_MSG_ID_7_LEN 32
 
#define MAVLINK_MSG_AUTH_KEY_FIELD_KEY_LEN 32
 
#define MAVLINK_MESSAGE_INFO_AUTH_KEY { \
"AUTH_KEY", \
1, \
{ { "key", NULL, MAVLINK_TYPE_CHAR, 32, 0, offsetof(mavlink_auth_key_t, key) }, \
} \
}
 
 
/**
* @brief Pack a auth_key message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param key key
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_auth_key_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
return mavlink_finalize_message(msg, system_id, component_id, 32, 119);
}
 
/**
* @brief Pack a auth_key message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param key key
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_auth_key_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 119);
}
 
/**
* @brief Encode a auth_key struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param auth_key C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_auth_key_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_auth_key_t* auth_key)
{
return mavlink_msg_auth_key_pack(system_id, component_id, msg, auth_key->key);
}
 
/**
* @brief Send a auth_key message
* @param chan MAVLink channel to send the message
*
* @param key key
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_auth_key_send(mavlink_channel_t chan, const char *key)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_char_array(buf, 0, key, 32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, buf, 32, 119);
#else
mavlink_auth_key_t packet;
 
mav_array_memcpy(packet.key, key, sizeof(char)*32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, (const char *)&packet, 32, 119);
#endif
}
 
#endif
 
// MESSAGE AUTH_KEY UNPACKING
 
 
/**
* @brief Get field key from auth_key message
*
* @return key
*/
static inline uint16_t mavlink_msg_auth_key_get_key(const mavlink_message_t* msg, char *key)
{
return _MAV_RETURN_char_array(msg, key, 32, 0);
}
 
/**
* @brief Decode a auth_key message into a struct
*
* @param msg The message to decode
* @param auth_key C-struct to decode the message contents into
*/
static inline void mavlink_msg_auth_key_decode(const mavlink_message_t* msg, mavlink_auth_key_t* auth_key)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_auth_key_get_key(msg, auth_key->key);
#else
memcpy(auth_key, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_change_operator_control.h
0,0 → 1,204
// MESSAGE CHANGE_OPERATOR_CONTROL PACKING
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL 5
 
typedef struct __mavlink_change_operator_control_t
{
uint8_t target_system; ///< System the GCS requests control for
uint8_t control_request; ///< 0: request control of this MAV, 1: Release control of this MAV
uint8_t version; ///< 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
char passkey[25]; ///< Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
} mavlink_change_operator_control_t;
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN 28
#define MAVLINK_MSG_ID_5_LEN 28
 
#define MAVLINK_MSG_CHANGE_OPERATOR_CONTROL_FIELD_PASSKEY_LEN 25
 
#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL { \
"CHANGE_OPERATOR_CONTROL", \
4, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_t, target_system) }, \
{ "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_t, control_request) }, \
{ "version", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_t, version) }, \
{ "passkey", NULL, MAVLINK_TYPE_CHAR, 25, 3, offsetof(mavlink_change_operator_control_t, passkey) }, \
} \
}
 
 
/**
* @brief Pack a change_operator_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 28, 217);
}
 
/**
* @brief Pack a change_operator_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t control_request,uint8_t version,const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 217);
}
 
/**
* @brief Encode a change_operator_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param change_operator_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_change_operator_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_t* change_operator_control)
{
return mavlink_msg_change_operator_control_pack(system_id, component_id, msg, change_operator_control->target_system, change_operator_control->control_request, change_operator_control->version, change_operator_control->passkey);
}
 
/**
* @brief Send a change_operator_control message
* @param chan MAVLink channel to send the message
*
* @param target_system System the GCS requests control for
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param version 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
* @param passkey Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_change_operator_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, version);
_mav_put_char_array(buf, 3, passkey, 25);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, buf, 28, 217);
#else
mavlink_change_operator_control_t packet;
packet.target_system = target_system;
packet.control_request = control_request;
packet.version = version;
mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, (const char *)&packet, 28, 217);
#endif
}
 
#endif
 
// MESSAGE CHANGE_OPERATOR_CONTROL UNPACKING
 
 
/**
* @brief Get field target_system from change_operator_control message
*
* @return System the GCS requests control for
*/
static inline uint8_t mavlink_msg_change_operator_control_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field control_request from change_operator_control message
*
* @return 0: request control of this MAV, 1: Release control of this MAV
*/
static inline uint8_t mavlink_msg_change_operator_control_get_control_request(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field version from change_operator_control message
*
* @return 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
*/
static inline uint8_t mavlink_msg_change_operator_control_get_version(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field passkey from change_operator_control message
*
* @return Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
*/
static inline uint16_t mavlink_msg_change_operator_control_get_passkey(const mavlink_message_t* msg, char *passkey)
{
return _MAV_RETURN_char_array(msg, passkey, 25, 3);
}
 
/**
* @brief Decode a change_operator_control message into a struct
*
* @param msg The message to decode
* @param change_operator_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_change_operator_control_decode(const mavlink_message_t* msg, mavlink_change_operator_control_t* change_operator_control)
{
#if MAVLINK_NEED_BYTE_SWAP
change_operator_control->target_system = mavlink_msg_change_operator_control_get_target_system(msg);
change_operator_control->control_request = mavlink_msg_change_operator_control_get_control_request(msg);
change_operator_control->version = mavlink_msg_change_operator_control_get_version(msg);
mavlink_msg_change_operator_control_get_passkey(msg, change_operator_control->passkey);
#else
memcpy(change_operator_control, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_change_operator_control_ack.h
0,0 → 1,188
// MESSAGE CHANGE_OPERATOR_CONTROL_ACK PACKING
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK 6
 
typedef struct __mavlink_change_operator_control_ack_t
{
uint8_t gcs_system_id; ///< ID of the GCS this message
uint8_t control_request; ///< 0: request control of this MAV, 1: Release control of this MAV
uint8_t ack; ///< 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
} mavlink_change_operator_control_ack_t;
 
#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN 3
#define MAVLINK_MSG_ID_6_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK { \
"CHANGE_OPERATOR_CONTROL_ACK", \
3, \
{ { "gcs_system_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_ack_t, gcs_system_id) }, \
{ "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_ack_t, control_request) }, \
{ "ack", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_ack_t, ack) }, \
} \
}
 
 
/**
* @brief Pack a change_operator_control_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 3, 104);
}
 
/**
* @brief Pack a change_operator_control_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t gcs_system_id,uint8_t control_request,uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3, 104);
}
 
/**
* @brief Encode a change_operator_control_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param change_operator_control_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_change_operator_control_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_ack_t* change_operator_control_ack)
{
return mavlink_msg_change_operator_control_ack_pack(system_id, component_id, msg, change_operator_control_ack->gcs_system_id, change_operator_control_ack->control_request, change_operator_control_ack->ack);
}
 
/**
* @brief Send a change_operator_control_ack message
* @param chan MAVLink channel to send the message
*
* @param gcs_system_id ID of the GCS this message
* @param control_request 0: request control of this MAV, 1: Release control of this MAV
* @param ack 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_change_operator_control_ack_send(mavlink_channel_t chan, uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, gcs_system_id);
_mav_put_uint8_t(buf, 1, control_request);
_mav_put_uint8_t(buf, 2, ack);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, buf, 3, 104);
#else
mavlink_change_operator_control_ack_t packet;
packet.gcs_system_id = gcs_system_id;
packet.control_request = control_request;
packet.ack = ack;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, (const char *)&packet, 3, 104);
#endif
}
 
#endif
 
// MESSAGE CHANGE_OPERATOR_CONTROL_ACK UNPACKING
 
 
/**
* @brief Get field gcs_system_id from change_operator_control_ack message
*
* @return ID of the GCS this message
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_gcs_system_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field control_request from change_operator_control_ack message
*
* @return 0: request control of this MAV, 1: Release control of this MAV
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_control_request(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field ack from change_operator_control_ack message
*
* @return 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
*/
static inline uint8_t mavlink_msg_change_operator_control_ack_get_ack(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a change_operator_control_ack message into a struct
*
* @param msg The message to decode
* @param change_operator_control_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_change_operator_control_ack_decode(const mavlink_message_t* msg, mavlink_change_operator_control_ack_t* change_operator_control_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
change_operator_control_ack->gcs_system_id = mavlink_msg_change_operator_control_ack_get_gcs_system_id(msg);
change_operator_control_ack->control_request = mavlink_msg_change_operator_control_ack_get_control_request(msg);
change_operator_control_ack->ack = mavlink_msg_change_operator_control_ack_get_ack(msg);
#else
memcpy(change_operator_control_ack, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_command_ack.h
0,0 → 1,166
// MESSAGE COMMAND_ACK PACKING
 
#define MAVLINK_MSG_ID_COMMAND_ACK 77
 
typedef struct __mavlink_command_ack_t
{
uint16_t command; ///< Command ID, as defined by MAV_CMD enum.
uint8_t result; ///< See MAV_RESULT enum
} mavlink_command_ack_t;
 
#define MAVLINK_MSG_ID_COMMAND_ACK_LEN 3
#define MAVLINK_MSG_ID_77_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_COMMAND_ACK { \
"COMMAND_ACK", \
2, \
{ { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_command_ack_t, command) }, \
{ "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_ack_t, result) }, \
} \
}
 
 
/**
* @brief Pack a command_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param command Command ID, as defined by MAV_CMD enum.
* @param result See MAV_RESULT enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t command, uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, command);
_mav_put_uint8_t(buf, 2, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 3, 143);
}
 
/**
* @brief Pack a command_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param command Command ID, as defined by MAV_CMD enum.
* @param result See MAV_RESULT enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t command,uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, command);
_mav_put_uint8_t(buf, 2, result);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3, 143);
}
 
/**
* @brief Encode a command_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param command_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_command_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_ack_t* command_ack)
{
return mavlink_msg_command_ack_pack(system_id, component_id, msg, command_ack->command, command_ack->result);
}
 
/**
* @brief Send a command_ack message
* @param chan MAVLink channel to send the message
*
* @param command Command ID, as defined by MAV_CMD enum.
* @param result See MAV_RESULT enum
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_command_ack_send(mavlink_channel_t chan, uint16_t command, uint8_t result)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint16_t(buf, 0, command);
_mav_put_uint8_t(buf, 2, result);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, buf, 3, 143);
#else
mavlink_command_ack_t packet;
packet.command = command;
packet.result = result;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, (const char *)&packet, 3, 143);
#endif
}
 
#endif
 
// MESSAGE COMMAND_ACK UNPACKING
 
 
/**
* @brief Get field command from command_ack message
*
* @return Command ID, as defined by MAV_CMD enum.
*/
static inline uint16_t mavlink_msg_command_ack_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field result from command_ack message
*
* @return See MAV_RESULT enum
*/
static inline uint8_t mavlink_msg_command_ack_get_result(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a command_ack message into a struct
*
* @param msg The message to decode
* @param command_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_command_ack_decode(const mavlink_message_t* msg, mavlink_command_ack_t* command_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
command_ack->command = mavlink_msg_command_ack_get_command(msg);
command_ack->result = mavlink_msg_command_ack_get_result(msg);
#else
memcpy(command_ack, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_command_long.h
0,0 → 1,364
// MESSAGE COMMAND_LONG PACKING
 
#define MAVLINK_MSG_ID_COMMAND_LONG 76
 
typedef struct __mavlink_command_long_t
{
float param1; ///< Parameter 1, as defined by MAV_CMD enum.
float param2; ///< Parameter 2, as defined by MAV_CMD enum.
float param3; ///< Parameter 3, as defined by MAV_CMD enum.
float param4; ///< Parameter 4, as defined by MAV_CMD enum.
float param5; ///< Parameter 5, as defined by MAV_CMD enum.
float param6; ///< Parameter 6, as defined by MAV_CMD enum.
float param7; ///< Parameter 7, as defined by MAV_CMD enum.
uint16_t command; ///< Command ID, as defined by MAV_CMD enum.
uint8_t target_system; ///< System which should execute the command
uint8_t target_component; ///< Component which should execute the command, 0 for all components
uint8_t confirmation; ///< 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
} mavlink_command_long_t;
 
#define MAVLINK_MSG_ID_COMMAND_LONG_LEN 33
#define MAVLINK_MSG_ID_76_LEN 33
 
 
 
#define MAVLINK_MESSAGE_INFO_COMMAND_LONG { \
"COMMAND_LONG", \
11, \
{ { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_long_t, param1) }, \
{ "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_long_t, param2) }, \
{ "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_long_t, param3) }, \
{ "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_long_t, param4) }, \
{ "param5", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_command_long_t, param5) }, \
{ "param6", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_command_long_t, param6) }, \
{ "param7", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_command_long_t, param7) }, \
{ "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_command_long_t, command) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_command_long_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_command_long_t, target_component) }, \
{ "confirmation", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_command_long_t, confirmation) }, \
} \
}
 
 
/**
* @brief Pack a command_long message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
* @param param5 Parameter 5, as defined by MAV_CMD enum.
* @param param6 Parameter 6, as defined by MAV_CMD enum.
* @param param7 Parameter 7, as defined by MAV_CMD enum.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_long_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t command, uint8_t confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, param5);
_mav_put_float(buf, 20, param6);
_mav_put_float(buf, 24, param7);
_mav_put_uint16_t(buf, 28, command);
_mav_put_uint8_t(buf, 30, target_system);
_mav_put_uint8_t(buf, 31, target_component);
_mav_put_uint8_t(buf, 32, confirmation);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 33);
#else
mavlink_command_long_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.param5 = param5;
packet.param6 = param6;
packet.param7 = param7;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.confirmation = confirmation;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 33);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_LONG;
return mavlink_finalize_message(msg, system_id, component_id, 33, 152);
}
 
/**
* @brief Pack a command_long message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
* @param param5 Parameter 5, as defined by MAV_CMD enum.
* @param param6 Parameter 6, as defined by MAV_CMD enum.
* @param param7 Parameter 7, as defined by MAV_CMD enum.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_command_long_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t command,uint8_t confirmation,float param1,float param2,float param3,float param4,float param5,float param6,float param7)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, param5);
_mav_put_float(buf, 20, param6);
_mav_put_float(buf, 24, param7);
_mav_put_uint16_t(buf, 28, command);
_mav_put_uint8_t(buf, 30, target_system);
_mav_put_uint8_t(buf, 31, target_component);
_mav_put_uint8_t(buf, 32, confirmation);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 33);
#else
mavlink_command_long_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.param5 = param5;
packet.param6 = param6;
packet.param7 = param7;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.confirmation = confirmation;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 33);
#endif
 
msg->msgid = MAVLINK_MSG_ID_COMMAND_LONG;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 33, 152);
}
 
/**
* @brief Encode a command_long struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param command_long C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_command_long_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_long_t* command_long)
{
return mavlink_msg_command_long_pack(system_id, component_id, msg, command_long->target_system, command_long->target_component, command_long->command, command_long->confirmation, command_long->param1, command_long->param2, command_long->param3, command_long->param4, command_long->param5, command_long->param6, command_long->param7);
}
 
/**
* @brief Send a command_long message
* @param chan MAVLink channel to send the message
*
* @param target_system System which should execute the command
* @param target_component Component which should execute the command, 0 for all components
* @param command Command ID, as defined by MAV_CMD enum.
* @param confirmation 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
* @param param1 Parameter 1, as defined by MAV_CMD enum.
* @param param2 Parameter 2, as defined by MAV_CMD enum.
* @param param3 Parameter 3, as defined by MAV_CMD enum.
* @param param4 Parameter 4, as defined by MAV_CMD enum.
* @param param5 Parameter 5, as defined by MAV_CMD enum.
* @param param6 Parameter 6, as defined by MAV_CMD enum.
* @param param7 Parameter 7, as defined by MAV_CMD enum.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_command_long_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t command, uint8_t confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, param5);
_mav_put_float(buf, 20, param6);
_mav_put_float(buf, 24, param7);
_mav_put_uint16_t(buf, 28, command);
_mav_put_uint8_t(buf, 30, target_system);
_mav_put_uint8_t(buf, 31, target_component);
_mav_put_uint8_t(buf, 32, confirmation);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, buf, 33, 152);
#else
mavlink_command_long_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.param5 = param5;
packet.param6 = param6;
packet.param7 = param7;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.confirmation = confirmation;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, (const char *)&packet, 33, 152);
#endif
}
 
#endif
 
// MESSAGE COMMAND_LONG UNPACKING
 
 
/**
* @brief Get field target_system from command_long message
*
* @return System which should execute the command
*/
static inline uint8_t mavlink_msg_command_long_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 30);
}
 
/**
* @brief Get field target_component from command_long message
*
* @return Component which should execute the command, 0 for all components
*/
static inline uint8_t mavlink_msg_command_long_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 31);
}
 
/**
* @brief Get field command from command_long message
*
* @return Command ID, as defined by MAV_CMD enum.
*/
static inline uint16_t mavlink_msg_command_long_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 28);
}
 
/**
* @brief Get field confirmation from command_long message
*
* @return 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
*/
static inline uint8_t mavlink_msg_command_long_get_confirmation(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 32);
}
 
/**
* @brief Get field param1 from command_long message
*
* @return Parameter 1, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field param2 from command_long message
*
* @return Parameter 2, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field param3 from command_long message
*
* @return Parameter 3, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field param4 from command_long message
*
* @return Parameter 4, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field param5 from command_long message
*
* @return Parameter 5, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param5(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field param6 from command_long message
*
* @return Parameter 6, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param6(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field param7 from command_long message
*
* @return Parameter 7, as defined by MAV_CMD enum.
*/
static inline float mavlink_msg_command_long_get_param7(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a command_long message into a struct
*
* @param msg The message to decode
* @param command_long C-struct to decode the message contents into
*/
static inline void mavlink_msg_command_long_decode(const mavlink_message_t* msg, mavlink_command_long_t* command_long)
{
#if MAVLINK_NEED_BYTE_SWAP
command_long->param1 = mavlink_msg_command_long_get_param1(msg);
command_long->param2 = mavlink_msg_command_long_get_param2(msg);
command_long->param3 = mavlink_msg_command_long_get_param3(msg);
command_long->param4 = mavlink_msg_command_long_get_param4(msg);
command_long->param5 = mavlink_msg_command_long_get_param5(msg);
command_long->param6 = mavlink_msg_command_long_get_param6(msg);
command_long->param7 = mavlink_msg_command_long_get_param7(msg);
command_long->command = mavlink_msg_command_long_get_command(msg);
command_long->target_system = mavlink_msg_command_long_get_target_system(msg);
command_long->target_component = mavlink_msg_command_long_get_target_component(msg);
command_long->confirmation = mavlink_msg_command_long_get_confirmation(msg);
#else
memcpy(command_long, _MAV_PAYLOAD(msg), 33);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_data_stream.h
0,0 → 1,188
// MESSAGE DATA_STREAM PACKING
 
#define MAVLINK_MSG_ID_DATA_STREAM 67
 
typedef struct __mavlink_data_stream_t
{
uint16_t message_rate; ///< The requested interval between two messages of this type
uint8_t stream_id; ///< The ID of the requested data stream
uint8_t on_off; ///< 1 stream is enabled, 0 stream is stopped.
} mavlink_data_stream_t;
 
#define MAVLINK_MSG_ID_DATA_STREAM_LEN 4
#define MAVLINK_MSG_ID_67_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_DATA_STREAM { \
"DATA_STREAM", \
3, \
{ { "message_rate", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_data_stream_t, message_rate) }, \
{ "stream_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_data_stream_t, stream_id) }, \
{ "on_off", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_data_stream_t, on_off) }, \
} \
}
 
 
/**
* @brief Pack a data_stream message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param stream_id The ID of the requested data stream
* @param message_rate The requested interval between two messages of this type
* @param on_off 1 stream is enabled, 0 stream is stopped.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_data_stream_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t stream_id, uint16_t message_rate, uint8_t on_off)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, message_rate);
_mav_put_uint8_t(buf, 2, stream_id);
_mav_put_uint8_t(buf, 3, on_off);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_data_stream_t packet;
packet.message_rate = message_rate;
packet.stream_id = stream_id;
packet.on_off = on_off;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DATA_STREAM;
return mavlink_finalize_message(msg, system_id, component_id, 4, 21);
}
 
/**
* @brief Pack a data_stream message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param stream_id The ID of the requested data stream
* @param message_rate The requested interval between two messages of this type
* @param on_off 1 stream is enabled, 0 stream is stopped.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_data_stream_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t stream_id,uint16_t message_rate,uint8_t on_off)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, message_rate);
_mav_put_uint8_t(buf, 2, stream_id);
_mav_put_uint8_t(buf, 3, on_off);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_data_stream_t packet;
packet.message_rate = message_rate;
packet.stream_id = stream_id;
packet.on_off = on_off;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DATA_STREAM;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 21);
}
 
/**
* @brief Encode a data_stream struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param data_stream C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_data_stream_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_data_stream_t* data_stream)
{
return mavlink_msg_data_stream_pack(system_id, component_id, msg, data_stream->stream_id, data_stream->message_rate, data_stream->on_off);
}
 
/**
* @brief Send a data_stream message
* @param chan MAVLink channel to send the message
*
* @param stream_id The ID of the requested data stream
* @param message_rate The requested interval between two messages of this type
* @param on_off 1 stream is enabled, 0 stream is stopped.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_data_stream_send(mavlink_channel_t chan, uint8_t stream_id, uint16_t message_rate, uint8_t on_off)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, message_rate);
_mav_put_uint8_t(buf, 2, stream_id);
_mav_put_uint8_t(buf, 3, on_off);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, buf, 4, 21);
#else
mavlink_data_stream_t packet;
packet.message_rate = message_rate;
packet.stream_id = stream_id;
packet.on_off = on_off;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, (const char *)&packet, 4, 21);
#endif
}
 
#endif
 
// MESSAGE DATA_STREAM UNPACKING
 
 
/**
* @brief Get field stream_id from data_stream message
*
* @return The ID of the requested data stream
*/
static inline uint8_t mavlink_msg_data_stream_get_stream_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field message_rate from data_stream message
*
* @return The requested interval between two messages of this type
*/
static inline uint16_t mavlink_msg_data_stream_get_message_rate(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field on_off from data_stream message
*
* @return 1 stream is enabled, 0 stream is stopped.
*/
static inline uint8_t mavlink_msg_data_stream_get_on_off(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Decode a data_stream message into a struct
*
* @param msg The message to decode
* @param data_stream C-struct to decode the message contents into
*/
static inline void mavlink_msg_data_stream_decode(const mavlink_message_t* msg, mavlink_data_stream_t* data_stream)
{
#if MAVLINK_NEED_BYTE_SWAP
data_stream->message_rate = mavlink_msg_data_stream_get_message_rate(msg);
data_stream->stream_id = mavlink_msg_data_stream_get_stream_id(msg);
data_stream->on_off = mavlink_msg_data_stream_get_on_off(msg);
#else
memcpy(data_stream, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_debug.h
0,0 → 1,188
// MESSAGE DEBUG PACKING
 
#define MAVLINK_MSG_ID_DEBUG 254
 
typedef struct __mavlink_debug_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float value; ///< DEBUG value
uint8_t ind; ///< index of debug variable
} mavlink_debug_t;
 
#define MAVLINK_MSG_ID_DEBUG_LEN 9
#define MAVLINK_MSG_ID_254_LEN 9
 
 
 
#define MAVLINK_MESSAGE_INFO_DEBUG { \
"DEBUG", \
3, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_debug_t, time_boot_ms) }, \
{ "value", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_debug_t, value) }, \
{ "ind", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_debug_t, ind) }, \
} \
}
 
 
/**
* @brief Pack a debug message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param ind index of debug variable
* @param value DEBUG value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, uint8_t ind, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_uint8_t(buf, 8, ind);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_debug_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
packet.ind = ind;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG;
return mavlink_finalize_message(msg, system_id, component_id, 9, 46);
}
 
/**
* @brief Pack a debug message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param ind index of debug variable
* @param value DEBUG value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,uint8_t ind,float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_uint8_t(buf, 8, ind);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_debug_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
packet.ind = ind;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 9, 46);
}
 
/**
* @brief Encode a debug struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param debug C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_debug_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_t* debug)
{
return mavlink_msg_debug_pack(system_id, component_id, msg, debug->time_boot_ms, debug->ind, debug->value);
}
 
/**
* @brief Send a debug message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param ind index of debug variable
* @param value DEBUG value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_debug_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t ind, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_uint8_t(buf, 8, ind);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, buf, 9, 46);
#else
mavlink_debug_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
packet.ind = ind;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, (const char *)&packet, 9, 46);
#endif
}
 
#endif
 
// MESSAGE DEBUG UNPACKING
 
 
/**
* @brief Get field time_boot_ms from debug message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_debug_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field ind from debug message
*
* @return index of debug variable
*/
static inline uint8_t mavlink_msg_debug_get_ind(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field value from debug message
*
* @return DEBUG value
*/
static inline float mavlink_msg_debug_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Decode a debug message into a struct
*
* @param msg The message to decode
* @param debug C-struct to decode the message contents into
*/
static inline void mavlink_msg_debug_decode(const mavlink_message_t* msg, mavlink_debug_t* debug)
{
#if MAVLINK_NEED_BYTE_SWAP
debug->time_boot_ms = mavlink_msg_debug_get_time_boot_ms(msg);
debug->value = mavlink_msg_debug_get_value(msg);
debug->ind = mavlink_msg_debug_get_ind(msg);
#else
memcpy(debug, _MAV_PAYLOAD(msg), 9);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_debug_vect.h
0,0 → 1,226
// MESSAGE DEBUG_VECT PACKING
 
#define MAVLINK_MSG_ID_DEBUG_VECT 250
 
typedef struct __mavlink_debug_vect_t
{
uint64_t time_usec; ///< Timestamp
float x; ///< x
float y; ///< y
float z; ///< z
char name[10]; ///< Name
} mavlink_debug_vect_t;
 
#define MAVLINK_MSG_ID_DEBUG_VECT_LEN 30
#define MAVLINK_MSG_ID_250_LEN 30
 
#define MAVLINK_MSG_DEBUG_VECT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_DEBUG_VECT { \
"DEBUG_VECT", \
5, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_debug_vect_t, time_usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_debug_vect_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_debug_vect_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_debug_vect_t, z) }, \
{ "name", NULL, MAVLINK_TYPE_CHAR, 10, 20, offsetof(mavlink_debug_vect_t, name) }, \
} \
}
 
 
/**
* @brief Pack a debug_vect message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param name Name
* @param time_usec Timestamp
* @param x x
* @param y y
* @param z z
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_vect_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *name, uint64_t time_usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_char_array(buf, 20, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_debug_vect_t packet;
packet.time_usec = time_usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
return mavlink_finalize_message(msg, system_id, component_id, 30, 49);
}
 
/**
* @brief Pack a debug_vect message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param name Name
* @param time_usec Timestamp
* @param x x
* @param y y
* @param z z
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_debug_vect_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *name,uint64_t time_usec,float x,float y,float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_char_array(buf, 20, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_debug_vect_t packet;
packet.time_usec = time_usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 30, 49);
}
 
/**
* @brief Encode a debug_vect struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param debug_vect C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_debug_vect_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_vect_t* debug_vect)
{
return mavlink_msg_debug_vect_pack(system_id, component_id, msg, debug_vect->name, debug_vect->time_usec, debug_vect->x, debug_vect->y, debug_vect->z);
}
 
/**
* @brief Send a debug_vect message
* @param chan MAVLink channel to send the message
*
* @param name Name
* @param time_usec Timestamp
* @param x x
* @param y y
* @param z z
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_debug_vect_send(mavlink_channel_t chan, const char *name, uint64_t time_usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_char_array(buf, 20, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, buf, 30, 49);
#else
mavlink_debug_vect_t packet;
packet.time_usec = time_usec;
packet.x = x;
packet.y = y;
packet.z = z;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, (const char *)&packet, 30, 49);
#endif
}
 
#endif
 
// MESSAGE DEBUG_VECT UNPACKING
 
 
/**
* @brief Get field name from debug_vect message
*
* @return Name
*/
static inline uint16_t mavlink_msg_debug_vect_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 20);
}
 
/**
* @brief Get field time_usec from debug_vect message
*
* @return Timestamp
*/
static inline uint64_t mavlink_msg_debug_vect_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from debug_vect message
*
* @return x
*/
static inline float mavlink_msg_debug_vect_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from debug_vect message
*
* @return y
*/
static inline float mavlink_msg_debug_vect_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from debug_vect message
*
* @return z
*/
static inline float mavlink_msg_debug_vect_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a debug_vect message into a struct
*
* @param msg The message to decode
* @param debug_vect C-struct to decode the message contents into
*/
static inline void mavlink_msg_debug_vect_decode(const mavlink_message_t* msg, mavlink_debug_vect_t* debug_vect)
{
#if MAVLINK_NEED_BYTE_SWAP
debug_vect->time_usec = mavlink_msg_debug_vect_get_time_usec(msg);
debug_vect->x = mavlink_msg_debug_vect_get_x(msg);
debug_vect->y = mavlink_msg_debug_vect_get_y(msg);
debug_vect->z = mavlink_msg_debug_vect_get_z(msg);
mavlink_msg_debug_vect_get_name(msg, debug_vect->name);
#else
memcpy(debug_vect, _MAV_PAYLOAD(msg), 30);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_global_position_int.h
0,0 → 1,320
// MESSAGE GLOBAL_POSITION_INT PACKING
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT 33
 
typedef struct __mavlink_global_position_int_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters), above MSL
int32_t relative_alt; ///< Altitude above ground in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
uint16_t hdg; ///< Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
} mavlink_global_position_int_t;
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN 28
#define MAVLINK_MSG_ID_33_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT { \
"GLOBAL_POSITION_INT", \
9, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_global_position_int_t, time_boot_ms) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_global_position_int_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_global_position_int_t, alt) }, \
{ "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_global_position_int_t, relative_alt) }, \
{ "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_global_position_int_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_global_position_int_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_global_position_int_t, vz) }, \
{ "hdg", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_global_position_int_t, hdg) }, \
} \
}
 
 
/**
* @brief Pack a global_position_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters), above MSL
* @param relative_alt Altitude above ground in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param hdg Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy, int16_t vz, uint16_t hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, lon);
_mav_put_int32_t(buf, 12, alt);
_mav_put_int32_t(buf, 16, relative_alt);
_mav_put_int16_t(buf, 20, vx);
_mav_put_int16_t(buf, 22, vy);
_mav_put_int16_t(buf, 24, vz);
_mav_put_uint16_t(buf, 26, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_global_position_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.relative_alt = relative_alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
return mavlink_finalize_message(msg, system_id, component_id, 28, 104);
}
 
/**
* @brief Pack a global_position_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters), above MSL
* @param relative_alt Altitude above ground in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param hdg Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,int32_t lat,int32_t lon,int32_t alt,int32_t relative_alt,int16_t vx,int16_t vy,int16_t vz,uint16_t hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, lon);
_mav_put_int32_t(buf, 12, alt);
_mav_put_int32_t(buf, 16, relative_alt);
_mav_put_int16_t(buf, 20, vx);
_mav_put_int16_t(buf, 22, vy);
_mav_put_int16_t(buf, 24, vz);
_mav_put_uint16_t(buf, 26, hdg);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_global_position_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.relative_alt = relative_alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.hdg = hdg;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 104);
}
 
/**
* @brief Encode a global_position_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param global_position_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_global_position_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_int_t* global_position_int)
{
return mavlink_msg_global_position_int_pack(system_id, component_id, msg, global_position_int->time_boot_ms, global_position_int->lat, global_position_int->lon, global_position_int->alt, global_position_int->relative_alt, global_position_int->vx, global_position_int->vy, global_position_int->vz, global_position_int->hdg);
}
 
/**
* @brief Send a global_position_int message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters), above MSL
* @param relative_alt Altitude above ground in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param hdg Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_global_position_int_send(mavlink_channel_t chan, uint32_t time_boot_ms, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy, int16_t vz, uint16_t hdg)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, lon);
_mav_put_int32_t(buf, 12, alt);
_mav_put_int32_t(buf, 16, relative_alt);
_mav_put_int16_t(buf, 20, vx);
_mav_put_int16_t(buf, 22, vy);
_mav_put_int16_t(buf, 24, vz);
_mav_put_uint16_t(buf, 26, hdg);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, buf, 28, 104);
#else
mavlink_global_position_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.relative_alt = relative_alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.hdg = hdg;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, (const char *)&packet, 28, 104);
#endif
}
 
#endif
 
// MESSAGE GLOBAL_POSITION_INT UNPACKING
 
 
/**
* @brief Get field time_boot_ms from global_position_int message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_global_position_int_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field lat from global_position_int message
*
* @return Latitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_global_position_int_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field lon from global_position_int message
*
* @return Longitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_global_position_int_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field alt from global_position_int message
*
* @return Altitude in meters, expressed as * 1000 (millimeters), above MSL
*/
static inline int32_t mavlink_msg_global_position_int_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 12);
}
 
/**
* @brief Get field relative_alt from global_position_int message
*
* @return Altitude above ground in meters, expressed as * 1000 (millimeters)
*/
static inline int32_t mavlink_msg_global_position_int_get_relative_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 16);
}
 
/**
* @brief Get field vx from global_position_int message
*
* @return Ground X Speed (Latitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field vy from global_position_int message
*
* @return Ground Y Speed (Longitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field vz from global_position_int message
*
* @return Ground Z Speed (Altitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_global_position_int_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 24);
}
 
/**
* @brief Get field hdg from global_position_int message
*
* @return Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
*/
static inline uint16_t mavlink_msg_global_position_int_get_hdg(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 26);
}
 
/**
* @brief Decode a global_position_int message into a struct
*
* @param msg The message to decode
* @param global_position_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_global_position_int_decode(const mavlink_message_t* msg, mavlink_global_position_int_t* global_position_int)
{
#if MAVLINK_NEED_BYTE_SWAP
global_position_int->time_boot_ms = mavlink_msg_global_position_int_get_time_boot_ms(msg);
global_position_int->lat = mavlink_msg_global_position_int_get_lat(msg);
global_position_int->lon = mavlink_msg_global_position_int_get_lon(msg);
global_position_int->alt = mavlink_msg_global_position_int_get_alt(msg);
global_position_int->relative_alt = mavlink_msg_global_position_int_get_relative_alt(msg);
global_position_int->vx = mavlink_msg_global_position_int_get_vx(msg);
global_position_int->vy = mavlink_msg_global_position_int_get_vy(msg);
global_position_int->vz = mavlink_msg_global_position_int_get_vz(msg);
global_position_int->hdg = mavlink_msg_global_position_int_get_hdg(msg);
#else
memcpy(global_position_int, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_global_position_setpoint_int.h
0,0 → 1,232
// MESSAGE GLOBAL_POSITION_SETPOINT_INT PACKING
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT 52
 
typedef struct __mavlink_global_position_setpoint_int_t
{
int32_t latitude; ///< WGS84 Latitude position in degrees * 1E7
int32_t longitude; ///< WGS84 Longitude position in degrees * 1E7
int32_t altitude; ///< WGS84 Altitude in meters * 1000 (positive for up)
int16_t yaw; ///< Desired yaw angle in degrees * 100
uint8_t coordinate_frame; ///< Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
} mavlink_global_position_setpoint_int_t;
 
#define MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT_LEN 15
#define MAVLINK_MSG_ID_52_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_SETPOINT_INT { \
"GLOBAL_POSITION_SETPOINT_INT", \
5, \
{ { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_global_position_setpoint_int_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_global_position_setpoint_int_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_setpoint_int_t, altitude) }, \
{ "yaw", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_global_position_setpoint_int_t, yaw) }, \
{ "coordinate_frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 14, offsetof(mavlink_global_position_setpoint_int_t, coordinate_frame) }, \
} \
}
 
 
/**
* @brief Pack a global_position_setpoint_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_setpoint_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t coordinate_frame, int32_t latitude, int32_t longitude, int32_t altitude, int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT;
return mavlink_finalize_message(msg, system_id, component_id, 15, 141);
}
 
/**
* @brief Pack a global_position_setpoint_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_position_setpoint_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t coordinate_frame,int32_t latitude,int32_t longitude,int32_t altitude,int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15, 141);
}
 
/**
* @brief Encode a global_position_setpoint_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param global_position_setpoint_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_global_position_setpoint_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_setpoint_int_t* global_position_setpoint_int)
{
return mavlink_msg_global_position_setpoint_int_pack(system_id, component_id, msg, global_position_setpoint_int->coordinate_frame, global_position_setpoint_int->latitude, global_position_setpoint_int->longitude, global_position_setpoint_int->altitude, global_position_setpoint_int->yaw);
}
 
/**
* @brief Send a global_position_setpoint_int message
* @param chan MAVLink channel to send the message
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_global_position_setpoint_int_send(mavlink_channel_t chan, uint8_t coordinate_frame, int32_t latitude, int32_t longitude, int32_t altitude, int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT, buf, 15, 141);
#else
mavlink_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT, (const char *)&packet, 15, 141);
#endif
}
 
#endif
 
// MESSAGE GLOBAL_POSITION_SETPOINT_INT UNPACKING
 
 
/**
* @brief Get field coordinate_frame from global_position_setpoint_int message
*
* @return Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
*/
static inline uint8_t mavlink_msg_global_position_setpoint_int_get_coordinate_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 14);
}
 
/**
* @brief Get field latitude from global_position_setpoint_int message
*
* @return WGS84 Latitude position in degrees * 1E7
*/
static inline int32_t mavlink_msg_global_position_setpoint_int_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field longitude from global_position_setpoint_int message
*
* @return WGS84 Longitude position in degrees * 1E7
*/
static inline int32_t mavlink_msg_global_position_setpoint_int_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field altitude from global_position_setpoint_int message
*
* @return WGS84 Altitude in meters * 1000 (positive for up)
*/
static inline int32_t mavlink_msg_global_position_setpoint_int_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field yaw from global_position_setpoint_int message
*
* @return Desired yaw angle in degrees * 100
*/
static inline int16_t mavlink_msg_global_position_setpoint_int_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Decode a global_position_setpoint_int message into a struct
*
* @param msg The message to decode
* @param global_position_setpoint_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_global_position_setpoint_int_decode(const mavlink_message_t* msg, mavlink_global_position_setpoint_int_t* global_position_setpoint_int)
{
#if MAVLINK_NEED_BYTE_SWAP
global_position_setpoint_int->latitude = mavlink_msg_global_position_setpoint_int_get_latitude(msg);
global_position_setpoint_int->longitude = mavlink_msg_global_position_setpoint_int_get_longitude(msg);
global_position_setpoint_int->altitude = mavlink_msg_global_position_setpoint_int_get_altitude(msg);
global_position_setpoint_int->yaw = mavlink_msg_global_position_setpoint_int_get_yaw(msg);
global_position_setpoint_int->coordinate_frame = mavlink_msg_global_position_setpoint_int_get_coordinate_frame(msg);
#else
memcpy(global_position_setpoint_int, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_global_vision_position_estimate.h
0,0 → 1,276
// MESSAGE GLOBAL_VISION_POSITION_ESTIMATE PACKING
 
#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE 101
 
typedef struct __mavlink_global_vision_position_estimate_t
{
uint64_t usec; ///< Timestamp (milliseconds)
float x; ///< Global X position
float y; ///< Global Y position
float z; ///< Global Z position
float roll; ///< Roll angle in rad
float pitch; ///< Pitch angle in rad
float yaw; ///< Yaw angle in rad
} mavlink_global_vision_position_estimate_t;
 
#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN 32
#define MAVLINK_MSG_ID_101_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE { \
"GLOBAL_VISION_POSITION_ESTIMATE", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_vision_position_estimate_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_global_vision_position_estimate_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_global_vision_position_estimate_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_global_vision_position_estimate_t, z) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_global_vision_position_estimate_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_vision_position_estimate_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_vision_position_estimate_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a global_vision_position_estimate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_vision_position_estimate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_global_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE;
return mavlink_finalize_message(msg, system_id, component_id, 32, 102);
}
 
/**
* @brief Pack a global_vision_position_estimate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_global_vision_position_estimate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float x,float y,float z,float roll,float pitch,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_global_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 102);
}
 
/**
* @brief Encode a global_vision_position_estimate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param global_vision_position_estimate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_global_vision_position_estimate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
{
return mavlink_msg_global_vision_position_estimate_pack(system_id, component_id, msg, global_vision_position_estimate->usec, global_vision_position_estimate->x, global_vision_position_estimate->y, global_vision_position_estimate->z, global_vision_position_estimate->roll, global_vision_position_estimate->pitch, global_vision_position_estimate->yaw);
}
 
/**
* @brief Send a global_vision_position_estimate message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_global_vision_position_estimate_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, buf, 32, 102);
#else
mavlink_global_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, (const char *)&packet, 32, 102);
#endif
}
 
#endif
 
// MESSAGE GLOBAL_VISION_POSITION_ESTIMATE UNPACKING
 
 
/**
* @brief Get field usec from global_vision_position_estimate message
*
* @return Timestamp (milliseconds)
*/
static inline uint64_t mavlink_msg_global_vision_position_estimate_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from global_vision_position_estimate message
*
* @return Global X position
*/
static inline float mavlink_msg_global_vision_position_estimate_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from global_vision_position_estimate message
*
* @return Global Y position
*/
static inline float mavlink_msg_global_vision_position_estimate_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from global_vision_position_estimate message
*
* @return Global Z position
*/
static inline float mavlink_msg_global_vision_position_estimate_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field roll from global_vision_position_estimate message
*
* @return Roll angle in rad
*/
static inline float mavlink_msg_global_vision_position_estimate_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitch from global_vision_position_estimate message
*
* @return Pitch angle in rad
*/
static inline float mavlink_msg_global_vision_position_estimate_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yaw from global_vision_position_estimate message
*
* @return Yaw angle in rad
*/
static inline float mavlink_msg_global_vision_position_estimate_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a global_vision_position_estimate message into a struct
*
* @param msg The message to decode
* @param global_vision_position_estimate C-struct to decode the message contents into
*/
static inline void mavlink_msg_global_vision_position_estimate_decode(const mavlink_message_t* msg, mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
{
#if MAVLINK_NEED_BYTE_SWAP
global_vision_position_estimate->usec = mavlink_msg_global_vision_position_estimate_get_usec(msg);
global_vision_position_estimate->x = mavlink_msg_global_vision_position_estimate_get_x(msg);
global_vision_position_estimate->y = mavlink_msg_global_vision_position_estimate_get_y(msg);
global_vision_position_estimate->z = mavlink_msg_global_vision_position_estimate_get_z(msg);
global_vision_position_estimate->roll = mavlink_msg_global_vision_position_estimate_get_roll(msg);
global_vision_position_estimate->pitch = mavlink_msg_global_vision_position_estimate_get_pitch(msg);
global_vision_position_estimate->yaw = mavlink_msg_global_vision_position_estimate_get_yaw(msg);
#else
memcpy(global_vision_position_estimate, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_gps_global_origin.h
0,0 → 1,188
// MESSAGE GPS_GLOBAL_ORIGIN PACKING
 
#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN 49
 
typedef struct __mavlink_gps_global_origin_t
{
int32_t latitude; ///< Latitude (WGS84), expressed as * 1E7
int32_t longitude; ///< Longitude (WGS84), expressed as * 1E7
int32_t altitude; ///< Altitude(WGS84), expressed as * 1000
} mavlink_gps_global_origin_t;
 
#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN 12
#define MAVLINK_MSG_ID_49_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN { \
"GPS_GLOBAL_ORIGIN", \
3, \
{ { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_gps_global_origin_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_gps_global_origin_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_global_origin_t, altitude) }, \
} \
}
 
 
/**
* @brief Pack a gps_global_origin message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_global_origin_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
return mavlink_finalize_message(msg, system_id, component_id, 12, 39);
}
 
/**
* @brief Pack a gps_global_origin message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_global_origin_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int32_t latitude,int32_t longitude,int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 39);
}
 
/**
* @brief Encode a gps_global_origin struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_global_origin C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_global_origin_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_global_origin_t* gps_global_origin)
{
return mavlink_msg_gps_global_origin_pack(system_id, component_id, msg, gps_global_origin->latitude, gps_global_origin->longitude, gps_global_origin->altitude);
}
 
/**
* @brief Send a gps_global_origin message
* @param chan MAVLink channel to send the message
*
* @param latitude Latitude (WGS84), expressed as * 1E7
* @param longitude Longitude (WGS84), expressed as * 1E7
* @param altitude Altitude(WGS84), expressed as * 1000
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_global_origin_send(mavlink_channel_t chan, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, buf, 12, 39);
#else
mavlink_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, (const char *)&packet, 12, 39);
#endif
}
 
#endif
 
// MESSAGE GPS_GLOBAL_ORIGIN UNPACKING
 
 
/**
* @brief Get field latitude from gps_global_origin message
*
* @return Latitude (WGS84), expressed as * 1E7
*/
static inline int32_t mavlink_msg_gps_global_origin_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field longitude from gps_global_origin message
*
* @return Longitude (WGS84), expressed as * 1E7
*/
static inline int32_t mavlink_msg_gps_global_origin_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field altitude from gps_global_origin message
*
* @return Altitude(WGS84), expressed as * 1000
*/
static inline int32_t mavlink_msg_gps_global_origin_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Decode a gps_global_origin message into a struct
*
* @param msg The message to decode
* @param gps_global_origin C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_global_origin_decode(const mavlink_message_t* msg, mavlink_gps_global_origin_t* gps_global_origin)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_global_origin->latitude = mavlink_msg_gps_global_origin_get_latitude(msg);
gps_global_origin->longitude = mavlink_msg_gps_global_origin_get_longitude(msg);
gps_global_origin->altitude = mavlink_msg_gps_global_origin_get_altitude(msg);
#else
memcpy(gps_global_origin, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_gps_raw_int.h
0,0 → 1,342
// MESSAGE GPS_RAW_INT PACKING
 
#define MAVLINK_MSG_ID_GPS_RAW_INT 24
 
typedef struct __mavlink_gps_raw_int_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int32_t lat; ///< Latitude in 1E7 degrees
int32_t lon; ///< Longitude in 1E7 degrees
int32_t alt; ///< Altitude in 1E3 meters (millimeters) above MSL
uint16_t eph; ///< GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
uint16_t epv; ///< GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
uint16_t vel; ///< GPS ground speed (m/s * 100). If unknown, set to: 65535
uint16_t cog; ///< Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
uint8_t fix_type; ///< 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
uint8_t satellites_visible; ///< Number of satellites visible. If unknown, set to 255
} mavlink_gps_raw_int_t;
 
#define MAVLINK_MSG_ID_GPS_RAW_INT_LEN 30
#define MAVLINK_MSG_ID_24_LEN 30
 
 
 
#define MAVLINK_MESSAGE_INFO_GPS_RAW_INT { \
"GPS_RAW_INT", \
10, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_raw_int_t, time_usec) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_raw_int_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_raw_int_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_raw_int_t, alt) }, \
{ "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_gps_raw_int_t, eph) }, \
{ "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_gps_raw_int_t, epv) }, \
{ "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps_raw_int_t, vel) }, \
{ "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps_raw_int_t, cog) }, \
{ "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_gps_raw_int_t, fix_type) }, \
{ "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_gps_raw_int_t, satellites_visible) }, \
} \
}
 
 
/**
* @brief Pack a gps_raw_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters) above MSL
* @param eph GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param epv GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param vel GPS ground speed (m/s * 100). If unknown, set to: 65535
* @param cog Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
* @param satellites_visible Number of satellites visible. If unknown, set to 255
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int32_t(buf, 8, lat);
_mav_put_int32_t(buf, 12, lon);
_mav_put_int32_t(buf, 16, alt);
_mav_put_uint16_t(buf, 20, eph);
_mav_put_uint16_t(buf, 22, epv);
_mav_put_uint16_t(buf, 24, vel);
_mav_put_uint16_t(buf, 26, cog);
_mav_put_uint8_t(buf, 28, fix_type);
_mav_put_uint8_t(buf, 29, satellites_visible);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_gps_raw_int_t packet;
packet.time_usec = time_usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.vel = vel;
packet.cog = cog;
packet.fix_type = fix_type;
packet.satellites_visible = satellites_visible;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
return mavlink_finalize_message(msg, system_id, component_id, 30, 24);
}
 
/**
* @brief Pack a gps_raw_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters) above MSL
* @param eph GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param epv GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param vel GPS ground speed (m/s * 100). If unknown, set to: 65535
* @param cog Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
* @param satellites_visible Number of satellites visible. If unknown, set to 255
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_raw_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,uint16_t eph,uint16_t epv,uint16_t vel,uint16_t cog,uint8_t satellites_visible)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int32_t(buf, 8, lat);
_mav_put_int32_t(buf, 12, lon);
_mav_put_int32_t(buf, 16, alt);
_mav_put_uint16_t(buf, 20, eph);
_mav_put_uint16_t(buf, 22, epv);
_mav_put_uint16_t(buf, 24, vel);
_mav_put_uint16_t(buf, 26, cog);
_mav_put_uint8_t(buf, 28, fix_type);
_mav_put_uint8_t(buf, 29, satellites_visible);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 30);
#else
mavlink_gps_raw_int_t packet;
packet.time_usec = time_usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.vel = vel;
packet.cog = cog;
packet.fix_type = fix_type;
packet.satellites_visible = satellites_visible;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 30);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 30, 24);
}
 
/**
* @brief Encode a gps_raw_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_raw_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_raw_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_raw_int_t* gps_raw_int)
{
return mavlink_msg_gps_raw_int_pack(system_id, component_id, msg, gps_raw_int->time_usec, gps_raw_int->fix_type, gps_raw_int->lat, gps_raw_int->lon, gps_raw_int->alt, gps_raw_int->eph, gps_raw_int->epv, gps_raw_int->vel, gps_raw_int->cog, gps_raw_int->satellites_visible);
}
 
/**
* @brief Send a gps_raw_int message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param fix_type 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
* @param lat Latitude in 1E7 degrees
* @param lon Longitude in 1E7 degrees
* @param alt Altitude in 1E3 meters (millimeters) above MSL
* @param eph GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param epv GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
* @param vel GPS ground speed (m/s * 100). If unknown, set to: 65535
* @param cog Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
* @param satellites_visible Number of satellites visible. If unknown, set to 255
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_raw_int_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[30];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int32_t(buf, 8, lat);
_mav_put_int32_t(buf, 12, lon);
_mav_put_int32_t(buf, 16, alt);
_mav_put_uint16_t(buf, 20, eph);
_mav_put_uint16_t(buf, 22, epv);
_mav_put_uint16_t(buf, 24, vel);
_mav_put_uint16_t(buf, 26, cog);
_mav_put_uint8_t(buf, 28, fix_type);
_mav_put_uint8_t(buf, 29, satellites_visible);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, buf, 30, 24);
#else
mavlink_gps_raw_int_t packet;
packet.time_usec = time_usec;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.eph = eph;
packet.epv = epv;
packet.vel = vel;
packet.cog = cog;
packet.fix_type = fix_type;
packet.satellites_visible = satellites_visible;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, (const char *)&packet, 30, 24);
#endif
}
 
#endif
 
// MESSAGE GPS_RAW_INT UNPACKING
 
 
/**
* @brief Get field time_usec from gps_raw_int message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_gps_raw_int_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field fix_type from gps_raw_int message
*
* @return 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
*/
static inline uint8_t mavlink_msg_gps_raw_int_get_fix_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 28);
}
 
/**
* @brief Get field lat from gps_raw_int message
*
* @return Latitude in 1E7 degrees
*/
static inline int32_t mavlink_msg_gps_raw_int_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field lon from gps_raw_int message
*
* @return Longitude in 1E7 degrees
*/
static inline int32_t mavlink_msg_gps_raw_int_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 12);
}
 
/**
* @brief Get field alt from gps_raw_int message
*
* @return Altitude in 1E3 meters (millimeters) above MSL
*/
static inline int32_t mavlink_msg_gps_raw_int_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 16);
}
 
/**
* @brief Get field eph from gps_raw_int message
*
* @return GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
*/
static inline uint16_t mavlink_msg_gps_raw_int_get_eph(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 20);
}
 
/**
* @brief Get field epv from gps_raw_int message
*
* @return GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535
*/
static inline uint16_t mavlink_msg_gps_raw_int_get_epv(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 22);
}
 
/**
* @brief Get field vel from gps_raw_int message
*
* @return GPS ground speed (m/s * 100). If unknown, set to: 65535
*/
static inline uint16_t mavlink_msg_gps_raw_int_get_vel(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 24);
}
 
/**
* @brief Get field cog from gps_raw_int message
*
* @return Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535
*/
static inline uint16_t mavlink_msg_gps_raw_int_get_cog(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 26);
}
 
/**
* @brief Get field satellites_visible from gps_raw_int message
*
* @return Number of satellites visible. If unknown, set to 255
*/
static inline uint8_t mavlink_msg_gps_raw_int_get_satellites_visible(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 29);
}
 
/**
* @brief Decode a gps_raw_int message into a struct
*
* @param msg The message to decode
* @param gps_raw_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_raw_int_decode(const mavlink_message_t* msg, mavlink_gps_raw_int_t* gps_raw_int)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_raw_int->time_usec = mavlink_msg_gps_raw_int_get_time_usec(msg);
gps_raw_int->lat = mavlink_msg_gps_raw_int_get_lat(msg);
gps_raw_int->lon = mavlink_msg_gps_raw_int_get_lon(msg);
gps_raw_int->alt = mavlink_msg_gps_raw_int_get_alt(msg);
gps_raw_int->eph = mavlink_msg_gps_raw_int_get_eph(msg);
gps_raw_int->epv = mavlink_msg_gps_raw_int_get_epv(msg);
gps_raw_int->vel = mavlink_msg_gps_raw_int_get_vel(msg);
gps_raw_int->cog = mavlink_msg_gps_raw_int_get_cog(msg);
gps_raw_int->fix_type = mavlink_msg_gps_raw_int_get_fix_type(msg);
gps_raw_int->satellites_visible = mavlink_msg_gps_raw_int_get_satellites_visible(msg);
#else
memcpy(gps_raw_int, _MAV_PAYLOAD(msg), 30);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_gps_status.h
0,0 → 1,252
// MESSAGE GPS_STATUS PACKING
 
#define MAVLINK_MSG_ID_GPS_STATUS 25
 
typedef struct __mavlink_gps_status_t
{
uint8_t satellites_visible; ///< Number of satellites visible
uint8_t satellite_prn[20]; ///< Global satellite ID
uint8_t satellite_used[20]; ///< 0: Satellite not used, 1: used for localization
uint8_t satellite_elevation[20]; ///< Elevation (0: right on top of receiver, 90: on the horizon) of satellite
uint8_t satellite_azimuth[20]; ///< Direction of satellite, 0: 0 deg, 255: 360 deg.
uint8_t satellite_snr[20]; ///< Signal to noise ratio of satellite
} mavlink_gps_status_t;
 
#define MAVLINK_MSG_ID_GPS_STATUS_LEN 101
#define MAVLINK_MSG_ID_25_LEN 101
 
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_PRN_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_USED_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_ELEVATION_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_AZIMUTH_LEN 20
#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_SNR_LEN 20
 
#define MAVLINK_MESSAGE_INFO_GPS_STATUS { \
"GPS_STATUS", \
6, \
{ { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_status_t, satellites_visible) }, \
{ "satellite_prn", NULL, MAVLINK_TYPE_UINT8_T, 20, 1, offsetof(mavlink_gps_status_t, satellite_prn) }, \
{ "satellite_used", NULL, MAVLINK_TYPE_UINT8_T, 20, 21, offsetof(mavlink_gps_status_t, satellite_used) }, \
{ "satellite_elevation", NULL, MAVLINK_TYPE_UINT8_T, 20, 41, offsetof(mavlink_gps_status_t, satellite_elevation) }, \
{ "satellite_azimuth", NULL, MAVLINK_TYPE_UINT8_T, 20, 61, offsetof(mavlink_gps_status_t, satellite_azimuth) }, \
{ "satellite_snr", NULL, MAVLINK_TYPE_UINT8_T, 20, 81, offsetof(mavlink_gps_status_t, satellite_snr) }, \
} \
}
 
 
/**
* @brief Pack a gps_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t satellites_visible, const uint8_t *satellite_prn, const uint8_t *satellite_used, const uint8_t *satellite_elevation, const uint8_t *satellite_azimuth, const uint8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
_mav_put_uint8_t_array(buf, 21, satellite_used, 20);
_mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 101);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 101);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 101, 23);
}
 
/**
* @brief Pack a gps_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_gps_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t satellites_visible,const uint8_t *satellite_prn,const uint8_t *satellite_used,const uint8_t *satellite_elevation,const uint8_t *satellite_azimuth,const uint8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
_mav_put_uint8_t_array(buf, 21, satellite_used, 20);
_mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 101);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 101);
#endif
 
msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 101, 23);
}
 
/**
* @brief Encode a gps_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param gps_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_gps_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_status_t* gps_status)
{
return mavlink_msg_gps_status_pack(system_id, component_id, msg, gps_status->satellites_visible, gps_status->satellite_prn, gps_status->satellite_used, gps_status->satellite_elevation, gps_status->satellite_azimuth, gps_status->satellite_snr);
}
 
/**
* @brief Send a gps_status message
* @param chan MAVLink channel to send the message
*
* @param satellites_visible Number of satellites visible
* @param satellite_prn Global satellite ID
* @param satellite_used 0: Satellite not used, 1: used for localization
* @param satellite_elevation Elevation (0: right on top of receiver, 90: on the horizon) of satellite
* @param satellite_azimuth Direction of satellite, 0: 0 deg, 255: 360 deg.
* @param satellite_snr Signal to noise ratio of satellite
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_gps_status_send(mavlink_channel_t chan, uint8_t satellites_visible, const uint8_t *satellite_prn, const uint8_t *satellite_used, const uint8_t *satellite_elevation, const uint8_t *satellite_azimuth, const uint8_t *satellite_snr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[101];
_mav_put_uint8_t(buf, 0, satellites_visible);
_mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
_mav_put_uint8_t_array(buf, 21, satellite_used, 20);
_mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
_mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
_mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, buf, 101, 23);
#else
mavlink_gps_status_t packet;
packet.satellites_visible = satellites_visible;
mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, (const char *)&packet, 101, 23);
#endif
}
 
#endif
 
// MESSAGE GPS_STATUS UNPACKING
 
 
/**
* @brief Get field satellites_visible from gps_status message
*
* @return Number of satellites visible
*/
static inline uint8_t mavlink_msg_gps_status_get_satellites_visible(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field satellite_prn from gps_status message
*
* @return Global satellite ID
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_prn(const mavlink_message_t* msg, uint8_t *satellite_prn)
{
return _MAV_RETURN_uint8_t_array(msg, satellite_prn, 20, 1);
}
 
/**
* @brief Get field satellite_used from gps_status message
*
* @return 0: Satellite not used, 1: used for localization
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_used(const mavlink_message_t* msg, uint8_t *satellite_used)
{
return _MAV_RETURN_uint8_t_array(msg, satellite_used, 20, 21);
}
 
/**
* @brief Get field satellite_elevation from gps_status message
*
* @return Elevation (0: right on top of receiver, 90: on the horizon) of satellite
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_elevation(const mavlink_message_t* msg, uint8_t *satellite_elevation)
{
return _MAV_RETURN_uint8_t_array(msg, satellite_elevation, 20, 41);
}
 
/**
* @brief Get field satellite_azimuth from gps_status message
*
* @return Direction of satellite, 0: 0 deg, 255: 360 deg.
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_azimuth(const mavlink_message_t* msg, uint8_t *satellite_azimuth)
{
return _MAV_RETURN_uint8_t_array(msg, satellite_azimuth, 20, 61);
}
 
/**
* @brief Get field satellite_snr from gps_status message
*
* @return Signal to noise ratio of satellite
*/
static inline uint16_t mavlink_msg_gps_status_get_satellite_snr(const mavlink_message_t* msg, uint8_t *satellite_snr)
{
return _MAV_RETURN_uint8_t_array(msg, satellite_snr, 20, 81);
}
 
/**
* @brief Decode a gps_status message into a struct
*
* @param msg The message to decode
* @param gps_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_gps_status_decode(const mavlink_message_t* msg, mavlink_gps_status_t* gps_status)
{
#if MAVLINK_NEED_BYTE_SWAP
gps_status->satellites_visible = mavlink_msg_gps_status_get_satellites_visible(msg);
mavlink_msg_gps_status_get_satellite_prn(msg, gps_status->satellite_prn);
mavlink_msg_gps_status_get_satellite_used(msg, gps_status->satellite_used);
mavlink_msg_gps_status_get_satellite_elevation(msg, gps_status->satellite_elevation);
mavlink_msg_gps_status_get_satellite_azimuth(msg, gps_status->satellite_azimuth);
mavlink_msg_gps_status_get_satellite_snr(msg, gps_status->satellite_snr);
#else
memcpy(gps_status, _MAV_PAYLOAD(msg), 101);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_heartbeat.h
0,0 → 1,251
// MESSAGE HEARTBEAT PACKING
 
#define MAVLINK_MSG_ID_HEARTBEAT 0
 
typedef struct __mavlink_heartbeat_t
{
uint32_t custom_mode; ///< A bitfield for use for autopilot-specific flags.
uint8_t type; ///< Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
uint8_t autopilot; ///< Autopilot type / class. defined in MAV_AUTOPILOT ENUM
uint8_t base_mode; ///< System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
uint8_t system_status; ///< System status flag, see MAV_STATE ENUM
uint8_t mavlink_version; ///< MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version
} mavlink_heartbeat_t;
 
#define MAVLINK_MSG_ID_HEARTBEAT_LEN 9
#define MAVLINK_MSG_ID_0_LEN 9
 
 
 
#define MAVLINK_MESSAGE_INFO_HEARTBEAT { \
"HEARTBEAT", \
6, \
{ { "custom_mode", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_heartbeat_t, custom_mode) }, \
{ "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_heartbeat_t, type) }, \
{ "autopilot", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_heartbeat_t, autopilot) }, \
{ "base_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_heartbeat_t, base_mode) }, \
{ "system_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_heartbeat_t, system_status) }, \
{ "mavlink_version", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_heartbeat_t, mavlink_version) }, \
} \
}
 
 
/**
* @brief Pack a heartbeat message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Autopilot type / class. defined in MAV_AUTOPILOT ENUM
* @param base_mode System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
* @param custom_mode A bitfield for use for autopilot-specific flags.
* @param system_status System status flag, see MAV_STATE ENUM
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_heartbeat_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t type, uint8_t autopilot, uint8_t base_mode, uint32_t custom_mode, uint8_t system_status)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, type);
_mav_put_uint8_t(buf, 5, autopilot);
_mav_put_uint8_t(buf, 6, base_mode);
_mav_put_uint8_t(buf, 7, system_status);
_mav_put_uint8_t(buf, 8, 3);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_heartbeat_t packet;
packet.custom_mode = custom_mode;
packet.type = type;
packet.autopilot = autopilot;
packet.base_mode = base_mode;
packet.system_status = system_status;
packet.mavlink_version = 3;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HEARTBEAT;
return mavlink_finalize_message(msg, system_id, component_id, 9, 50);
}
 
/**
* @brief Pack a heartbeat message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Autopilot type / class. defined in MAV_AUTOPILOT ENUM
* @param base_mode System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
* @param custom_mode A bitfield for use for autopilot-specific flags.
* @param system_status System status flag, see MAV_STATE ENUM
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_heartbeat_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t type,uint8_t autopilot,uint8_t base_mode,uint32_t custom_mode,uint8_t system_status)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, type);
_mav_put_uint8_t(buf, 5, autopilot);
_mav_put_uint8_t(buf, 6, base_mode);
_mav_put_uint8_t(buf, 7, system_status);
_mav_put_uint8_t(buf, 8, 3);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_heartbeat_t packet;
packet.custom_mode = custom_mode;
packet.type = type;
packet.autopilot = autopilot;
packet.base_mode = base_mode;
packet.system_status = system_status;
packet.mavlink_version = 3;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HEARTBEAT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 9, 50);
}
 
/**
* @brief Encode a heartbeat struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param heartbeat C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_heartbeat_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_heartbeat_t* heartbeat)
{
return mavlink_msg_heartbeat_pack(system_id, component_id, msg, heartbeat->type, heartbeat->autopilot, heartbeat->base_mode, heartbeat->custom_mode, heartbeat->system_status);
}
 
/**
* @brief Send a heartbeat message
* @param chan MAVLink channel to send the message
*
* @param type Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
* @param autopilot Autopilot type / class. defined in MAV_AUTOPILOT ENUM
* @param base_mode System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
* @param custom_mode A bitfield for use for autopilot-specific flags.
* @param system_status System status flag, see MAV_STATE ENUM
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_heartbeat_send(mavlink_channel_t chan, uint8_t type, uint8_t autopilot, uint8_t base_mode, uint32_t custom_mode, uint8_t system_status)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, type);
_mav_put_uint8_t(buf, 5, autopilot);
_mav_put_uint8_t(buf, 6, base_mode);
_mav_put_uint8_t(buf, 7, system_status);
_mav_put_uint8_t(buf, 8, 3);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HEARTBEAT, buf, 9, 50);
#else
mavlink_heartbeat_t packet;
packet.custom_mode = custom_mode;
packet.type = type;
packet.autopilot = autopilot;
packet.base_mode = base_mode;
packet.system_status = system_status;
packet.mavlink_version = 3;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HEARTBEAT, (const char *)&packet, 9, 50);
#endif
}
 
#endif
 
// MESSAGE HEARTBEAT UNPACKING
 
 
/**
* @brief Get field type from heartbeat message
*
* @return Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)
*/
static inline uint8_t mavlink_msg_heartbeat_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field autopilot from heartbeat message
*
* @return Autopilot type / class. defined in MAV_AUTOPILOT ENUM
*/
static inline uint8_t mavlink_msg_heartbeat_get_autopilot(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field base_mode from heartbeat message
*
* @return System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
*/
static inline uint8_t mavlink_msg_heartbeat_get_base_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 6);
}
 
/**
* @brief Get field custom_mode from heartbeat message
*
* @return A bitfield for use for autopilot-specific flags.
*/
static inline uint32_t mavlink_msg_heartbeat_get_custom_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field system_status from heartbeat message
*
* @return System status flag, see MAV_STATE ENUM
*/
static inline uint8_t mavlink_msg_heartbeat_get_system_status(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 7);
}
 
/**
* @brief Get field mavlink_version from heartbeat message
*
* @return MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version
*/
static inline uint8_t mavlink_msg_heartbeat_get_mavlink_version(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Decode a heartbeat message into a struct
*
* @param msg The message to decode
* @param heartbeat C-struct to decode the message contents into
*/
static inline void mavlink_msg_heartbeat_decode(const mavlink_message_t* msg, mavlink_heartbeat_t* heartbeat)
{
#if MAVLINK_NEED_BYTE_SWAP
heartbeat->custom_mode = mavlink_msg_heartbeat_get_custom_mode(msg);
heartbeat->type = mavlink_msg_heartbeat_get_type(msg);
heartbeat->autopilot = mavlink_msg_heartbeat_get_autopilot(msg);
heartbeat->base_mode = mavlink_msg_heartbeat_get_base_mode(msg);
heartbeat->system_status = mavlink_msg_heartbeat_get_system_status(msg);
heartbeat->mavlink_version = mavlink_msg_heartbeat_get_mavlink_version(msg);
#else
memcpy(heartbeat, _MAV_PAYLOAD(msg), 9);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_hil_controls.h
0,0 → 1,364
// MESSAGE HIL_CONTROLS PACKING
 
#define MAVLINK_MSG_ID_HIL_CONTROLS 91
 
typedef struct __mavlink_hil_controls_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float roll_ailerons; ///< Control output -1 .. 1
float pitch_elevator; ///< Control output -1 .. 1
float yaw_rudder; ///< Control output -1 .. 1
float throttle; ///< Throttle 0 .. 1
float aux1; ///< Aux 1, -1 .. 1
float aux2; ///< Aux 2, -1 .. 1
float aux3; ///< Aux 3, -1 .. 1
float aux4; ///< Aux 4, -1 .. 1
uint8_t mode; ///< System mode (MAV_MODE)
uint8_t nav_mode; ///< Navigation mode (MAV_NAV_MODE)
} mavlink_hil_controls_t;
 
#define MAVLINK_MSG_ID_HIL_CONTROLS_LEN 42
#define MAVLINK_MSG_ID_91_LEN 42
 
 
 
#define MAVLINK_MESSAGE_INFO_HIL_CONTROLS { \
"HIL_CONTROLS", \
11, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_controls_t, time_usec) }, \
{ "roll_ailerons", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_controls_t, roll_ailerons) }, \
{ "pitch_elevator", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_controls_t, pitch_elevator) }, \
{ "yaw_rudder", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_controls_t, yaw_rudder) }, \
{ "throttle", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_controls_t, throttle) }, \
{ "aux1", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_controls_t, aux1) }, \
{ "aux2", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_controls_t, aux2) }, \
{ "aux3", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_hil_controls_t, aux3) }, \
{ "aux4", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_controls_t, aux4) }, \
{ "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_hil_controls_t, mode) }, \
{ "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_hil_controls_t, nav_mode) }, \
} \
}
 
 
/**
* @brief Pack a hil_controls message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -1 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param aux1 Aux 1, -1 .. 1
* @param aux2 Aux 2, -1 .. 1
* @param aux3 Aux 3, -1 .. 1
* @param aux4 Aux 4, -1 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_controls_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, float aux1, float aux2, float aux3, float aux4, uint8_t mode, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_float(buf, 24, aux1);
_mav_put_float(buf, 28, aux2);
_mav_put_float(buf, 32, aux3);
_mav_put_float(buf, 36, aux4);
_mav_put_uint8_t(buf, 40, mode);
_mav_put_uint8_t(buf, 41, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_hil_controls_t packet;
packet.time_usec = time_usec;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.aux1 = aux1;
packet.aux2 = aux2;
packet.aux3 = aux3;
packet.aux4 = aux4;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
return mavlink_finalize_message(msg, system_id, component_id, 42, 63);
}
 
/**
* @brief Pack a hil_controls message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -1 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param aux1 Aux 1, -1 .. 1
* @param aux2 Aux 2, -1 .. 1
* @param aux3 Aux 3, -1 .. 1
* @param aux4 Aux 4, -1 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_controls_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,float roll_ailerons,float pitch_elevator,float yaw_rudder,float throttle,float aux1,float aux2,float aux3,float aux4,uint8_t mode,uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_float(buf, 24, aux1);
_mav_put_float(buf, 28, aux2);
_mav_put_float(buf, 32, aux3);
_mav_put_float(buf, 36, aux4);
_mav_put_uint8_t(buf, 40, mode);
_mav_put_uint8_t(buf, 41, nav_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 42);
#else
mavlink_hil_controls_t packet;
packet.time_usec = time_usec;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.aux1 = aux1;
packet.aux2 = aux2;
packet.aux3 = aux3;
packet.aux4 = aux4;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 42);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 42, 63);
}
 
/**
* @brief Encode a hil_controls struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hil_controls C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hil_controls_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_controls_t* hil_controls)
{
return mavlink_msg_hil_controls_pack(system_id, component_id, msg, hil_controls->time_usec, hil_controls->roll_ailerons, hil_controls->pitch_elevator, hil_controls->yaw_rudder, hil_controls->throttle, hil_controls->aux1, hil_controls->aux2, hil_controls->aux3, hil_controls->aux4, hil_controls->mode, hil_controls->nav_mode);
}
 
/**
* @brief Send a hil_controls message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll_ailerons Control output -1 .. 1
* @param pitch_elevator Control output -1 .. 1
* @param yaw_rudder Control output -1 .. 1
* @param throttle Throttle 0 .. 1
* @param aux1 Aux 1, -1 .. 1
* @param aux2 Aux 2, -1 .. 1
* @param aux3 Aux 3, -1 .. 1
* @param aux4 Aux 4, -1 .. 1
* @param mode System mode (MAV_MODE)
* @param nav_mode Navigation mode (MAV_NAV_MODE)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hil_controls_send(mavlink_channel_t chan, uint64_t time_usec, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, float aux1, float aux2, float aux3, float aux4, uint8_t mode, uint8_t nav_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[42];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll_ailerons);
_mav_put_float(buf, 12, pitch_elevator);
_mav_put_float(buf, 16, yaw_rudder);
_mav_put_float(buf, 20, throttle);
_mav_put_float(buf, 24, aux1);
_mav_put_float(buf, 28, aux2);
_mav_put_float(buf, 32, aux3);
_mav_put_float(buf, 36, aux4);
_mav_put_uint8_t(buf, 40, mode);
_mav_put_uint8_t(buf, 41, nav_mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, buf, 42, 63);
#else
mavlink_hil_controls_t packet;
packet.time_usec = time_usec;
packet.roll_ailerons = roll_ailerons;
packet.pitch_elevator = pitch_elevator;
packet.yaw_rudder = yaw_rudder;
packet.throttle = throttle;
packet.aux1 = aux1;
packet.aux2 = aux2;
packet.aux3 = aux3;
packet.aux4 = aux4;
packet.mode = mode;
packet.nav_mode = nav_mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, (const char *)&packet, 42, 63);
#endif
}
 
#endif
 
// MESSAGE HIL_CONTROLS UNPACKING
 
 
/**
* @brief Get field time_usec from hil_controls message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_hil_controls_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll_ailerons from hil_controls message
*
* @return Control output -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_roll_ailerons(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch_elevator from hil_controls message
*
* @return Control output -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_pitch_elevator(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw_rudder from hil_controls message
*
* @return Control output -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_yaw_rudder(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field throttle from hil_controls message
*
* @return Throttle 0 .. 1
*/
static inline float mavlink_msg_hil_controls_get_throttle(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field aux1 from hil_controls message
*
* @return Aux 1, -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_aux1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field aux2 from hil_controls message
*
* @return Aux 2, -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_aux2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field aux3 from hil_controls message
*
* @return Aux 3, -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_aux3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Get field aux4 from hil_controls message
*
* @return Aux 4, -1 .. 1
*/
static inline float mavlink_msg_hil_controls_get_aux4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 36);
}
 
/**
* @brief Get field mode from hil_controls message
*
* @return System mode (MAV_MODE)
*/
static inline uint8_t mavlink_msg_hil_controls_get_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 40);
}
 
/**
* @brief Get field nav_mode from hil_controls message
*
* @return Navigation mode (MAV_NAV_MODE)
*/
static inline uint8_t mavlink_msg_hil_controls_get_nav_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 41);
}
 
/**
* @brief Decode a hil_controls message into a struct
*
* @param msg The message to decode
* @param hil_controls C-struct to decode the message contents into
*/
static inline void mavlink_msg_hil_controls_decode(const mavlink_message_t* msg, mavlink_hil_controls_t* hil_controls)
{
#if MAVLINK_NEED_BYTE_SWAP
hil_controls->time_usec = mavlink_msg_hil_controls_get_time_usec(msg);
hil_controls->roll_ailerons = mavlink_msg_hil_controls_get_roll_ailerons(msg);
hil_controls->pitch_elevator = mavlink_msg_hil_controls_get_pitch_elevator(msg);
hil_controls->yaw_rudder = mavlink_msg_hil_controls_get_yaw_rudder(msg);
hil_controls->throttle = mavlink_msg_hil_controls_get_throttle(msg);
hil_controls->aux1 = mavlink_msg_hil_controls_get_aux1(msg);
hil_controls->aux2 = mavlink_msg_hil_controls_get_aux2(msg);
hil_controls->aux3 = mavlink_msg_hil_controls_get_aux3(msg);
hil_controls->aux4 = mavlink_msg_hil_controls_get_aux4(msg);
hil_controls->mode = mavlink_msg_hil_controls_get_mode(msg);
hil_controls->nav_mode = mavlink_msg_hil_controls_get_nav_mode(msg);
#else
memcpy(hil_controls, _MAV_PAYLOAD(msg), 42);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_hil_rc_inputs_raw.h
0,0 → 1,430
// MESSAGE HIL_RC_INPUTS_RAW PACKING
 
#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW 92
 
typedef struct __mavlink_hil_rc_inputs_raw_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
uint16_t chan1_raw; ///< RC channel 1 value, in microseconds
uint16_t chan2_raw; ///< RC channel 2 value, in microseconds
uint16_t chan3_raw; ///< RC channel 3 value, in microseconds
uint16_t chan4_raw; ///< RC channel 4 value, in microseconds
uint16_t chan5_raw; ///< RC channel 5 value, in microseconds
uint16_t chan6_raw; ///< RC channel 6 value, in microseconds
uint16_t chan7_raw; ///< RC channel 7 value, in microseconds
uint16_t chan8_raw; ///< RC channel 8 value, in microseconds
uint16_t chan9_raw; ///< RC channel 9 value, in microseconds
uint16_t chan10_raw; ///< RC channel 10 value, in microseconds
uint16_t chan11_raw; ///< RC channel 11 value, in microseconds
uint16_t chan12_raw; ///< RC channel 12 value, in microseconds
uint8_t rssi; ///< Receive signal strength indicator, 0: 0%, 255: 100%
} mavlink_hil_rc_inputs_raw_t;
 
#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN 33
#define MAVLINK_MSG_ID_92_LEN 33
 
 
 
#define MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW { \
"HIL_RC_INPUTS_RAW", \
14, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_rc_inputs_raw_t, time_usec) }, \
{ "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_hil_rc_inputs_raw_t, chan1_raw) }, \
{ "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_hil_rc_inputs_raw_t, chan2_raw) }, \
{ "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_hil_rc_inputs_raw_t, chan3_raw) }, \
{ "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_hil_rc_inputs_raw_t, chan4_raw) }, \
{ "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_hil_rc_inputs_raw_t, chan5_raw) }, \
{ "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_hil_rc_inputs_raw_t, chan6_raw) }, \
{ "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_hil_rc_inputs_raw_t, chan7_raw) }, \
{ "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_hil_rc_inputs_raw_t, chan8_raw) }, \
{ "chan9_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_hil_rc_inputs_raw_t, chan9_raw) }, \
{ "chan10_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_hil_rc_inputs_raw_t, chan10_raw) }, \
{ "chan11_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_hil_rc_inputs_raw_t, chan11_raw) }, \
{ "chan12_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_hil_rc_inputs_raw_t, chan12_raw) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_hil_rc_inputs_raw_t, rssi) }, \
} \
}
 
 
/**
* @brief Pack a hil_rc_inputs_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param chan9_raw RC channel 9 value, in microseconds
* @param chan10_raw RC channel 10 value, in microseconds
* @param chan11_raw RC channel 11 value, in microseconds
* @param chan12_raw RC channel 12 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint16_t chan9_raw, uint16_t chan10_raw, uint16_t chan11_raw, uint16_t chan12_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 8, chan1_raw);
_mav_put_uint16_t(buf, 10, chan2_raw);
_mav_put_uint16_t(buf, 12, chan3_raw);
_mav_put_uint16_t(buf, 14, chan4_raw);
_mav_put_uint16_t(buf, 16, chan5_raw);
_mav_put_uint16_t(buf, 18, chan6_raw);
_mav_put_uint16_t(buf, 20, chan7_raw);
_mav_put_uint16_t(buf, 22, chan8_raw);
_mav_put_uint16_t(buf, 24, chan9_raw);
_mav_put_uint16_t(buf, 26, chan10_raw);
_mav_put_uint16_t(buf, 28, chan11_raw);
_mav_put_uint16_t(buf, 30, chan12_raw);
_mav_put_uint8_t(buf, 32, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 33);
#else
mavlink_hil_rc_inputs_raw_t packet;
packet.time_usec = time_usec;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.chan9_raw = chan9_raw;
packet.chan10_raw = chan10_raw;
packet.chan11_raw = chan11_raw;
packet.chan12_raw = chan12_raw;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 33);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 33, 54);
}
 
/**
* @brief Pack a hil_rc_inputs_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param chan9_raw RC channel 9 value, in microseconds
* @param chan10_raw RC channel 10 value, in microseconds
* @param chan11_raw RC channel 11 value, in microseconds
* @param chan12_raw RC channel 12 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw,uint16_t chan9_raw,uint16_t chan10_raw,uint16_t chan11_raw,uint16_t chan12_raw,uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 8, chan1_raw);
_mav_put_uint16_t(buf, 10, chan2_raw);
_mav_put_uint16_t(buf, 12, chan3_raw);
_mav_put_uint16_t(buf, 14, chan4_raw);
_mav_put_uint16_t(buf, 16, chan5_raw);
_mav_put_uint16_t(buf, 18, chan6_raw);
_mav_put_uint16_t(buf, 20, chan7_raw);
_mav_put_uint16_t(buf, 22, chan8_raw);
_mav_put_uint16_t(buf, 24, chan9_raw);
_mav_put_uint16_t(buf, 26, chan10_raw);
_mav_put_uint16_t(buf, 28, chan11_raw);
_mav_put_uint16_t(buf, 30, chan12_raw);
_mav_put_uint8_t(buf, 32, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 33);
#else
mavlink_hil_rc_inputs_raw_t packet;
packet.time_usec = time_usec;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.chan9_raw = chan9_raw;
packet.chan10_raw = chan10_raw;
packet.chan11_raw = chan11_raw;
packet.chan12_raw = chan12_raw;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 33);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 33, 54);
}
 
/**
* @brief Encode a hil_rc_inputs_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hil_rc_inputs_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
{
return mavlink_msg_hil_rc_inputs_raw_pack(system_id, component_id, msg, hil_rc_inputs_raw->time_usec, hil_rc_inputs_raw->chan1_raw, hil_rc_inputs_raw->chan2_raw, hil_rc_inputs_raw->chan3_raw, hil_rc_inputs_raw->chan4_raw, hil_rc_inputs_raw->chan5_raw, hil_rc_inputs_raw->chan6_raw, hil_rc_inputs_raw->chan7_raw, hil_rc_inputs_raw->chan8_raw, hil_rc_inputs_raw->chan9_raw, hil_rc_inputs_raw->chan10_raw, hil_rc_inputs_raw->chan11_raw, hil_rc_inputs_raw->chan12_raw, hil_rc_inputs_raw->rssi);
}
 
/**
* @brief Send a hil_rc_inputs_raw message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param chan9_raw RC channel 9 value, in microseconds
* @param chan10_raw RC channel 10 value, in microseconds
* @param chan11_raw RC channel 11 value, in microseconds
* @param chan12_raw RC channel 12 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hil_rc_inputs_raw_send(mavlink_channel_t chan, uint64_t time_usec, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint16_t chan9_raw, uint16_t chan10_raw, uint16_t chan11_raw, uint16_t chan12_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[33];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 8, chan1_raw);
_mav_put_uint16_t(buf, 10, chan2_raw);
_mav_put_uint16_t(buf, 12, chan3_raw);
_mav_put_uint16_t(buf, 14, chan4_raw);
_mav_put_uint16_t(buf, 16, chan5_raw);
_mav_put_uint16_t(buf, 18, chan6_raw);
_mav_put_uint16_t(buf, 20, chan7_raw);
_mav_put_uint16_t(buf, 22, chan8_raw);
_mav_put_uint16_t(buf, 24, chan9_raw);
_mav_put_uint16_t(buf, 26, chan10_raw);
_mav_put_uint16_t(buf, 28, chan11_raw);
_mav_put_uint16_t(buf, 30, chan12_raw);
_mav_put_uint8_t(buf, 32, rssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, buf, 33, 54);
#else
mavlink_hil_rc_inputs_raw_t packet;
packet.time_usec = time_usec;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.chan9_raw = chan9_raw;
packet.chan10_raw = chan10_raw;
packet.chan11_raw = chan11_raw;
packet.chan12_raw = chan12_raw;
packet.rssi = rssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, (const char *)&packet, 33, 54);
#endif
}
 
#endif
 
// MESSAGE HIL_RC_INPUTS_RAW UNPACKING
 
 
/**
* @brief Get field time_usec from hil_rc_inputs_raw message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_hil_rc_inputs_raw_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field chan1_raw from hil_rc_inputs_raw message
*
* @return RC channel 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field chan2_raw from hil_rc_inputs_raw message
*
* @return RC channel 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field chan3_raw from hil_rc_inputs_raw message
*
* @return RC channel 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field chan4_raw from hil_rc_inputs_raw message
*
* @return RC channel 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field chan5_raw from hil_rc_inputs_raw message
*
* @return RC channel 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 16);
}
 
/**
* @brief Get field chan6_raw from hil_rc_inputs_raw message
*
* @return RC channel 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 18);
}
 
/**
* @brief Get field chan7_raw from hil_rc_inputs_raw message
*
* @return RC channel 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 20);
}
 
/**
* @brief Get field chan8_raw from hil_rc_inputs_raw message
*
* @return RC channel 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 22);
}
 
/**
* @brief Get field chan9_raw from hil_rc_inputs_raw message
*
* @return RC channel 9 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan9_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 24);
}
 
/**
* @brief Get field chan10_raw from hil_rc_inputs_raw message
*
* @return RC channel 10 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan10_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 26);
}
 
/**
* @brief Get field chan11_raw from hil_rc_inputs_raw message
*
* @return RC channel 11 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan11_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 28);
}
 
/**
* @brief Get field chan12_raw from hil_rc_inputs_raw message
*
* @return RC channel 12 value, in microseconds
*/
static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan12_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 30);
}
 
/**
* @brief Get field rssi from hil_rc_inputs_raw message
*
* @return Receive signal strength indicator, 0: 0%, 255: 100%
*/
static inline uint8_t mavlink_msg_hil_rc_inputs_raw_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 32);
}
 
/**
* @brief Decode a hil_rc_inputs_raw message into a struct
*
* @param msg The message to decode
* @param hil_rc_inputs_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_hil_rc_inputs_raw_decode(const mavlink_message_t* msg, mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
hil_rc_inputs_raw->time_usec = mavlink_msg_hil_rc_inputs_raw_get_time_usec(msg);
hil_rc_inputs_raw->chan1_raw = mavlink_msg_hil_rc_inputs_raw_get_chan1_raw(msg);
hil_rc_inputs_raw->chan2_raw = mavlink_msg_hil_rc_inputs_raw_get_chan2_raw(msg);
hil_rc_inputs_raw->chan3_raw = mavlink_msg_hil_rc_inputs_raw_get_chan3_raw(msg);
hil_rc_inputs_raw->chan4_raw = mavlink_msg_hil_rc_inputs_raw_get_chan4_raw(msg);
hil_rc_inputs_raw->chan5_raw = mavlink_msg_hil_rc_inputs_raw_get_chan5_raw(msg);
hil_rc_inputs_raw->chan6_raw = mavlink_msg_hil_rc_inputs_raw_get_chan6_raw(msg);
hil_rc_inputs_raw->chan7_raw = mavlink_msg_hil_rc_inputs_raw_get_chan7_raw(msg);
hil_rc_inputs_raw->chan8_raw = mavlink_msg_hil_rc_inputs_raw_get_chan8_raw(msg);
hil_rc_inputs_raw->chan9_raw = mavlink_msg_hil_rc_inputs_raw_get_chan9_raw(msg);
hil_rc_inputs_raw->chan10_raw = mavlink_msg_hil_rc_inputs_raw_get_chan10_raw(msg);
hil_rc_inputs_raw->chan11_raw = mavlink_msg_hil_rc_inputs_raw_get_chan11_raw(msg);
hil_rc_inputs_raw->chan12_raw = mavlink_msg_hil_rc_inputs_raw_get_chan12_raw(msg);
hil_rc_inputs_raw->rssi = mavlink_msg_hil_rc_inputs_raw_get_rssi(msg);
#else
memcpy(hil_rc_inputs_raw, _MAV_PAYLOAD(msg), 33);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_hil_state.h
0,0 → 1,474
// MESSAGE HIL_STATE PACKING
 
#define MAVLINK_MSG_ID_HIL_STATE 90
 
typedef struct __mavlink_hil_state_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float roll; ///< Roll angle (rad)
float pitch; ///< Pitch angle (rad)
float yaw; ///< Yaw angle (rad)
float rollspeed; ///< Roll angular speed (rad/s)
float pitchspeed; ///< Pitch angular speed (rad/s)
float yawspeed; ///< Yaw angular speed (rad/s)
int32_t lat; ///< Latitude, expressed as * 1E7
int32_t lon; ///< Longitude, expressed as * 1E7
int32_t alt; ///< Altitude in meters, expressed as * 1000 (millimeters)
int16_t vx; ///< Ground X Speed (Latitude), expressed as m/s * 100
int16_t vy; ///< Ground Y Speed (Longitude), expressed as m/s * 100
int16_t vz; ///< Ground Z Speed (Altitude), expressed as m/s * 100
int16_t xacc; ///< X acceleration (mg)
int16_t yacc; ///< Y acceleration (mg)
int16_t zacc; ///< Z acceleration (mg)
} mavlink_hil_state_t;
 
#define MAVLINK_MSG_ID_HIL_STATE_LEN 56
#define MAVLINK_MSG_ID_90_LEN 56
 
 
 
#define MAVLINK_MESSAGE_INFO_HIL_STATE { \
"HIL_STATE", \
16, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_state_t, time_usec) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_state_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_state_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_state_t, yaw) }, \
{ "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_state_t, rollspeed) }, \
{ "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_state_t, pitchspeed) }, \
{ "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_state_t, yawspeed) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 32, offsetof(mavlink_hil_state_t, lat) }, \
{ "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 36, offsetof(mavlink_hil_state_t, lon) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 40, offsetof(mavlink_hil_state_t, alt) }, \
{ "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 44, offsetof(mavlink_hil_state_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 46, offsetof(mavlink_hil_state_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 48, offsetof(mavlink_hil_state_t, vz) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 50, offsetof(mavlink_hil_state_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 52, offsetof(mavlink_hil_state_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 54, offsetof(mavlink_hil_state_t, zacc) }, \
} \
}
 
 
/**
* @brief Pack a hil_state message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_state_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed, int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz, int16_t xacc, int16_t yacc, int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 56);
#else
mavlink_hil_state_t packet;
packet.time_usec = time_usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 56);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_STATE;
return mavlink_finalize_message(msg, system_id, component_id, 56, 183);
}
 
/**
* @brief Pack a hil_state message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_hil_state_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,float roll,float pitch,float yaw,float rollspeed,float pitchspeed,float yawspeed,int32_t lat,int32_t lon,int32_t alt,int16_t vx,int16_t vy,int16_t vz,int16_t xacc,int16_t yacc,int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 56);
#else
mavlink_hil_state_t packet;
packet.time_usec = time_usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 56);
#endif
 
msg->msgid = MAVLINK_MSG_ID_HIL_STATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 56, 183);
}
 
/**
* @brief Encode a hil_state struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param hil_state C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_hil_state_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_state_t* hil_state)
{
return mavlink_msg_hil_state_pack(system_id, component_id, msg, hil_state->time_usec, hil_state->roll, hil_state->pitch, hil_state->yaw, hil_state->rollspeed, hil_state->pitchspeed, hil_state->yawspeed, hil_state->lat, hil_state->lon, hil_state->alt, hil_state->vx, hil_state->vy, hil_state->vz, hil_state->xacc, hil_state->yacc, hil_state->zacc);
}
 
/**
* @brief Send a hil_state message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param roll Roll angle (rad)
* @param pitch Pitch angle (rad)
* @param yaw Yaw angle (rad)
* @param rollspeed Roll angular speed (rad/s)
* @param pitchspeed Pitch angular speed (rad/s)
* @param yawspeed Yaw angular speed (rad/s)
* @param lat Latitude, expressed as * 1E7
* @param lon Longitude, expressed as * 1E7
* @param alt Altitude in meters, expressed as * 1000 (millimeters)
* @param vx Ground X Speed (Latitude), expressed as m/s * 100
* @param vy Ground Y Speed (Longitude), expressed as m/s * 100
* @param vz Ground Z Speed (Altitude), expressed as m/s * 100
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_hil_state_send(mavlink_channel_t chan, uint64_t time_usec, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed, int32_t lat, int32_t lon, int32_t alt, int16_t vx, int16_t vy, int16_t vz, int16_t xacc, int16_t yacc, int16_t zacc)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[56];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, roll);
_mav_put_float(buf, 12, pitch);
_mav_put_float(buf, 16, yaw);
_mav_put_float(buf, 20, rollspeed);
_mav_put_float(buf, 24, pitchspeed);
_mav_put_float(buf, 28, yawspeed);
_mav_put_int32_t(buf, 32, lat);
_mav_put_int32_t(buf, 36, lon);
_mav_put_int32_t(buf, 40, alt);
_mav_put_int16_t(buf, 44, vx);
_mav_put_int16_t(buf, 46, vy);
_mav_put_int16_t(buf, 48, vz);
_mav_put_int16_t(buf, 50, xacc);
_mav_put_int16_t(buf, 52, yacc);
_mav_put_int16_t(buf, 54, zacc);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_STATE, buf, 56, 183);
#else
mavlink_hil_state_t packet;
packet.time_usec = time_usec;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.rollspeed = rollspeed;
packet.pitchspeed = pitchspeed;
packet.yawspeed = yawspeed;
packet.lat = lat;
packet.lon = lon;
packet.alt = alt;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_STATE, (const char *)&packet, 56, 183);
#endif
}
 
#endif
 
// MESSAGE HIL_STATE UNPACKING
 
 
/**
* @brief Get field time_usec from hil_state message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_hil_state_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field roll from hil_state message
*
* @return Roll angle (rad)
*/
static inline float mavlink_msg_hil_state_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field pitch from hil_state message
*
* @return Pitch angle (rad)
*/
static inline float mavlink_msg_hil_state_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field yaw from hil_state message
*
* @return Yaw angle (rad)
*/
static inline float mavlink_msg_hil_state_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field rollspeed from hil_state message
*
* @return Roll angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_rollspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitchspeed from hil_state message
*
* @return Pitch angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_pitchspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yawspeed from hil_state message
*
* @return Yaw angular speed (rad/s)
*/
static inline float mavlink_msg_hil_state_get_yawspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field lat from hil_state message
*
* @return Latitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_hil_state_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 32);
}
 
/**
* @brief Get field lon from hil_state message
*
* @return Longitude, expressed as * 1E7
*/
static inline int32_t mavlink_msg_hil_state_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 36);
}
 
/**
* @brief Get field alt from hil_state message
*
* @return Altitude in meters, expressed as * 1000 (millimeters)
*/
static inline int32_t mavlink_msg_hil_state_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 40);
}
 
/**
* @brief Get field vx from hil_state message
*
* @return Ground X Speed (Latitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 44);
}
 
/**
* @brief Get field vy from hil_state message
*
* @return Ground Y Speed (Longitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 46);
}
 
/**
* @brief Get field vz from hil_state message
*
* @return Ground Z Speed (Altitude), expressed as m/s * 100
*/
static inline int16_t mavlink_msg_hil_state_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 48);
}
 
/**
* @brief Get field xacc from hil_state message
*
* @return X acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 50);
}
 
/**
* @brief Get field yacc from hil_state message
*
* @return Y acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 52);
}
 
/**
* @brief Get field zacc from hil_state message
*
* @return Z acceleration (mg)
*/
static inline int16_t mavlink_msg_hil_state_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 54);
}
 
/**
* @brief Decode a hil_state message into a struct
*
* @param msg The message to decode
* @param hil_state C-struct to decode the message contents into
*/
static inline void mavlink_msg_hil_state_decode(const mavlink_message_t* msg, mavlink_hil_state_t* hil_state)
{
#if MAVLINK_NEED_BYTE_SWAP
hil_state->time_usec = mavlink_msg_hil_state_get_time_usec(msg);
hil_state->roll = mavlink_msg_hil_state_get_roll(msg);
hil_state->pitch = mavlink_msg_hil_state_get_pitch(msg);
hil_state->yaw = mavlink_msg_hil_state_get_yaw(msg);
hil_state->rollspeed = mavlink_msg_hil_state_get_rollspeed(msg);
hil_state->pitchspeed = mavlink_msg_hil_state_get_pitchspeed(msg);
hil_state->yawspeed = mavlink_msg_hil_state_get_yawspeed(msg);
hil_state->lat = mavlink_msg_hil_state_get_lat(msg);
hil_state->lon = mavlink_msg_hil_state_get_lon(msg);
hil_state->alt = mavlink_msg_hil_state_get_alt(msg);
hil_state->vx = mavlink_msg_hil_state_get_vx(msg);
hil_state->vy = mavlink_msg_hil_state_get_vy(msg);
hil_state->vz = mavlink_msg_hil_state_get_vz(msg);
hil_state->xacc = mavlink_msg_hil_state_get_xacc(msg);
hil_state->yacc = mavlink_msg_hil_state_get_yacc(msg);
hil_state->zacc = mavlink_msg_hil_state_get_zacc(msg);
#else
memcpy(hil_state, _MAV_PAYLOAD(msg), 56);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_local_position_ned.h
0,0 → 1,276
// MESSAGE LOCAL_POSITION_NED PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_NED 32
 
typedef struct __mavlink_local_position_ned_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float x; ///< X Position
float y; ///< Y Position
float z; ///< Z Position
float vx; ///< X Speed
float vy; ///< Y Speed
float vz; ///< Z Speed
} mavlink_local_position_ned_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_NED_LEN 28
#define MAVLINK_MSG_ID_32_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED { \
"LOCAL_POSITION_NED", \
7, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_local_position_ned_t, time_boot_ms) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_local_position_ned_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_local_position_ned_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_local_position_ned_t, z) }, \
{ "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_local_position_ned_t, vx) }, \
{ "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_local_position_ned_t, vy) }, \
{ "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_local_position_ned_t, vz) }, \
} \
}
 
 
/**
* @brief Pack a local_position_ned message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_ned_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float x, float y, float z, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, vx);
_mav_put_float(buf, 20, vy);
_mav_put_float(buf, 24, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_local_position_ned_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_NED;
return mavlink_finalize_message(msg, system_id, component_id, 28, 185);
}
 
/**
* @brief Pack a local_position_ned message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_ned_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float x,float y,float z,float vx,float vy,float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, vx);
_mav_put_float(buf, 20, vy);
_mav_put_float(buf, 24, vz);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_local_position_ned_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_NED;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 185);
}
 
/**
* @brief Encode a local_position_ned struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position_ned C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_ned_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_ned_t* local_position_ned)
{
return mavlink_msg_local_position_ned_pack(system_id, component_id, msg, local_position_ned->time_boot_ms, local_position_ned->x, local_position_ned->y, local_position_ned->z, local_position_ned->vx, local_position_ned->vy, local_position_ned->vz);
}
 
/**
* @brief Send a local_position_ned message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param vx X Speed
* @param vy Y Speed
* @param vz Z Speed
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_ned_send(mavlink_channel_t chan, uint32_t time_boot_ms, float x, float y, float z, float vx, float vy, float vz)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, vx);
_mav_put_float(buf, 20, vy);
_mav_put_float(buf, 24, vz);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_NED, buf, 28, 185);
#else
mavlink_local_position_ned_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.vx = vx;
packet.vy = vy;
packet.vz = vz;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_NED, (const char *)&packet, 28, 185);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION_NED UNPACKING
 
 
/**
* @brief Get field time_boot_ms from local_position_ned message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_local_position_ned_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field x from local_position_ned message
*
* @return X Position
*/
static inline float mavlink_msg_local_position_ned_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field y from local_position_ned message
*
* @return Y Position
*/
static inline float mavlink_msg_local_position_ned_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field z from local_position_ned message
*
* @return Z Position
*/
static inline float mavlink_msg_local_position_ned_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field vx from local_position_ned message
*
* @return X Speed
*/
static inline float mavlink_msg_local_position_ned_get_vx(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field vy from local_position_ned message
*
* @return Y Speed
*/
static inline float mavlink_msg_local_position_ned_get_vy(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field vz from local_position_ned message
*
* @return Z Speed
*/
static inline float mavlink_msg_local_position_ned_get_vz(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a local_position_ned message into a struct
*
* @param msg The message to decode
* @param local_position_ned C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_ned_decode(const mavlink_message_t* msg, mavlink_local_position_ned_t* local_position_ned)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position_ned->time_boot_ms = mavlink_msg_local_position_ned_get_time_boot_ms(msg);
local_position_ned->x = mavlink_msg_local_position_ned_get_x(msg);
local_position_ned->y = mavlink_msg_local_position_ned_get_y(msg);
local_position_ned->z = mavlink_msg_local_position_ned_get_z(msg);
local_position_ned->vx = mavlink_msg_local_position_ned_get_vx(msg);
local_position_ned->vy = mavlink_msg_local_position_ned_get_vy(msg);
local_position_ned->vz = mavlink_msg_local_position_ned_get_vz(msg);
#else
memcpy(local_position_ned, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_local_position_ned_system_global_offset.h
0,0 → 1,276
// MESSAGE LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET 89
 
typedef struct __mavlink_local_position_ned_system_global_offset_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float x; ///< X Position
float y; ///< Y Position
float z; ///< Z Position
float roll; ///< Roll
float pitch; ///< Pitch
float yaw; ///< Yaw
} mavlink_local_position_ned_system_global_offset_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET_LEN 28
#define MAVLINK_MSG_ID_89_LEN 28
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET { \
"LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET", \
7, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_local_position_ned_system_global_offset_t, time_boot_ms) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_local_position_ned_system_global_offset_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_local_position_ned_system_global_offset_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_local_position_ned_system_global_offset_t, z) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_local_position_ned_system_global_offset_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_local_position_ned_system_global_offset_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_local_position_ned_system_global_offset_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a local_position_ned_system_global_offset message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param roll Roll
* @param pitch Pitch
* @param yaw Yaw
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_ned_system_global_offset_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, roll);
_mav_put_float(buf, 20, pitch);
_mav_put_float(buf, 24, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_local_position_ned_system_global_offset_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET;
return mavlink_finalize_message(msg, system_id, component_id, 28, 231);
}
 
/**
* @brief Pack a local_position_ned_system_global_offset message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param roll Roll
* @param pitch Pitch
* @param yaw Yaw
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_ned_system_global_offset_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float x,float y,float z,float roll,float pitch,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, roll);
_mav_put_float(buf, 20, pitch);
_mav_put_float(buf, 24, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 28);
#else
mavlink_local_position_ned_system_global_offset_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 28);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 28, 231);
}
 
/**
* @brief Encode a local_position_ned_system_global_offset struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position_ned_system_global_offset C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_ned_system_global_offset_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_ned_system_global_offset_t* local_position_ned_system_global_offset)
{
return mavlink_msg_local_position_ned_system_global_offset_pack(system_id, component_id, msg, local_position_ned_system_global_offset->time_boot_ms, local_position_ned_system_global_offset->x, local_position_ned_system_global_offset->y, local_position_ned_system_global_offset->z, local_position_ned_system_global_offset->roll, local_position_ned_system_global_offset->pitch, local_position_ned_system_global_offset->yaw);
}
 
/**
* @brief Send a local_position_ned_system_global_offset message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param x X Position
* @param y Y Position
* @param z Z Position
* @param roll Roll
* @param pitch Pitch
* @param yaw Yaw
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_ned_system_global_offset_send(mavlink_channel_t chan, uint32_t time_boot_ms, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[28];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, x);
_mav_put_float(buf, 8, y);
_mav_put_float(buf, 12, z);
_mav_put_float(buf, 16, roll);
_mav_put_float(buf, 20, pitch);
_mav_put_float(buf, 24, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, buf, 28, 231);
#else
mavlink_local_position_ned_system_global_offset_t packet;
packet.time_boot_ms = time_boot_ms;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, (const char *)&packet, 28, 231);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET UNPACKING
 
 
/**
* @brief Get field time_boot_ms from local_position_ned_system_global_offset message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_local_position_ned_system_global_offset_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field x from local_position_ned_system_global_offset message
*
* @return X Position
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field y from local_position_ned_system_global_offset message
*
* @return Y Position
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field z from local_position_ned_system_global_offset message
*
* @return Z Position
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field roll from local_position_ned_system_global_offset message
*
* @return Roll
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field pitch from local_position_ned_system_global_offset message
*
* @return Pitch
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field yaw from local_position_ned_system_global_offset message
*
* @return Yaw
*/
static inline float mavlink_msg_local_position_ned_system_global_offset_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a local_position_ned_system_global_offset message into a struct
*
* @param msg The message to decode
* @param local_position_ned_system_global_offset C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_ned_system_global_offset_decode(const mavlink_message_t* msg, mavlink_local_position_ned_system_global_offset_t* local_position_ned_system_global_offset)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position_ned_system_global_offset->time_boot_ms = mavlink_msg_local_position_ned_system_global_offset_get_time_boot_ms(msg);
local_position_ned_system_global_offset->x = mavlink_msg_local_position_ned_system_global_offset_get_x(msg);
local_position_ned_system_global_offset->y = mavlink_msg_local_position_ned_system_global_offset_get_y(msg);
local_position_ned_system_global_offset->z = mavlink_msg_local_position_ned_system_global_offset_get_z(msg);
local_position_ned_system_global_offset->roll = mavlink_msg_local_position_ned_system_global_offset_get_roll(msg);
local_position_ned_system_global_offset->pitch = mavlink_msg_local_position_ned_system_global_offset_get_pitch(msg);
local_position_ned_system_global_offset->yaw = mavlink_msg_local_position_ned_system_global_offset_get_yaw(msg);
#else
memcpy(local_position_ned_system_global_offset, _MAV_PAYLOAD(msg), 28);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_local_position_setpoint.h
0,0 → 1,232
// MESSAGE LOCAL_POSITION_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT 51
 
typedef struct __mavlink_local_position_setpoint_t
{
float x; ///< x position
float y; ///< y position
float z; ///< z position
float yaw; ///< Desired yaw angle
uint8_t coordinate_frame; ///< Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
} mavlink_local_position_setpoint_t;
 
#define MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_LEN 17
#define MAVLINK_MSG_ID_51_LEN 17
 
 
 
#define MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT { \
"LOCAL_POSITION_SETPOINT", \
5, \
{ { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_local_position_setpoint_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_local_position_setpoint_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_local_position_setpoint_t, z) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_local_position_setpoint_t, yaw) }, \
{ "coordinate_frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_local_position_setpoint_t, coordinate_frame) }, \
} \
}
 
 
/**
* @brief Pack a local_position_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t coordinate_frame, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 17, 223);
}
 
/**
* @brief Pack a local_position_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_local_position_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t coordinate_frame,float x,float y,float z,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 17);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 17);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 17, 223);
}
 
/**
* @brief Encode a local_position_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param local_position_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_local_position_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_local_position_setpoint_t* local_position_setpoint)
{
return mavlink_msg_local_position_setpoint_pack(system_id, component_id, msg, local_position_setpoint->coordinate_frame, local_position_setpoint->x, local_position_setpoint->y, local_position_setpoint->z, local_position_setpoint->yaw);
}
 
/**
* @brief Send a local_position_setpoint message
* @param chan MAVLink channel to send the message
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_local_position_setpoint_send(mavlink_channel_t chan, uint8_t coordinate_frame, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[17];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, coordinate_frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT, buf, 17, 223);
#else
mavlink_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT, (const char *)&packet, 17, 223);
#endif
}
 
#endif
 
// MESSAGE LOCAL_POSITION_SETPOINT UNPACKING
 
 
/**
* @brief Get field coordinate_frame from local_position_setpoint message
*
* @return Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
*/
static inline uint8_t mavlink_msg_local_position_setpoint_get_coordinate_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field x from local_position_setpoint message
*
* @return x position
*/
static inline float mavlink_msg_local_position_setpoint_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field y from local_position_setpoint message
*
* @return y position
*/
static inline float mavlink_msg_local_position_setpoint_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field z from local_position_setpoint message
*
* @return z position
*/
static inline float mavlink_msg_local_position_setpoint_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from local_position_setpoint message
*
* @return Desired yaw angle
*/
static inline float mavlink_msg_local_position_setpoint_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a local_position_setpoint message into a struct
*
* @param msg The message to decode
* @param local_position_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_local_position_setpoint_decode(const mavlink_message_t* msg, mavlink_local_position_setpoint_t* local_position_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
local_position_setpoint->x = mavlink_msg_local_position_setpoint_get_x(msg);
local_position_setpoint->y = mavlink_msg_local_position_setpoint_get_y(msg);
local_position_setpoint->z = mavlink_msg_local_position_setpoint_get_z(msg);
local_position_setpoint->yaw = mavlink_msg_local_position_setpoint_get_yaw(msg);
local_position_setpoint->coordinate_frame = mavlink_msg_local_position_setpoint_get_coordinate_frame(msg);
#else
memcpy(local_position_setpoint, _MAV_PAYLOAD(msg), 17);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_manual_control.h
0,0 → 1,320
// MESSAGE MANUAL_CONTROL PACKING
 
#define MAVLINK_MSG_ID_MANUAL_CONTROL 69
 
typedef struct __mavlink_manual_control_t
{
float roll; ///< roll
float pitch; ///< pitch
float yaw; ///< yaw
float thrust; ///< thrust
uint8_t target; ///< The system to be controlled
uint8_t roll_manual; ///< roll control enabled auto:0, manual:1
uint8_t pitch_manual; ///< pitch auto:0, manual:1
uint8_t yaw_manual; ///< yaw auto:0, manual:1
uint8_t thrust_manual; ///< thrust auto:0, manual:1
} mavlink_manual_control_t;
 
#define MAVLINK_MSG_ID_MANUAL_CONTROL_LEN 21
#define MAVLINK_MSG_ID_69_LEN 21
 
 
 
#define MAVLINK_MESSAGE_INFO_MANUAL_CONTROL { \
"MANUAL_CONTROL", \
9, \
{ { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_manual_control_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_manual_control_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_manual_control_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_manual_control_t, thrust) }, \
{ "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_manual_control_t, target) }, \
{ "roll_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_manual_control_t, roll_manual) }, \
{ "pitch_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 18, offsetof(mavlink_manual_control_t, pitch_manual) }, \
{ "yaw_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 19, offsetof(mavlink_manual_control_t, yaw_manual) }, \
{ "thrust_manual", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_manual_control_t, thrust_manual) }, \
} \
}
 
 
/**
* @brief Pack a manual_control message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_manual_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, float roll, float pitch, float yaw, float thrust, uint8_t roll_manual, uint8_t pitch_manual, uint8_t yaw_manual, uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_manual_control_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target = target;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MANUAL_CONTROL;
return mavlink_finalize_message(msg, system_id, component_id, 21, 52);
}
 
/**
* @brief Pack a manual_control message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_manual_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,float roll,float pitch,float yaw,float thrust,uint8_t roll_manual,uint8_t pitch_manual,uint8_t yaw_manual,uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_manual_control_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target = target;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MANUAL_CONTROL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 21, 52);
}
 
/**
* @brief Encode a manual_control struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param manual_control C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_manual_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_manual_control_t* manual_control)
{
return mavlink_msg_manual_control_pack(system_id, component_id, msg, manual_control->target, manual_control->roll, manual_control->pitch, manual_control->yaw, manual_control->thrust, manual_control->roll_manual, manual_control->pitch_manual, manual_control->yaw_manual, manual_control->thrust_manual);
}
 
/**
* @brief Send a manual_control message
* @param chan MAVLink channel to send the message
*
* @param target The system to be controlled
* @param roll roll
* @param pitch pitch
* @param yaw yaw
* @param thrust thrust
* @param roll_manual roll control enabled auto:0, manual:1
* @param pitch_manual pitch auto:0, manual:1
* @param yaw_manual yaw auto:0, manual:1
* @param thrust_manual thrust auto:0, manual:1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_manual_control_send(mavlink_channel_t chan, uint8_t target, float roll, float pitch, float yaw, float thrust, uint8_t roll_manual, uint8_t pitch_manual, uint8_t yaw_manual, uint8_t thrust_manual)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target);
_mav_put_uint8_t(buf, 17, roll_manual);
_mav_put_uint8_t(buf, 18, pitch_manual);
_mav_put_uint8_t(buf, 19, yaw_manual);
_mav_put_uint8_t(buf, 20, thrust_manual);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MANUAL_CONTROL, buf, 21, 52);
#else
mavlink_manual_control_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target = target;
packet.roll_manual = roll_manual;
packet.pitch_manual = pitch_manual;
packet.yaw_manual = yaw_manual;
packet.thrust_manual = thrust_manual;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MANUAL_CONTROL, (const char *)&packet, 21, 52);
#endif
}
 
#endif
 
// MESSAGE MANUAL_CONTROL UNPACKING
 
 
/**
* @brief Get field target from manual_control message
*
* @return The system to be controlled
*/
static inline uint8_t mavlink_msg_manual_control_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field roll from manual_control message
*
* @return roll
*/
static inline float mavlink_msg_manual_control_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field pitch from manual_control message
*
* @return pitch
*/
static inline float mavlink_msg_manual_control_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field yaw from manual_control message
*
* @return yaw
*/
static inline float mavlink_msg_manual_control_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field thrust from manual_control message
*
* @return thrust
*/
static inline float mavlink_msg_manual_control_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field roll_manual from manual_control message
*
* @return roll control enabled auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_roll_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field pitch_manual from manual_control message
*
* @return pitch auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_pitch_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 18);
}
 
/**
* @brief Get field yaw_manual from manual_control message
*
* @return yaw auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_yaw_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 19);
}
 
/**
* @brief Get field thrust_manual from manual_control message
*
* @return thrust auto:0, manual:1
*/
static inline uint8_t mavlink_msg_manual_control_get_thrust_manual(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 20);
}
 
/**
* @brief Decode a manual_control message into a struct
*
* @param msg The message to decode
* @param manual_control C-struct to decode the message contents into
*/
static inline void mavlink_msg_manual_control_decode(const mavlink_message_t* msg, mavlink_manual_control_t* manual_control)
{
#if MAVLINK_NEED_BYTE_SWAP
manual_control->roll = mavlink_msg_manual_control_get_roll(msg);
manual_control->pitch = mavlink_msg_manual_control_get_pitch(msg);
manual_control->yaw = mavlink_msg_manual_control_get_yaw(msg);
manual_control->thrust = mavlink_msg_manual_control_get_thrust(msg);
manual_control->target = mavlink_msg_manual_control_get_target(msg);
manual_control->roll_manual = mavlink_msg_manual_control_get_roll_manual(msg);
manual_control->pitch_manual = mavlink_msg_manual_control_get_pitch_manual(msg);
manual_control->yaw_manual = mavlink_msg_manual_control_get_yaw_manual(msg);
manual_control->thrust_manual = mavlink_msg_manual_control_get_thrust_manual(msg);
#else
memcpy(manual_control, _MAV_PAYLOAD(msg), 21);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_memory_vect.h
0,0 → 1,204
// MESSAGE MEMORY_VECT PACKING
 
#define MAVLINK_MSG_ID_MEMORY_VECT 249
 
typedef struct __mavlink_memory_vect_t
{
uint16_t address; ///< Starting address of the debug variables
uint8_t ver; ///< Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below
uint8_t type; ///< Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14
int8_t value[32]; ///< Memory contents at specified address
} mavlink_memory_vect_t;
 
#define MAVLINK_MSG_ID_MEMORY_VECT_LEN 36
#define MAVLINK_MSG_ID_249_LEN 36
 
#define MAVLINK_MSG_MEMORY_VECT_FIELD_VALUE_LEN 32
 
#define MAVLINK_MESSAGE_INFO_MEMORY_VECT { \
"MEMORY_VECT", \
4, \
{ { "address", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_memory_vect_t, address) }, \
{ "ver", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_memory_vect_t, ver) }, \
{ "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_memory_vect_t, type) }, \
{ "value", NULL, MAVLINK_TYPE_INT8_T, 32, 4, offsetof(mavlink_memory_vect_t, value) }, \
} \
}
 
 
/**
* @brief Pack a memory_vect message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param address Starting address of the debug variables
* @param ver Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below
* @param type Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14
* @param value Memory contents at specified address
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_memory_vect_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t address, uint8_t ver, uint8_t type, const int8_t *value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint16_t(buf, 0, address);
_mav_put_uint8_t(buf, 2, ver);
_mav_put_uint8_t(buf, 3, type);
_mav_put_int8_t_array(buf, 4, value, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_memory_vect_t packet;
packet.address = address;
packet.ver = ver;
packet.type = type;
mav_array_memcpy(packet.value, value, sizeof(int8_t)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMORY_VECT;
return mavlink_finalize_message(msg, system_id, component_id, 36, 204);
}
 
/**
* @brief Pack a memory_vect message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param address Starting address of the debug variables
* @param ver Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below
* @param type Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14
* @param value Memory contents at specified address
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_memory_vect_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t address,uint8_t ver,uint8_t type,const int8_t *value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint16_t(buf, 0, address);
_mav_put_uint8_t(buf, 2, ver);
_mav_put_uint8_t(buf, 3, type);
_mav_put_int8_t_array(buf, 4, value, 32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_memory_vect_t packet;
packet.address = address;
packet.ver = ver;
packet.type = type;
mav_array_memcpy(packet.value, value, sizeof(int8_t)*32);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MEMORY_VECT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36, 204);
}
 
/**
* @brief Encode a memory_vect struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param memory_vect C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_memory_vect_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_memory_vect_t* memory_vect)
{
return mavlink_msg_memory_vect_pack(system_id, component_id, msg, memory_vect->address, memory_vect->ver, memory_vect->type, memory_vect->value);
}
 
/**
* @brief Send a memory_vect message
* @param chan MAVLink channel to send the message
*
* @param address Starting address of the debug variables
* @param ver Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below
* @param type Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14
* @param value Memory contents at specified address
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_memory_vect_send(mavlink_channel_t chan, uint16_t address, uint8_t ver, uint8_t type, const int8_t *value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_uint16_t(buf, 0, address);
_mav_put_uint8_t(buf, 2, ver);
_mav_put_uint8_t(buf, 3, type);
_mav_put_int8_t_array(buf, 4, value, 32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMORY_VECT, buf, 36, 204);
#else
mavlink_memory_vect_t packet;
packet.address = address;
packet.ver = ver;
packet.type = type;
mav_array_memcpy(packet.value, value, sizeof(int8_t)*32);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MEMORY_VECT, (const char *)&packet, 36, 204);
#endif
}
 
#endif
 
// MESSAGE MEMORY_VECT UNPACKING
 
 
/**
* @brief Get field address from memory_vect message
*
* @return Starting address of the debug variables
*/
static inline uint16_t mavlink_msg_memory_vect_get_address(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field ver from memory_vect message
*
* @return Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below
*/
static inline uint8_t mavlink_msg_memory_vect_get_ver(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field type from memory_vect message
*
* @return Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14
*/
static inline uint8_t mavlink_msg_memory_vect_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field value from memory_vect message
*
* @return Memory contents at specified address
*/
static inline uint16_t mavlink_msg_memory_vect_get_value(const mavlink_message_t* msg, int8_t *value)
{
return _MAV_RETURN_int8_t_array(msg, value, 32, 4);
}
 
/**
* @brief Decode a memory_vect message into a struct
*
* @param msg The message to decode
* @param memory_vect C-struct to decode the message contents into
*/
static inline void mavlink_msg_memory_vect_decode(const mavlink_message_t* msg, mavlink_memory_vect_t* memory_vect)
{
#if MAVLINK_NEED_BYTE_SWAP
memory_vect->address = mavlink_msg_memory_vect_get_address(msg);
memory_vect->ver = mavlink_msg_memory_vect_get_ver(msg);
memory_vect->type = mavlink_msg_memory_vect_get_type(msg);
mavlink_msg_memory_vect_get_value(msg, memory_vect->value);
#else
memcpy(memory_vect, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_ack.h
0,0 → 1,188
// MESSAGE MISSION_ACK PACKING
 
#define MAVLINK_MSG_ID_MISSION_ACK 47
 
typedef struct __mavlink_mission_ack_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t type; ///< See MAV_MISSION_RESULT enum
} mavlink_mission_ack_t;
 
#define MAVLINK_MSG_ID_MISSION_ACK_LEN 3
#define MAVLINK_MSG_ID_47_LEN 3
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_ACK { \
"MISSION_ACK", \
3, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mission_ack_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mission_ack_t, target_component) }, \
{ "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mission_ack_t, type) }, \
} \
}
 
 
/**
* @brief Pack a mission_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param type See MAV_MISSION_RESULT enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_mission_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 3, 153);
}
 
/**
* @brief Pack a mission_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param type See MAV_MISSION_RESULT enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 3);
#else
mavlink_mission_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 3);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 3, 153);
}
 
/**
* @brief Encode a mission_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_ack_t* mission_ack)
{
return mavlink_msg_mission_ack_pack(system_id, component_id, msg, mission_ack->target_system, mission_ack->target_component, mission_ack->type);
}
 
/**
* @brief Send a mission_ack message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param type See MAV_MISSION_RESULT enum
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_ack_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[3];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
_mav_put_uint8_t(buf, 2, type);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ACK, buf, 3, 153);
#else
mavlink_mission_ack_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
packet.type = type;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ACK, (const char *)&packet, 3, 153);
#endif
}
 
#endif
 
// MESSAGE MISSION_ACK UNPACKING
 
 
/**
* @brief Get field target_system from mission_ack message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_ack_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mission_ack message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_ack_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field type from mission_ack message
*
* @return See MAV_MISSION_RESULT enum
*/
static inline uint8_t mavlink_msg_mission_ack_get_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Decode a mission_ack message into a struct
*
* @param msg The message to decode
* @param mission_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_ack_decode(const mavlink_message_t* msg, mavlink_mission_ack_t* mission_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_ack->target_system = mavlink_msg_mission_ack_get_target_system(msg);
mission_ack->target_component = mavlink_msg_mission_ack_get_target_component(msg);
mission_ack->type = mavlink_msg_mission_ack_get_type(msg);
#else
memcpy(mission_ack, _MAV_PAYLOAD(msg), 3);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_clear_all.h
0,0 → 1,166
// MESSAGE MISSION_CLEAR_ALL PACKING
 
#define MAVLINK_MSG_ID_MISSION_CLEAR_ALL 45
 
typedef struct __mavlink_mission_clear_all_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_clear_all_t;
 
#define MAVLINK_MSG_ID_MISSION_CLEAR_ALL_LEN 2
#define MAVLINK_MSG_ID_45_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_CLEAR_ALL { \
"MISSION_CLEAR_ALL", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mission_clear_all_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mission_clear_all_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_clear_all message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_clear_all_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_CLEAR_ALL;
return mavlink_finalize_message(msg, system_id, component_id, 2, 232);
}
 
/**
* @brief Pack a mission_clear_all message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_clear_all_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_CLEAR_ALL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2, 232);
}
 
/**
* @brief Encode a mission_clear_all struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_clear_all C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_clear_all_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_clear_all_t* mission_clear_all)
{
return mavlink_msg_mission_clear_all_pack(system_id, component_id, msg, mission_clear_all->target_system, mission_clear_all->target_component);
}
 
/**
* @brief Send a mission_clear_all message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_clear_all_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_CLEAR_ALL, buf, 2, 232);
#else
mavlink_mission_clear_all_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_CLEAR_ALL, (const char *)&packet, 2, 232);
#endif
}
 
#endif
 
// MESSAGE MISSION_CLEAR_ALL UNPACKING
 
 
/**
* @brief Get field target_system from mission_clear_all message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_clear_all_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mission_clear_all message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_clear_all_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a mission_clear_all message into a struct
*
* @param msg The message to decode
* @param mission_clear_all C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_clear_all_decode(const mavlink_message_t* msg, mavlink_mission_clear_all_t* mission_clear_all)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_clear_all->target_system = mavlink_msg_mission_clear_all_get_target_system(msg);
mission_clear_all->target_component = mavlink_msg_mission_clear_all_get_target_component(msg);
#else
memcpy(mission_clear_all, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_count.h
0,0 → 1,188
// MESSAGE MISSION_COUNT PACKING
 
#define MAVLINK_MSG_ID_MISSION_COUNT 44
 
typedef struct __mavlink_mission_count_t
{
uint16_t count; ///< Number of mission items in the sequence
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_count_t;
 
#define MAVLINK_MSG_ID_MISSION_COUNT_LEN 4
#define MAVLINK_MSG_ID_44_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_COUNT { \
"MISSION_COUNT", \
3, \
{ { "count", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_mission_count_t, count) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mission_count_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_mission_count_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_count message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param count Number of mission items in the sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_count_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, count);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_count_t packet;
packet.count = count;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_COUNT;
return mavlink_finalize_message(msg, system_id, component_id, 4, 221);
}
 
/**
* @brief Pack a mission_count message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param count Number of mission items in the sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_count_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, count);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_count_t packet;
packet.count = count;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_COUNT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 221);
}
 
/**
* @brief Encode a mission_count struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_count C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_count_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_count_t* mission_count)
{
return mavlink_msg_mission_count_pack(system_id, component_id, msg, mission_count->target_system, mission_count->target_component, mission_count->count);
}
 
/**
* @brief Send a mission_count message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param count Number of mission items in the sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_count_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t count)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, count);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_COUNT, buf, 4, 221);
#else
mavlink_mission_count_t packet;
packet.count = count;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_COUNT, (const char *)&packet, 4, 221);
#endif
}
 
#endif
 
// MESSAGE MISSION_COUNT UNPACKING
 
 
/**
* @brief Get field target_system from mission_count message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_count_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field target_component from mission_count message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_count_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field count from mission_count message
*
* @return Number of mission items in the sequence
*/
static inline uint16_t mavlink_msg_mission_count_get_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a mission_count message into a struct
*
* @param msg The message to decode
* @param mission_count C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_count_decode(const mavlink_message_t* msg, mavlink_mission_count_t* mission_count)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_count->count = mavlink_msg_mission_count_get_count(msg);
mission_count->target_system = mavlink_msg_mission_count_get_target_system(msg);
mission_count->target_component = mavlink_msg_mission_count_get_target_component(msg);
#else
memcpy(mission_count, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_current.h
0,0 → 1,144
// MESSAGE MISSION_CURRENT PACKING
 
#define MAVLINK_MSG_ID_MISSION_CURRENT 42
 
typedef struct __mavlink_mission_current_t
{
uint16_t seq; ///< Sequence
} mavlink_mission_current_t;
 
#define MAVLINK_MSG_ID_MISSION_CURRENT_LEN 2
#define MAVLINK_MSG_ID_42_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_CURRENT { \
"MISSION_CURRENT", \
1, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_mission_current_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a mission_current message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_current_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_current_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_CURRENT;
return mavlink_finalize_message(msg, system_id, component_id, 2, 28);
}
 
/**
* @brief Pack a mission_current message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_current_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_current_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_CURRENT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2, 28);
}
 
/**
* @brief Encode a mission_current struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_current C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_current_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_current_t* mission_current)
{
return mavlink_msg_mission_current_pack(system_id, component_id, msg, mission_current->seq);
}
 
/**
* @brief Send a mission_current message
* @param chan MAVLink channel to send the message
*
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_current_send(mavlink_channel_t chan, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_CURRENT, buf, 2, 28);
#else
mavlink_mission_current_t packet;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_CURRENT, (const char *)&packet, 2, 28);
#endif
}
 
#endif
 
// MESSAGE MISSION_CURRENT UNPACKING
 
 
/**
* @brief Get field seq from mission_current message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_mission_current_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a mission_current message into a struct
*
* @param msg The message to decode
* @param mission_current C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_current_decode(const mavlink_message_t* msg, mavlink_mission_current_t* mission_current)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_current->seq = mavlink_msg_mission_current_get_seq(msg);
#else
memcpy(mission_current, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_item.h
0,0 → 1,430
// MESSAGE MISSION_ITEM PACKING
 
#define MAVLINK_MSG_ID_MISSION_ITEM 39
 
typedef struct __mavlink_mission_item_t
{
float param1; ///< PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters
float param2; ///< PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
float param3; ///< PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
float param4; ///< PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH
float x; ///< PARAM5 / local: x position, global: latitude
float y; ///< PARAM6 / y position: global: longitude
float z; ///< PARAM7 / z position: global: altitude
uint16_t seq; ///< Sequence
uint16_t command; ///< The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t frame; ///< The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h
uint8_t current; ///< false:0, true:1
uint8_t autocontinue; ///< autocontinue to next wp
} mavlink_mission_item_t;
 
#define MAVLINK_MSG_ID_MISSION_ITEM_LEN 37
#define MAVLINK_MSG_ID_39_LEN 37
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_ITEM { \
"MISSION_ITEM", \
14, \
{ { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_mission_item_t, param1) }, \
{ "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_mission_item_t, param2) }, \
{ "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_mission_item_t, param3) }, \
{ "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_mission_item_t, param4) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_mission_item_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_mission_item_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_mission_item_t, z) }, \
{ "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_mission_item_t, seq) }, \
{ "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_mission_item_t, command) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_mission_item_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_mission_item_t, target_component) }, \
{ "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_mission_item_t, frame) }, \
{ "current", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_mission_item_t, current) }, \
{ "autocontinue", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_mission_item_t, autocontinue) }, \
} \
}
 
 
/**
* @brief Pack a mission_item message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_item_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq, uint8_t frame, uint16_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, x);
_mav_put_float(buf, 20, y);
_mav_put_float(buf, 24, z);
_mav_put_uint16_t(buf, 28, seq);
_mav_put_uint16_t(buf, 30, command);
_mav_put_uint8_t(buf, 32, target_system);
_mav_put_uint8_t(buf, 33, target_component);
_mav_put_uint8_t(buf, 34, frame);
_mav_put_uint8_t(buf, 35, current);
_mav_put_uint8_t(buf, 36, autocontinue);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_mission_item_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
packet.seq = seq;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.current = current;
packet.autocontinue = autocontinue;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ITEM;
return mavlink_finalize_message(msg, system_id, component_id, 37, 254);
}
 
/**
* @brief Pack a mission_item message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_item_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq,uint8_t frame,uint16_t command,uint8_t current,uint8_t autocontinue,float param1,float param2,float param3,float param4,float x,float y,float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, x);
_mav_put_float(buf, 20, y);
_mav_put_float(buf, 24, z);
_mav_put_uint16_t(buf, 28, seq);
_mav_put_uint16_t(buf, 30, command);
_mav_put_uint8_t(buf, 32, target_system);
_mav_put_uint8_t(buf, 33, target_component);
_mav_put_uint8_t(buf, 34, frame);
_mav_put_uint8_t(buf, 35, current);
_mav_put_uint8_t(buf, 36, autocontinue);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 37);
#else
mavlink_mission_item_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
packet.seq = seq;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.current = current;
packet.autocontinue = autocontinue;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 37);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ITEM;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 37, 254);
}
 
/**
* @brief Encode a mission_item struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_item C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_item_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_item_t* mission_item)
{
return mavlink_msg_mission_item_pack(system_id, component_id, msg, mission_item->target_system, mission_item->target_component, mission_item->seq, mission_item->frame, mission_item->command, mission_item->current, mission_item->autocontinue, mission_item->param1, mission_item->param2, mission_item->param3, mission_item->param4, mission_item->x, mission_item->y, mission_item->z);
}
 
/**
* @brief Send a mission_item message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @param frame The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h
* @param command The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs
* @param current false:0, true:1
* @param autocontinue autocontinue to next wp
* @param param1 PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters
* @param param2 PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
* @param param3 PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
* @param param4 PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH
* @param x PARAM5 / local: x position, global: latitude
* @param y PARAM6 / y position: global: longitude
* @param z PARAM7 / z position: global: altitude
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_item_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq, uint8_t frame, uint16_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[37];
_mav_put_float(buf, 0, param1);
_mav_put_float(buf, 4, param2);
_mav_put_float(buf, 8, param3);
_mav_put_float(buf, 12, param4);
_mav_put_float(buf, 16, x);
_mav_put_float(buf, 20, y);
_mav_put_float(buf, 24, z);
_mav_put_uint16_t(buf, 28, seq);
_mav_put_uint16_t(buf, 30, command);
_mav_put_uint8_t(buf, 32, target_system);
_mav_put_uint8_t(buf, 33, target_component);
_mav_put_uint8_t(buf, 34, frame);
_mav_put_uint8_t(buf, 35, current);
_mav_put_uint8_t(buf, 36, autocontinue);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ITEM, buf, 37, 254);
#else
mavlink_mission_item_t packet;
packet.param1 = param1;
packet.param2 = param2;
packet.param3 = param3;
packet.param4 = param4;
packet.x = x;
packet.y = y;
packet.z = z;
packet.seq = seq;
packet.command = command;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
packet.current = current;
packet.autocontinue = autocontinue;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ITEM, (const char *)&packet, 37, 254);
#endif
}
 
#endif
 
// MESSAGE MISSION_ITEM UNPACKING
 
 
/**
* @brief Get field target_system from mission_item message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_item_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 32);
}
 
/**
* @brief Get field target_component from mission_item message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_item_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 33);
}
 
/**
* @brief Get field seq from mission_item message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_mission_item_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 28);
}
 
/**
* @brief Get field frame from mission_item message
*
* @return The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h
*/
static inline uint8_t mavlink_msg_mission_item_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 34);
}
 
/**
* @brief Get field command from mission_item message
*
* @return The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs
*/
static inline uint16_t mavlink_msg_mission_item_get_command(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 30);
}
 
/**
* @brief Get field current from mission_item message
*
* @return false:0, true:1
*/
static inline uint8_t mavlink_msg_mission_item_get_current(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 35);
}
 
/**
* @brief Get field autocontinue from mission_item message
*
* @return autocontinue to next wp
*/
static inline uint8_t mavlink_msg_mission_item_get_autocontinue(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 36);
}
 
/**
* @brief Get field param1 from mission_item message
*
* @return PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters
*/
static inline float mavlink_msg_mission_item_get_param1(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field param2 from mission_item message
*
* @return PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds
*/
static inline float mavlink_msg_mission_item_get_param2(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field param3 from mission_item message
*
* @return PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.
*/
static inline float mavlink_msg_mission_item_get_param3(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field param4 from mission_item message
*
* @return PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH
*/
static inline float mavlink_msg_mission_item_get_param4(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field x from mission_item message
*
* @return PARAM5 / local: x position, global: latitude
*/
static inline float mavlink_msg_mission_item_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field y from mission_item message
*
* @return PARAM6 / y position: global: longitude
*/
static inline float mavlink_msg_mission_item_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field z from mission_item message
*
* @return PARAM7 / z position: global: altitude
*/
static inline float mavlink_msg_mission_item_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Decode a mission_item message into a struct
*
* @param msg The message to decode
* @param mission_item C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_item_decode(const mavlink_message_t* msg, mavlink_mission_item_t* mission_item)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_item->param1 = mavlink_msg_mission_item_get_param1(msg);
mission_item->param2 = mavlink_msg_mission_item_get_param2(msg);
mission_item->param3 = mavlink_msg_mission_item_get_param3(msg);
mission_item->param4 = mavlink_msg_mission_item_get_param4(msg);
mission_item->x = mavlink_msg_mission_item_get_x(msg);
mission_item->y = mavlink_msg_mission_item_get_y(msg);
mission_item->z = mavlink_msg_mission_item_get_z(msg);
mission_item->seq = mavlink_msg_mission_item_get_seq(msg);
mission_item->command = mavlink_msg_mission_item_get_command(msg);
mission_item->target_system = mavlink_msg_mission_item_get_target_system(msg);
mission_item->target_component = mavlink_msg_mission_item_get_target_component(msg);
mission_item->frame = mavlink_msg_mission_item_get_frame(msg);
mission_item->current = mavlink_msg_mission_item_get_current(msg);
mission_item->autocontinue = mavlink_msg_mission_item_get_autocontinue(msg);
#else
memcpy(mission_item, _MAV_PAYLOAD(msg), 37);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_item_reached.h
0,0 → 1,144
// MESSAGE MISSION_ITEM_REACHED PACKING
 
#define MAVLINK_MSG_ID_MISSION_ITEM_REACHED 46
 
typedef struct __mavlink_mission_item_reached_t
{
uint16_t seq; ///< Sequence
} mavlink_mission_item_reached_t;
 
#define MAVLINK_MSG_ID_MISSION_ITEM_REACHED_LEN 2
#define MAVLINK_MSG_ID_46_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_ITEM_REACHED { \
"MISSION_ITEM_REACHED", \
1, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_mission_item_reached_t, seq) }, \
} \
}
 
 
/**
* @brief Pack a mission_item_reached message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_item_reached_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_item_reached_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ITEM_REACHED;
return mavlink_finalize_message(msg, system_id, component_id, 2, 11);
}
 
/**
* @brief Pack a mission_item_reached message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_item_reached_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_item_reached_t packet;
packet.seq = seq;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_ITEM_REACHED;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2, 11);
}
 
/**
* @brief Encode a mission_item_reached struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_item_reached C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_item_reached_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_item_reached_t* mission_item_reached)
{
return mavlink_msg_mission_item_reached_pack(system_id, component_id, msg, mission_item_reached->seq);
}
 
/**
* @brief Send a mission_item_reached message
* @param chan MAVLink channel to send the message
*
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_item_reached_send(mavlink_channel_t chan, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint16_t(buf, 0, seq);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ITEM_REACHED, buf, 2, 11);
#else
mavlink_mission_item_reached_t packet;
packet.seq = seq;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_ITEM_REACHED, (const char *)&packet, 2, 11);
#endif
}
 
#endif
 
// MESSAGE MISSION_ITEM_REACHED UNPACKING
 
 
/**
* @brief Get field seq from mission_item_reached message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_mission_item_reached_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a mission_item_reached message into a struct
*
* @param msg The message to decode
* @param mission_item_reached C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_item_reached_decode(const mavlink_message_t* msg, mavlink_mission_item_reached_t* mission_item_reached)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_item_reached->seq = mavlink_msg_mission_item_reached_get_seq(msg);
#else
memcpy(mission_item_reached, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_request.h
0,0 → 1,188
// MESSAGE MISSION_REQUEST PACKING
 
#define MAVLINK_MSG_ID_MISSION_REQUEST 40
 
typedef struct __mavlink_mission_request_t
{
uint16_t seq; ///< Sequence
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_request_t;
 
#define MAVLINK_MSG_ID_MISSION_REQUEST_LEN 4
#define MAVLINK_MSG_ID_40_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_REQUEST { \
"MISSION_REQUEST", \
3, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_mission_request_t, seq) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mission_request_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_mission_request_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_request message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_request_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST;
return mavlink_finalize_message(msg, system_id, component_id, 4, 230);
}
 
/**
* @brief Pack a mission_request message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_request_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 230);
}
 
/**
* @brief Encode a mission_request struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_request C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_request_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_request_t* mission_request)
{
return mavlink_msg_mission_request_pack(system_id, component_id, msg, mission_request->target_system, mission_request->target_component, mission_request->seq);
}
 
/**
* @brief Send a mission_request message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_request_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST, buf, 4, 230);
#else
mavlink_mission_request_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST, (const char *)&packet, 4, 230);
#endif
}
 
#endif
 
// MESSAGE MISSION_REQUEST UNPACKING
 
 
/**
* @brief Get field target_system from mission_request message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_request_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field target_component from mission_request message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_request_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field seq from mission_request message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_mission_request_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a mission_request message into a struct
*
* @param msg The message to decode
* @param mission_request C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_request_decode(const mavlink_message_t* msg, mavlink_mission_request_t* mission_request)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_request->seq = mavlink_msg_mission_request_get_seq(msg);
mission_request->target_system = mavlink_msg_mission_request_get_target_system(msg);
mission_request->target_component = mavlink_msg_mission_request_get_target_component(msg);
#else
memcpy(mission_request, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_request_list.h
0,0 → 1,166
// MESSAGE MISSION_REQUEST_LIST PACKING
 
#define MAVLINK_MSG_ID_MISSION_REQUEST_LIST 43
 
typedef struct __mavlink_mission_request_list_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_request_list_t;
 
#define MAVLINK_MSG_ID_MISSION_REQUEST_LIST_LEN 2
#define MAVLINK_MSG_ID_43_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_REQUEST_LIST { \
"MISSION_REQUEST_LIST", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_mission_request_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_mission_request_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_request_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 2, 132);
}
 
/**
* @brief Pack a mission_request_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_mission_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2, 132);
}
 
/**
* @brief Encode a mission_request_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_request_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_request_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_request_list_t* mission_request_list)
{
return mavlink_msg_mission_request_list_pack(system_id, component_id, msg, mission_request_list->target_system, mission_request_list->target_component);
}
 
/**
* @brief Send a mission_request_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_request_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST_LIST, buf, 2, 132);
#else
mavlink_mission_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST_LIST, (const char *)&packet, 2, 132);
#endif
}
 
#endif
 
// MESSAGE MISSION_REQUEST_LIST UNPACKING
 
 
/**
* @brief Get field target_system from mission_request_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_request_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from mission_request_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_request_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a mission_request_list message into a struct
*
* @param msg The message to decode
* @param mission_request_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_request_list_decode(const mavlink_message_t* msg, mavlink_mission_request_list_t* mission_request_list)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_request_list->target_system = mavlink_msg_mission_request_list_get_target_system(msg);
mission_request_list->target_component = mavlink_msg_mission_request_list_get_target_component(msg);
#else
memcpy(mission_request_list, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_request_partial_list.h
0,0 → 1,210
// MESSAGE MISSION_REQUEST_PARTIAL_LIST PACKING
 
#define MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST 37
 
typedef struct __mavlink_mission_request_partial_list_t
{
int16_t start_index; ///< Start index, 0 by default
int16_t end_index; ///< End index, -1 by default (-1: send list to end). Else a valid index of the list
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_request_partial_list_t;
 
#define MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST_LEN 6
#define MAVLINK_MSG_ID_37_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_REQUEST_PARTIAL_LIST { \
"MISSION_REQUEST_PARTIAL_LIST", \
4, \
{ { "start_index", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_mission_request_partial_list_t, start_index) }, \
{ "end_index", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_mission_request_partial_list_t, end_index) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_mission_request_partial_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_mission_request_partial_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_request_partial_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default
* @param end_index End index, -1 by default (-1: send list to end). Else a valid index of the list
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_partial_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int16_t start_index, int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mission_request_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 6, 212);
}
 
/**
* @brief Pack a mission_request_partial_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default
* @param end_index End index, -1 by default (-1: send list to end). Else a valid index of the list
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_request_partial_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int16_t start_index,int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mission_request_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6, 212);
}
 
/**
* @brief Encode a mission_request_partial_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_request_partial_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_request_partial_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_request_partial_list_t* mission_request_partial_list)
{
return mavlink_msg_mission_request_partial_list_pack(system_id, component_id, msg, mission_request_partial_list->target_system, mission_request_partial_list->target_component, mission_request_partial_list->start_index, mission_request_partial_list->end_index);
}
 
/**
* @brief Send a mission_request_partial_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default
* @param end_index End index, -1 by default (-1: send list to end). Else a valid index of the list
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_request_partial_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int16_t start_index, int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST, buf, 6, 212);
#else
mavlink_mission_request_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST, (const char *)&packet, 6, 212);
#endif
}
 
#endif
 
// MESSAGE MISSION_REQUEST_PARTIAL_LIST UNPACKING
 
 
/**
* @brief Get field target_system from mission_request_partial_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_request_partial_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field target_component from mission_request_partial_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_request_partial_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field start_index from mission_request_partial_list message
*
* @return Start index, 0 by default
*/
static inline int16_t mavlink_msg_mission_request_partial_list_get_start_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Get field end_index from mission_request_partial_list message
*
* @return End index, -1 by default (-1: send list to end). Else a valid index of the list
*/
static inline int16_t mavlink_msg_mission_request_partial_list_get_end_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Decode a mission_request_partial_list message into a struct
*
* @param msg The message to decode
* @param mission_request_partial_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_request_partial_list_decode(const mavlink_message_t* msg, mavlink_mission_request_partial_list_t* mission_request_partial_list)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_request_partial_list->start_index = mavlink_msg_mission_request_partial_list_get_start_index(msg);
mission_request_partial_list->end_index = mavlink_msg_mission_request_partial_list_get_end_index(msg);
mission_request_partial_list->target_system = mavlink_msg_mission_request_partial_list_get_target_system(msg);
mission_request_partial_list->target_component = mavlink_msg_mission_request_partial_list_get_target_component(msg);
#else
memcpy(mission_request_partial_list, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_set_current.h
0,0 → 1,188
// MESSAGE MISSION_SET_CURRENT PACKING
 
#define MAVLINK_MSG_ID_MISSION_SET_CURRENT 41
 
typedef struct __mavlink_mission_set_current_t
{
uint16_t seq; ///< Sequence
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_set_current_t;
 
#define MAVLINK_MSG_ID_MISSION_SET_CURRENT_LEN 4
#define MAVLINK_MSG_ID_41_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_SET_CURRENT { \
"MISSION_SET_CURRENT", \
3, \
{ { "seq", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_mission_set_current_t, seq) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_mission_set_current_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_mission_set_current_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_set_current message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_set_current_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_set_current_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_SET_CURRENT;
return mavlink_finalize_message(msg, system_id, component_id, 4, 28);
}
 
/**
* @brief Pack a mission_set_current message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_set_current_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_mission_set_current_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_SET_CURRENT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 28);
}
 
/**
* @brief Encode a mission_set_current struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_set_current C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_set_current_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_set_current_t* mission_set_current)
{
return mavlink_msg_mission_set_current_pack(system_id, component_id, msg, mission_set_current->target_system, mission_set_current->target_component, mission_set_current->seq);
}
 
/**
* @brief Send a mission_set_current message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param seq Sequence
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_set_current_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t seq)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint16_t(buf, 0, seq);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_SET_CURRENT, buf, 4, 28);
#else
mavlink_mission_set_current_t packet;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_SET_CURRENT, (const char *)&packet, 4, 28);
#endif
}
 
#endif
 
// MESSAGE MISSION_SET_CURRENT UNPACKING
 
 
/**
* @brief Get field target_system from mission_set_current message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_set_current_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field target_component from mission_set_current message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_set_current_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field seq from mission_set_current message
*
* @return Sequence
*/
static inline uint16_t mavlink_msg_mission_set_current_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Decode a mission_set_current message into a struct
*
* @param msg The message to decode
* @param mission_set_current C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_set_current_decode(const mavlink_message_t* msg, mavlink_mission_set_current_t* mission_set_current)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_set_current->seq = mavlink_msg_mission_set_current_get_seq(msg);
mission_set_current->target_system = mavlink_msg_mission_set_current_get_target_system(msg);
mission_set_current->target_component = mavlink_msg_mission_set_current_get_target_component(msg);
#else
memcpy(mission_set_current, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_mission_write_partial_list.h
0,0 → 1,210
// MESSAGE MISSION_WRITE_PARTIAL_LIST PACKING
 
#define MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST 38
 
typedef struct __mavlink_mission_write_partial_list_t
{
int16_t start_index; ///< Start index, 0 by default and smaller / equal to the largest index of the current onboard list.
int16_t end_index; ///< End index, equal or greater than start index.
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_mission_write_partial_list_t;
 
#define MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST_LEN 6
#define MAVLINK_MSG_ID_38_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_MISSION_WRITE_PARTIAL_LIST { \
"MISSION_WRITE_PARTIAL_LIST", \
4, \
{ { "start_index", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_mission_write_partial_list_t, start_index) }, \
{ "end_index", NULL, MAVLINK_TYPE_INT16_T, 0, 2, offsetof(mavlink_mission_write_partial_list_t, end_index) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_mission_write_partial_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_mission_write_partial_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a mission_write_partial_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default and smaller / equal to the largest index of the current onboard list.
* @param end_index End index, equal or greater than start index.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_write_partial_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, int16_t start_index, int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mission_write_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 6, 9);
}
 
/**
* @brief Pack a mission_write_partial_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default and smaller / equal to the largest index of the current onboard list.
* @param end_index End index, equal or greater than start index.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mission_write_partial_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,int16_t start_index,int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_mission_write_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6, 9);
}
 
/**
* @brief Encode a mission_write_partial_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param mission_write_partial_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mission_write_partial_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mission_write_partial_list_t* mission_write_partial_list)
{
return mavlink_msg_mission_write_partial_list_pack(system_id, component_id, msg, mission_write_partial_list->target_system, mission_write_partial_list->target_component, mission_write_partial_list->start_index, mission_write_partial_list->end_index);
}
 
/**
* @brief Send a mission_write_partial_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param start_index Start index, 0 by default and smaller / equal to the largest index of the current onboard list.
* @param end_index End index, equal or greater than start index.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_mission_write_partial_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, int16_t start_index, int16_t end_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_int16_t(buf, 0, start_index);
_mav_put_int16_t(buf, 2, end_index);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST, buf, 6, 9);
#else
mavlink_mission_write_partial_list_t packet;
packet.start_index = start_index;
packet.end_index = end_index;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST, (const char *)&packet, 6, 9);
#endif
}
 
#endif
 
// MESSAGE MISSION_WRITE_PARTIAL_LIST UNPACKING
 
 
/**
* @brief Get field target_system from mission_write_partial_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_mission_write_partial_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field target_component from mission_write_partial_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_mission_write_partial_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field start_index from mission_write_partial_list message
*
* @return Start index, 0 by default and smaller / equal to the largest index of the current onboard list.
*/
static inline int16_t mavlink_msg_mission_write_partial_list_get_start_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Get field end_index from mission_write_partial_list message
*
* @return End index, equal or greater than start index.
*/
static inline int16_t mavlink_msg_mission_write_partial_list_get_end_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 2);
}
 
/**
* @brief Decode a mission_write_partial_list message into a struct
*
* @param msg The message to decode
* @param mission_write_partial_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_mission_write_partial_list_decode(const mavlink_message_t* msg, mavlink_mission_write_partial_list_t* mission_write_partial_list)
{
#if MAVLINK_NEED_BYTE_SWAP
mission_write_partial_list->start_index = mavlink_msg_mission_write_partial_list_get_start_index(msg);
mission_write_partial_list->end_index = mavlink_msg_mission_write_partial_list_get_end_index(msg);
mission_write_partial_list->target_system = mavlink_msg_mission_write_partial_list_get_target_system(msg);
mission_write_partial_list->target_component = mavlink_msg_mission_write_partial_list_get_target_component(msg);
#else
memcpy(mission_write_partial_list, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_named_value_float.h
0,0 → 1,182
// MESSAGE NAMED_VALUE_FLOAT PACKING
 
#define MAVLINK_MSG_ID_NAMED_VALUE_FLOAT 251
 
typedef struct __mavlink_named_value_float_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
float value; ///< Floating point value
char name[10]; ///< Name of the debug variable
} mavlink_named_value_float_t;
 
#define MAVLINK_MSG_ID_NAMED_VALUE_FLOAT_LEN 18
#define MAVLINK_MSG_ID_251_LEN 18
 
#define MAVLINK_MSG_NAMED_VALUE_FLOAT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT { \
"NAMED_VALUE_FLOAT", \
3, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_named_value_float_t, time_boot_ms) }, \
{ "value", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_named_value_float_t, value) }, \
{ "name", NULL, MAVLINK_TYPE_CHAR, 10, 8, offsetof(mavlink_named_value_float_t, name) }, \
} \
}
 
 
/**
* @brief Pack a named_value_float message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Floating point value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_float_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, const char *name, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_named_value_float_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
return mavlink_finalize_message(msg, system_id, component_id, 18, 170);
}
 
/**
* @brief Pack a named_value_float message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Floating point value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_float_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,const char *name,float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_named_value_float_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18, 170);
}
 
/**
* @brief Encode a named_value_float struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param named_value_float C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_named_value_float_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_named_value_float_t* named_value_float)
{
return mavlink_msg_named_value_float_pack(system_id, component_id, msg, named_value_float->time_boot_ms, named_value_float->name, named_value_float->value);
}
 
/**
* @brief Send a named_value_float message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Floating point value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_named_value_float_send(mavlink_channel_t chan, uint32_t time_boot_ms, const char *name, float value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_FLOAT, buf, 18, 170);
#else
mavlink_named_value_float_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_FLOAT, (const char *)&packet, 18, 170);
#endif
}
 
#endif
 
// MESSAGE NAMED_VALUE_FLOAT UNPACKING
 
 
/**
* @brief Get field time_boot_ms from named_value_float message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_named_value_float_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field name from named_value_float message
*
* @return Name of the debug variable
*/
static inline uint16_t mavlink_msg_named_value_float_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 8);
}
 
/**
* @brief Get field value from named_value_float message
*
* @return Floating point value
*/
static inline float mavlink_msg_named_value_float_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Decode a named_value_float message into a struct
*
* @param msg The message to decode
* @param named_value_float C-struct to decode the message contents into
*/
static inline void mavlink_msg_named_value_float_decode(const mavlink_message_t* msg, mavlink_named_value_float_t* named_value_float)
{
#if MAVLINK_NEED_BYTE_SWAP
named_value_float->time_boot_ms = mavlink_msg_named_value_float_get_time_boot_ms(msg);
named_value_float->value = mavlink_msg_named_value_float_get_value(msg);
mavlink_msg_named_value_float_get_name(msg, named_value_float->name);
#else
memcpy(named_value_float, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_named_value_int.h
0,0 → 1,182
// MESSAGE NAMED_VALUE_INT PACKING
 
#define MAVLINK_MSG_ID_NAMED_VALUE_INT 252
 
typedef struct __mavlink_named_value_int_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int32_t value; ///< Signed integer value
char name[10]; ///< Name of the debug variable
} mavlink_named_value_int_t;
 
#define MAVLINK_MSG_ID_NAMED_VALUE_INT_LEN 18
#define MAVLINK_MSG_ID_252_LEN 18
 
#define MAVLINK_MSG_NAMED_VALUE_INT_FIELD_NAME_LEN 10
 
#define MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT { \
"NAMED_VALUE_INT", \
3, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_named_value_int_t, time_boot_ms) }, \
{ "value", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_named_value_int_t, value) }, \
{ "name", NULL, MAVLINK_TYPE_CHAR, 10, 8, offsetof(mavlink_named_value_int_t, name) }, \
} \
}
 
 
/**
* @brief Pack a named_value_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Signed integer value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, const char *name, int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_named_value_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_INT;
return mavlink_finalize_message(msg, system_id, component_id, 18, 44);
}
 
/**
* @brief Pack a named_value_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Signed integer value
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_named_value_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,const char *name,int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_named_value_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAMED_VALUE_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18, 44);
}
 
/**
* @brief Encode a named_value_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param named_value_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_named_value_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_named_value_int_t* named_value_int)
{
return mavlink_msg_named_value_int_pack(system_id, component_id, msg, named_value_int->time_boot_ms, named_value_int->name, named_value_int->value);
}
 
/**
* @brief Send a named_value_int message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param name Name of the debug variable
* @param value Signed integer value
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_named_value_int_send(mavlink_channel_t chan, uint32_t time_boot_ms, const char *name, int32_t value)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int32_t(buf, 4, value);
_mav_put_char_array(buf, 8, name, 10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_INT, buf, 18, 44);
#else
mavlink_named_value_int_t packet;
packet.time_boot_ms = time_boot_ms;
packet.value = value;
mav_array_memcpy(packet.name, name, sizeof(char)*10);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAMED_VALUE_INT, (const char *)&packet, 18, 44);
#endif
}
 
#endif
 
// MESSAGE NAMED_VALUE_INT UNPACKING
 
 
/**
* @brief Get field time_boot_ms from named_value_int message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_named_value_int_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field name from named_value_int message
*
* @return Name of the debug variable
*/
static inline uint16_t mavlink_msg_named_value_int_get_name(const mavlink_message_t* msg, char *name)
{
return _MAV_RETURN_char_array(msg, name, 10, 8);
}
 
/**
* @brief Get field value from named_value_int message
*
* @return Signed integer value
*/
static inline int32_t mavlink_msg_named_value_int_get_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Decode a named_value_int message into a struct
*
* @param msg The message to decode
* @param named_value_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_named_value_int_decode(const mavlink_message_t* msg, mavlink_named_value_int_t* named_value_int)
{
#if MAVLINK_NEED_BYTE_SWAP
named_value_int->time_boot_ms = mavlink_msg_named_value_int_get_time_boot_ms(msg);
named_value_int->value = mavlink_msg_named_value_int_get_value(msg);
mavlink_msg_named_value_int_get_name(msg, named_value_int->name);
#else
memcpy(named_value_int, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_nav_controller_output.h
0,0 → 1,298
// MESSAGE NAV_CONTROLLER_OUTPUT PACKING
 
#define MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT 62
 
typedef struct __mavlink_nav_controller_output_t
{
float nav_roll; ///< Current desired roll in degrees
float nav_pitch; ///< Current desired pitch in degrees
float alt_error; ///< Current altitude error in meters
float aspd_error; ///< Current airspeed error in meters/second
float xtrack_error; ///< Current crosstrack error on x-y plane in meters
int16_t nav_bearing; ///< Current desired heading in degrees
int16_t target_bearing; ///< Bearing to current MISSION/target in degrees
uint16_t wp_dist; ///< Distance to active MISSION in meters
} mavlink_nav_controller_output_t;
 
#define MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT_LEN 26
#define MAVLINK_MSG_ID_62_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT { \
"NAV_CONTROLLER_OUTPUT", \
8, \
{ { "nav_roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_nav_controller_output_t, nav_roll) }, \
{ "nav_pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_nav_controller_output_t, nav_pitch) }, \
{ "alt_error", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_nav_controller_output_t, alt_error) }, \
{ "aspd_error", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_nav_controller_output_t, aspd_error) }, \
{ "xtrack_error", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_nav_controller_output_t, xtrack_error) }, \
{ "nav_bearing", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_nav_controller_output_t, nav_bearing) }, \
{ "target_bearing", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_nav_controller_output_t, target_bearing) }, \
{ "wp_dist", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_nav_controller_output_t, wp_dist) }, \
} \
}
 
 
/**
* @brief Pack a nav_controller_output message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current MISSION/target in degrees
* @param wp_dist Distance to active MISSION in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_nav_controller_output_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float nav_roll, float nav_pitch, int16_t nav_bearing, int16_t target_bearing, uint16_t wp_dist, float alt_error, float aspd_error, float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_float(buf, 8, alt_error);
_mav_put_float(buf, 12, aspd_error);
_mav_put_float(buf, 16, xtrack_error);
_mav_put_int16_t(buf, 20, nav_bearing);
_mav_put_int16_t(buf, 22, target_bearing);
_mav_put_uint16_t(buf, 24, wp_dist);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT;
return mavlink_finalize_message(msg, system_id, component_id, 26, 183);
}
 
/**
* @brief Pack a nav_controller_output message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current MISSION/target in degrees
* @param wp_dist Distance to active MISSION in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_nav_controller_output_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float nav_roll,float nav_pitch,int16_t nav_bearing,int16_t target_bearing,uint16_t wp_dist,float alt_error,float aspd_error,float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_float(buf, 8, alt_error);
_mav_put_float(buf, 12, aspd_error);
_mav_put_float(buf, 16, xtrack_error);
_mav_put_int16_t(buf, 20, nav_bearing);
_mav_put_int16_t(buf, 22, target_bearing);
_mav_put_uint16_t(buf, 24, wp_dist);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26, 183);
}
 
/**
* @brief Encode a nav_controller_output struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param nav_controller_output C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_nav_controller_output_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_nav_controller_output_t* nav_controller_output)
{
return mavlink_msg_nav_controller_output_pack(system_id, component_id, msg, nav_controller_output->nav_roll, nav_controller_output->nav_pitch, nav_controller_output->nav_bearing, nav_controller_output->target_bearing, nav_controller_output->wp_dist, nav_controller_output->alt_error, nav_controller_output->aspd_error, nav_controller_output->xtrack_error);
}
 
/**
* @brief Send a nav_controller_output message
* @param chan MAVLink channel to send the message
*
* @param nav_roll Current desired roll in degrees
* @param nav_pitch Current desired pitch in degrees
* @param nav_bearing Current desired heading in degrees
* @param target_bearing Bearing to current MISSION/target in degrees
* @param wp_dist Distance to active MISSION in meters
* @param alt_error Current altitude error in meters
* @param aspd_error Current airspeed error in meters/second
* @param xtrack_error Current crosstrack error on x-y plane in meters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_nav_controller_output_send(mavlink_channel_t chan, float nav_roll, float nav_pitch, int16_t nav_bearing, int16_t target_bearing, uint16_t wp_dist, float alt_error, float aspd_error, float xtrack_error)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_float(buf, 0, nav_roll);
_mav_put_float(buf, 4, nav_pitch);
_mav_put_float(buf, 8, alt_error);
_mav_put_float(buf, 12, aspd_error);
_mav_put_float(buf, 16, xtrack_error);
_mav_put_int16_t(buf, 20, nav_bearing);
_mav_put_int16_t(buf, 22, target_bearing);
_mav_put_uint16_t(buf, 24, wp_dist);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT, buf, 26, 183);
#else
mavlink_nav_controller_output_t packet;
packet.nav_roll = nav_roll;
packet.nav_pitch = nav_pitch;
packet.alt_error = alt_error;
packet.aspd_error = aspd_error;
packet.xtrack_error = xtrack_error;
packet.nav_bearing = nav_bearing;
packet.target_bearing = target_bearing;
packet.wp_dist = wp_dist;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT, (const char *)&packet, 26, 183);
#endif
}
 
#endif
 
// MESSAGE NAV_CONTROLLER_OUTPUT UNPACKING
 
 
/**
* @brief Get field nav_roll from nav_controller_output message
*
* @return Current desired roll in degrees
*/
static inline float mavlink_msg_nav_controller_output_get_nav_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field nav_pitch from nav_controller_output message
*
* @return Current desired pitch in degrees
*/
static inline float mavlink_msg_nav_controller_output_get_nav_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field nav_bearing from nav_controller_output message
*
* @return Current desired heading in degrees
*/
static inline int16_t mavlink_msg_nav_controller_output_get_nav_bearing(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field target_bearing from nav_controller_output message
*
* @return Bearing to current MISSION/target in degrees
*/
static inline int16_t mavlink_msg_nav_controller_output_get_target_bearing(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field wp_dist from nav_controller_output message
*
* @return Distance to active MISSION in meters
*/
static inline uint16_t mavlink_msg_nav_controller_output_get_wp_dist(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 24);
}
 
/**
* @brief Get field alt_error from nav_controller_output message
*
* @return Current altitude error in meters
*/
static inline float mavlink_msg_nav_controller_output_get_alt_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field aspd_error from nav_controller_output message
*
* @return Current airspeed error in meters/second
*/
static inline float mavlink_msg_nav_controller_output_get_aspd_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field xtrack_error from nav_controller_output message
*
* @return Current crosstrack error on x-y plane in meters
*/
static inline float mavlink_msg_nav_controller_output_get_xtrack_error(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a nav_controller_output message into a struct
*
* @param msg The message to decode
* @param nav_controller_output C-struct to decode the message contents into
*/
static inline void mavlink_msg_nav_controller_output_decode(const mavlink_message_t* msg, mavlink_nav_controller_output_t* nav_controller_output)
{
#if MAVLINK_NEED_BYTE_SWAP
nav_controller_output->nav_roll = mavlink_msg_nav_controller_output_get_nav_roll(msg);
nav_controller_output->nav_pitch = mavlink_msg_nav_controller_output_get_nav_pitch(msg);
nav_controller_output->alt_error = mavlink_msg_nav_controller_output_get_alt_error(msg);
nav_controller_output->aspd_error = mavlink_msg_nav_controller_output_get_aspd_error(msg);
nav_controller_output->xtrack_error = mavlink_msg_nav_controller_output_get_xtrack_error(msg);
nav_controller_output->nav_bearing = mavlink_msg_nav_controller_output_get_nav_bearing(msg);
nav_controller_output->target_bearing = mavlink_msg_nav_controller_output_get_target_bearing(msg);
nav_controller_output->wp_dist = mavlink_msg_nav_controller_output_get_wp_dist(msg);
#else
memcpy(nav_controller_output, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_optical_flow.h
0,0 → 1,298
// MESSAGE OPTICAL_FLOW PACKING
 
#define MAVLINK_MSG_ID_OPTICAL_FLOW 100
 
typedef struct __mavlink_optical_flow_t
{
uint64_t time_usec; ///< Timestamp (UNIX)
float flow_comp_m_x; ///< Flow in meters in x-sensor direction, angular-speed compensated
float flow_comp_m_y; ///< Flow in meters in y-sensor direction, angular-speed compensated
float ground_distance; ///< Ground distance in meters. Positive value: distance known. Negative value: Unknown distance
int16_t flow_x; ///< Flow in pixels in x-sensor direction
int16_t flow_y; ///< Flow in pixels in y-sensor direction
uint8_t sensor_id; ///< Sensor ID
uint8_t quality; ///< Optical flow quality / confidence. 0: bad, 255: maximum quality
} mavlink_optical_flow_t;
 
#define MAVLINK_MSG_ID_OPTICAL_FLOW_LEN 26
#define MAVLINK_MSG_ID_100_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_OPTICAL_FLOW { \
"OPTICAL_FLOW", \
8, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_optical_flow_t, time_usec) }, \
{ "flow_comp_m_x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_optical_flow_t, flow_comp_m_x) }, \
{ "flow_comp_m_y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_optical_flow_t, flow_comp_m_y) }, \
{ "ground_distance", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_optical_flow_t, ground_distance) }, \
{ "flow_x", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_optical_flow_t, flow_x) }, \
{ "flow_y", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_optical_flow_t, flow_y) }, \
{ "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_optical_flow_t, sensor_id) }, \
{ "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 25, offsetof(mavlink_optical_flow_t, quality) }, \
} \
}
 
 
/**
* @brief Pack a optical_flow message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param flow_comp_m_x Flow in meters in x-sensor direction, angular-speed compensated
* @param flow_comp_m_y Flow in meters in y-sensor direction, angular-speed compensated
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters. Positive value: distance known. Negative value: Unknown distance
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_optical_flow_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, uint8_t sensor_id, int16_t flow_x, int16_t flow_y, float flow_comp_m_x, float flow_comp_m_y, uint8_t quality, float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, flow_comp_m_x);
_mav_put_float(buf, 12, flow_comp_m_y);
_mav_put_float(buf, 16, ground_distance);
_mav_put_int16_t(buf, 20, flow_x);
_mav_put_int16_t(buf, 22, flow_y);
_mav_put_uint8_t(buf, 24, sensor_id);
_mav_put_uint8_t(buf, 25, quality);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_optical_flow_t packet;
packet.time_usec = time_usec;
packet.flow_comp_m_x = flow_comp_m_x;
packet.flow_comp_m_y = flow_comp_m_y;
packet.ground_distance = ground_distance;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.sensor_id = sensor_id;
packet.quality = quality;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW;
return mavlink_finalize_message(msg, system_id, component_id, 26, 175);
}
 
/**
* @brief Pack a optical_flow message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param flow_comp_m_x Flow in meters in x-sensor direction, angular-speed compensated
* @param flow_comp_m_y Flow in meters in y-sensor direction, angular-speed compensated
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters. Positive value: distance known. Negative value: Unknown distance
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_optical_flow_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,uint8_t sensor_id,int16_t flow_x,int16_t flow_y,float flow_comp_m_x,float flow_comp_m_y,uint8_t quality,float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, flow_comp_m_x);
_mav_put_float(buf, 12, flow_comp_m_y);
_mav_put_float(buf, 16, ground_distance);
_mav_put_int16_t(buf, 20, flow_x);
_mav_put_int16_t(buf, 22, flow_y);
_mav_put_uint8_t(buf, 24, sensor_id);
_mav_put_uint8_t(buf, 25, quality);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_optical_flow_t packet;
packet.time_usec = time_usec;
packet.flow_comp_m_x = flow_comp_m_x;
packet.flow_comp_m_y = flow_comp_m_y;
packet.ground_distance = ground_distance;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.sensor_id = sensor_id;
packet.quality = quality;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26, 175);
}
 
/**
* @brief Encode a optical_flow struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param optical_flow C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_optical_flow_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_optical_flow_t* optical_flow)
{
return mavlink_msg_optical_flow_pack(system_id, component_id, msg, optical_flow->time_usec, optical_flow->sensor_id, optical_flow->flow_x, optical_flow->flow_y, optical_flow->flow_comp_m_x, optical_flow->flow_comp_m_y, optical_flow->quality, optical_flow->ground_distance);
}
 
/**
* @brief Send a optical_flow message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (UNIX)
* @param sensor_id Sensor ID
* @param flow_x Flow in pixels in x-sensor direction
* @param flow_y Flow in pixels in y-sensor direction
* @param flow_comp_m_x Flow in meters in x-sensor direction, angular-speed compensated
* @param flow_comp_m_y Flow in meters in y-sensor direction, angular-speed compensated
* @param quality Optical flow quality / confidence. 0: bad, 255: maximum quality
* @param ground_distance Ground distance in meters. Positive value: distance known. Negative value: Unknown distance
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_optical_flow_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t sensor_id, int16_t flow_x, int16_t flow_y, float flow_comp_m_x, float flow_comp_m_y, uint8_t quality, float ground_distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_float(buf, 8, flow_comp_m_x);
_mav_put_float(buf, 12, flow_comp_m_y);
_mav_put_float(buf, 16, ground_distance);
_mav_put_int16_t(buf, 20, flow_x);
_mav_put_int16_t(buf, 22, flow_y);
_mav_put_uint8_t(buf, 24, sensor_id);
_mav_put_uint8_t(buf, 25, quality);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW, buf, 26, 175);
#else
mavlink_optical_flow_t packet;
packet.time_usec = time_usec;
packet.flow_comp_m_x = flow_comp_m_x;
packet.flow_comp_m_y = flow_comp_m_y;
packet.ground_distance = ground_distance;
packet.flow_x = flow_x;
packet.flow_y = flow_y;
packet.sensor_id = sensor_id;
packet.quality = quality;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW, (const char *)&packet, 26, 175);
#endif
}
 
#endif
 
// MESSAGE OPTICAL_FLOW UNPACKING
 
 
/**
* @brief Get field time_usec from optical_flow message
*
* @return Timestamp (UNIX)
*/
static inline uint64_t mavlink_msg_optical_flow_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field sensor_id from optical_flow message
*
* @return Sensor ID
*/
static inline uint8_t mavlink_msg_optical_flow_get_sensor_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 24);
}
 
/**
* @brief Get field flow_x from optical_flow message
*
* @return Flow in pixels in x-sensor direction
*/
static inline int16_t mavlink_msg_optical_flow_get_flow_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field flow_y from optical_flow message
*
* @return Flow in pixels in y-sensor direction
*/
static inline int16_t mavlink_msg_optical_flow_get_flow_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field flow_comp_m_x from optical_flow message
*
* @return Flow in meters in x-sensor direction, angular-speed compensated
*/
static inline float mavlink_msg_optical_flow_get_flow_comp_m_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field flow_comp_m_y from optical_flow message
*
* @return Flow in meters in y-sensor direction, angular-speed compensated
*/
static inline float mavlink_msg_optical_flow_get_flow_comp_m_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field quality from optical_flow message
*
* @return Optical flow quality / confidence. 0: bad, 255: maximum quality
*/
static inline uint8_t mavlink_msg_optical_flow_get_quality(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 25);
}
 
/**
* @brief Get field ground_distance from optical_flow message
*
* @return Ground distance in meters. Positive value: distance known. Negative value: Unknown distance
*/
static inline float mavlink_msg_optical_flow_get_ground_distance(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a optical_flow message into a struct
*
* @param msg The message to decode
* @param optical_flow C-struct to decode the message contents into
*/
static inline void mavlink_msg_optical_flow_decode(const mavlink_message_t* msg, mavlink_optical_flow_t* optical_flow)
{
#if MAVLINK_NEED_BYTE_SWAP
optical_flow->time_usec = mavlink_msg_optical_flow_get_time_usec(msg);
optical_flow->flow_comp_m_x = mavlink_msg_optical_flow_get_flow_comp_m_x(msg);
optical_flow->flow_comp_m_y = mavlink_msg_optical_flow_get_flow_comp_m_y(msg);
optical_flow->ground_distance = mavlink_msg_optical_flow_get_ground_distance(msg);
optical_flow->flow_x = mavlink_msg_optical_flow_get_flow_x(msg);
optical_flow->flow_y = mavlink_msg_optical_flow_get_flow_y(msg);
optical_flow->sensor_id = mavlink_msg_optical_flow_get_sensor_id(msg);
optical_flow->quality = mavlink_msg_optical_flow_get_quality(msg);
#else
memcpy(optical_flow, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_param_request_list.h
0,0 → 1,166
// MESSAGE PARAM_REQUEST_LIST PACKING
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_LIST 21
 
typedef struct __mavlink_param_request_list_t
{
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_param_request_list_t;
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_LIST_LEN 2
#define MAVLINK_MSG_ID_21_LEN 2
 
 
 
#define MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST { \
"PARAM_REQUEST_LIST", \
2, \
{ { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_param_request_list_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_param_request_list_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a param_request_list message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_list_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_LIST;
return mavlink_finalize_message(msg, system_id, component_id, 2, 159);
}
 
/**
* @brief Pack a param_request_list message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_list_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 2);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 2);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_LIST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 2, 159);
}
 
/**
* @brief Encode a param_request_list struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_request_list C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_request_list_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_request_list_t* param_request_list)
{
return mavlink_msg_param_request_list_pack(system_id, component_id, msg, param_request_list->target_system, param_request_list->target_component);
}
 
/**
* @brief Send a param_request_list message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_request_list_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[2];
_mav_put_uint8_t(buf, 0, target_system);
_mav_put_uint8_t(buf, 1, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_LIST, buf, 2, 159);
#else
mavlink_param_request_list_t packet;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_LIST, (const char *)&packet, 2, 159);
#endif
}
 
#endif
 
// MESSAGE PARAM_REQUEST_LIST UNPACKING
 
 
/**
* @brief Get field target_system from param_request_list message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_request_list_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field target_component from param_request_list message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_request_list_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Decode a param_request_list message into a struct
*
* @param msg The message to decode
* @param param_request_list C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_request_list_decode(const mavlink_message_t* msg, mavlink_param_request_list_t* param_request_list)
{
#if MAVLINK_NEED_BYTE_SWAP
param_request_list->target_system = mavlink_msg_param_request_list_get_target_system(msg);
param_request_list->target_component = mavlink_msg_param_request_list_get_target_component(msg);
#else
memcpy(param_request_list, _MAV_PAYLOAD(msg), 2);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_param_request_read.h
0,0 → 1,204
// MESSAGE PARAM_REQUEST_READ PACKING
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_READ 20
 
typedef struct __mavlink_param_request_read_t
{
int16_t param_index; ///< Parameter index. Send -1 to use the param ID field as identifier
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
char param_id[16]; ///< Onboard parameter id
} mavlink_param_request_read_t;
 
#define MAVLINK_MSG_ID_PARAM_REQUEST_READ_LEN 20
#define MAVLINK_MSG_ID_20_LEN 20
 
#define MAVLINK_MSG_PARAM_REQUEST_READ_FIELD_PARAM_ID_LEN 16
 
#define MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ { \
"PARAM_REQUEST_READ", \
4, \
{ { "param_index", NULL, MAVLINK_TYPE_INT16_T, 0, 0, offsetof(mavlink_param_request_read_t, param_index) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_param_request_read_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_param_request_read_t, target_component) }, \
{ "param_id", NULL, MAVLINK_TYPE_CHAR, 16, 4, offsetof(mavlink_param_request_read_t, param_id) }, \
} \
}
 
 
/**
* @brief Pack a param_request_read message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_read_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, const char *param_id, int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_int16_t(buf, 0, param_index);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_char_array(buf, 4, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_param_request_read_t packet;
packet.param_index = param_index;
packet.target_system = target_system;
packet.target_component = target_component;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_READ;
return mavlink_finalize_message(msg, system_id, component_id, 20, 214);
}
 
/**
* @brief Pack a param_request_read message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_request_read_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,const char *param_id,int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_int16_t(buf, 0, param_index);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_char_array(buf, 4, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_param_request_read_t packet;
packet.param_index = param_index;
packet.target_system = target_system;
packet.target_component = target_component;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_REQUEST_READ;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 214);
}
 
/**
* @brief Encode a param_request_read struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_request_read C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_request_read_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_request_read_t* param_request_read)
{
return mavlink_msg_param_request_read_pack(system_id, component_id, msg, param_request_read->target_system, param_request_read->target_component, param_request_read->param_id, param_request_read->param_index);
}
 
/**
* @brief Send a param_request_read message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_index Parameter index. Send -1 to use the param ID field as identifier
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_request_read_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, const char *param_id, int16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_int16_t(buf, 0, param_index);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_char_array(buf, 4, param_id, 16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_READ, buf, 20, 214);
#else
mavlink_param_request_read_t packet;
packet.param_index = param_index;
packet.target_system = target_system;
packet.target_component = target_component;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_REQUEST_READ, (const char *)&packet, 20, 214);
#endif
}
 
#endif
 
// MESSAGE PARAM_REQUEST_READ UNPACKING
 
 
/**
* @brief Get field target_system from param_request_read message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_request_read_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field target_component from param_request_read message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_request_read_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field param_id from param_request_read message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_request_read_get_param_id(const mavlink_message_t* msg, char *param_id)
{
return _MAV_RETURN_char_array(msg, param_id, 16, 4);
}
 
/**
* @brief Get field param_index from param_request_read message
*
* @return Parameter index. Send -1 to use the param ID field as identifier
*/
static inline int16_t mavlink_msg_param_request_read_get_param_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 0);
}
 
/**
* @brief Decode a param_request_read message into a struct
*
* @param msg The message to decode
* @param param_request_read C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_request_read_decode(const mavlink_message_t* msg, mavlink_param_request_read_t* param_request_read)
{
#if MAVLINK_NEED_BYTE_SWAP
param_request_read->param_index = mavlink_msg_param_request_read_get_param_index(msg);
param_request_read->target_system = mavlink_msg_param_request_read_get_target_system(msg);
param_request_read->target_component = mavlink_msg_param_request_read_get_target_component(msg);
mavlink_msg_param_request_read_get_param_id(msg, param_request_read->param_id);
#else
memcpy(param_request_read, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_param_set.h
0,0 → 1,226
// MESSAGE PARAM_SET PACKING
 
#define MAVLINK_MSG_ID_PARAM_SET 23
 
typedef struct __mavlink_param_set_t
{
float param_value; ///< Onboard parameter value
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
char param_id[16]; ///< Onboard parameter id
uint8_t param_type; ///< Onboard parameter type: see MAV_VAR enum
} mavlink_param_set_t;
 
#define MAVLINK_MSG_ID_PARAM_SET_LEN 23
#define MAVLINK_MSG_ID_23_LEN 23
 
#define MAVLINK_MSG_PARAM_SET_FIELD_PARAM_ID_LEN 16
 
#define MAVLINK_MESSAGE_INFO_PARAM_SET { \
"PARAM_SET", \
5, \
{ { "param_value", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_param_set_t, param_value) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_param_set_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_param_set_t, target_component) }, \
{ "param_id", NULL, MAVLINK_TYPE_CHAR, 16, 6, offsetof(mavlink_param_set_t, param_id) }, \
{ "param_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 22, offsetof(mavlink_param_set_t, param_type) }, \
} \
}
 
 
/**
* @brief Pack a param_set message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_set_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, const char *param_id, float param_value, uint8_t param_type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 0, param_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 22, param_type);
_mav_put_char_array(buf, 6, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 23);
#else
mavlink_param_set_t packet;
packet.param_value = param_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 23);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_SET;
return mavlink_finalize_message(msg, system_id, component_id, 23, 168);
}
 
/**
* @brief Pack a param_set message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_set_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,const char *param_id,float param_value,uint8_t param_type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 0, param_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 22, param_type);
_mav_put_char_array(buf, 6, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 23);
#else
mavlink_param_set_t packet;
packet.param_value = param_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 23);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_SET;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 23, 168);
}
 
/**
* @brief Encode a param_set struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_set C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_set_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_set_t* param_set)
{
return mavlink_msg_param_set_pack(system_id, component_id, msg, param_set->target_system, param_set->target_component, param_set->param_id, param_set->param_value, param_set->param_type);
}
 
/**
* @brief Send a param_set message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_set_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, const char *param_id, float param_value, uint8_t param_type)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[23];
_mav_put_float(buf, 0, param_value);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, target_component);
_mav_put_uint8_t(buf, 22, param_type);
_mav_put_char_array(buf, 6, param_id, 16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_SET, buf, 23, 168);
#else
mavlink_param_set_t packet;
packet.param_value = param_value;
packet.target_system = target_system;
packet.target_component = target_component;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_SET, (const char *)&packet, 23, 168);
#endif
}
 
#endif
 
// MESSAGE PARAM_SET UNPACKING
 
 
/**
* @brief Get field target_system from param_set message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_param_set_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field target_component from param_set message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_param_set_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field param_id from param_set message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_set_get_param_id(const mavlink_message_t* msg, char *param_id)
{
return _MAV_RETURN_char_array(msg, param_id, 16, 6);
}
 
/**
* @brief Get field param_value from param_set message
*
* @return Onboard parameter value
*/
static inline float mavlink_msg_param_set_get_param_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field param_type from param_set message
*
* @return Onboard parameter type: see MAV_VAR enum
*/
static inline uint8_t mavlink_msg_param_set_get_param_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 22);
}
 
/**
* @brief Decode a param_set message into a struct
*
* @param msg The message to decode
* @param param_set C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_set_decode(const mavlink_message_t* msg, mavlink_param_set_t* param_set)
{
#if MAVLINK_NEED_BYTE_SWAP
param_set->param_value = mavlink_msg_param_set_get_param_value(msg);
param_set->target_system = mavlink_msg_param_set_get_target_system(msg);
param_set->target_component = mavlink_msg_param_set_get_target_component(msg);
mavlink_msg_param_set_get_param_id(msg, param_set->param_id);
param_set->param_type = mavlink_msg_param_set_get_param_type(msg);
#else
memcpy(param_set, _MAV_PAYLOAD(msg), 23);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_param_value.h
0,0 → 1,226
// MESSAGE PARAM_VALUE PACKING
 
#define MAVLINK_MSG_ID_PARAM_VALUE 22
 
typedef struct __mavlink_param_value_t
{
float param_value; ///< Onboard parameter value
uint16_t param_count; ///< Total number of onboard parameters
uint16_t param_index; ///< Index of this onboard parameter
char param_id[16]; ///< Onboard parameter id
uint8_t param_type; ///< Onboard parameter type: see MAV_VAR enum
} mavlink_param_value_t;
 
#define MAVLINK_MSG_ID_PARAM_VALUE_LEN 25
#define MAVLINK_MSG_ID_22_LEN 25
 
#define MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN 16
 
#define MAVLINK_MESSAGE_INFO_PARAM_VALUE { \
"PARAM_VALUE", \
5, \
{ { "param_value", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_param_value_t, param_value) }, \
{ "param_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_param_value_t, param_count) }, \
{ "param_index", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_param_value_t, param_index) }, \
{ "param_id", NULL, MAVLINK_TYPE_CHAR, 16, 8, offsetof(mavlink_param_value_t, param_id) }, \
{ "param_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_param_value_t, param_type) }, \
} \
}
 
 
/**
* @brief Pack a param_value message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_value_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const char *param_id, float param_value, uint8_t param_type, uint16_t param_count, uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, param_value);
_mav_put_uint16_t(buf, 4, param_count);
_mav_put_uint16_t(buf, 6, param_index);
_mav_put_uint8_t(buf, 24, param_type);
_mav_put_char_array(buf, 8, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_VALUE;
return mavlink_finalize_message(msg, system_id, component_id, 25, 220);
}
 
/**
* @brief Pack a param_value message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_param_value_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const char *param_id,float param_value,uint8_t param_type,uint16_t param_count,uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, param_value);
_mav_put_uint16_t(buf, 4, param_count);
_mav_put_uint16_t(buf, 6, param_index);
_mav_put_uint8_t(buf, 24, param_type);
_mav_put_char_array(buf, 8, param_id, 16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PARAM_VALUE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 25, 220);
}
 
/**
* @brief Encode a param_value struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param param_value C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_param_value_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_param_value_t* param_value)
{
return mavlink_msg_param_value_pack(system_id, component_id, msg, param_value->param_id, param_value->param_value, param_value->param_type, param_value->param_count, param_value->param_index);
}
 
/**
* @brief Send a param_value message
* @param chan MAVLink channel to send the message
*
* @param param_id Onboard parameter id
* @param param_value Onboard parameter value
* @param param_type Onboard parameter type: see MAV_VAR enum
* @param param_count Total number of onboard parameters
* @param param_index Index of this onboard parameter
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_param_value_send(mavlink_channel_t chan, const char *param_id, float param_value, uint8_t param_type, uint16_t param_count, uint16_t param_index)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, param_value);
_mav_put_uint16_t(buf, 4, param_count);
_mav_put_uint16_t(buf, 6, param_index);
_mav_put_uint8_t(buf, 24, param_type);
_mav_put_char_array(buf, 8, param_id, 16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_VALUE, buf, 25, 220);
#else
mavlink_param_value_t packet;
packet.param_value = param_value;
packet.param_count = param_count;
packet.param_index = param_index;
packet.param_type = param_type;
mav_array_memcpy(packet.param_id, param_id, sizeof(char)*16);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PARAM_VALUE, (const char *)&packet, 25, 220);
#endif
}
 
#endif
 
// MESSAGE PARAM_VALUE UNPACKING
 
 
/**
* @brief Get field param_id from param_value message
*
* @return Onboard parameter id
*/
static inline uint16_t mavlink_msg_param_value_get_param_id(const mavlink_message_t* msg, char *param_id)
{
return _MAV_RETURN_char_array(msg, param_id, 16, 8);
}
 
/**
* @brief Get field param_value from param_value message
*
* @return Onboard parameter value
*/
static inline float mavlink_msg_param_value_get_param_value(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field param_type from param_value message
*
* @return Onboard parameter type: see MAV_VAR enum
*/
static inline uint8_t mavlink_msg_param_value_get_param_type(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 24);
}
 
/**
* @brief Get field param_count from param_value message
*
* @return Total number of onboard parameters
*/
static inline uint16_t mavlink_msg_param_value_get_param_count(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field param_index from param_value message
*
* @return Index of this onboard parameter
*/
static inline uint16_t mavlink_msg_param_value_get_param_index(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Decode a param_value message into a struct
*
* @param msg The message to decode
* @param param_value C-struct to decode the message contents into
*/
static inline void mavlink_msg_param_value_decode(const mavlink_message_t* msg, mavlink_param_value_t* param_value)
{
#if MAVLINK_NEED_BYTE_SWAP
param_value->param_value = mavlink_msg_param_value_get_param_value(msg);
param_value->param_count = mavlink_msg_param_value_get_param_count(msg);
param_value->param_index = mavlink_msg_param_value_get_param_index(msg);
mavlink_msg_param_value_get_param_id(msg, param_value->param_id);
param_value->param_type = mavlink_msg_param_value_get_param_type(msg);
#else
memcpy(param_value, _MAV_PAYLOAD(msg), 25);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_ping.h
0,0 → 1,210
// MESSAGE PING PACKING
 
#define MAVLINK_MSG_ID_PING 4
 
typedef struct __mavlink_ping_t
{
uint64_t time_usec; ///< Unix timestamp in microseconds
uint32_t seq; ///< PING sequence
uint8_t target_system; ///< 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
uint8_t target_component; ///< 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
} mavlink_ping_t;
 
#define MAVLINK_MSG_ID_PING_LEN 14
#define MAVLINK_MSG_ID_4_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_PING { \
"PING", \
4, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_ping_t, time_usec) }, \
{ "seq", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_ping_t, seq) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_ping_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_ping_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a ping message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Unix timestamp in microseconds
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ping_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, uint32_t seq, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint32_t(buf, 8, seq);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_ping_t packet;
packet.time_usec = time_usec;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PING;
return mavlink_finalize_message(msg, system_id, component_id, 14, 237);
}
 
/**
* @brief Pack a ping message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Unix timestamp in microseconds
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_ping_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,uint32_t seq,uint8_t target_system,uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint32_t(buf, 8, seq);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_ping_t packet;
packet.time_usec = time_usec;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PING;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14, 237);
}
 
/**
* @brief Encode a ping struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param ping C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_ping_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ping_t* ping)
{
return mavlink_msg_ping_pack(system_id, component_id, msg, ping->time_usec, ping->seq, ping->target_system, ping->target_component);
}
 
/**
* @brief Send a ping message
* @param chan MAVLink channel to send the message
*
* @param time_usec Unix timestamp in microseconds
* @param seq PING sequence
* @param target_system 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
* @param target_component 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_ping_send(mavlink_channel_t chan, uint64_t time_usec, uint32_t seq, uint8_t target_system, uint8_t target_component)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_uint32_t(buf, 8, seq);
_mav_put_uint8_t(buf, 12, target_system);
_mav_put_uint8_t(buf, 13, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PING, buf, 14, 237);
#else
mavlink_ping_t packet;
packet.time_usec = time_usec;
packet.seq = seq;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PING, (const char *)&packet, 14, 237);
#endif
}
 
#endif
 
// MESSAGE PING UNPACKING
 
 
/**
* @brief Get field time_usec from ping message
*
* @return Unix timestamp in microseconds
*/
static inline uint64_t mavlink_msg_ping_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field seq from ping message
*
* @return PING sequence
*/
static inline uint32_t mavlink_msg_ping_get_seq(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 8);
}
 
/**
* @brief Get field target_system from ping message
*
* @return 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system
*/
static inline uint8_t mavlink_msg_ping_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field target_component from ping message
*
* @return 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system
*/
static inline uint8_t mavlink_msg_ping_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 13);
}
 
/**
* @brief Decode a ping message into a struct
*
* @param msg The message to decode
* @param ping C-struct to decode the message contents into
*/
static inline void mavlink_msg_ping_decode(const mavlink_message_t* msg, mavlink_ping_t* ping)
{
#if MAVLINK_NEED_BYTE_SWAP
ping->time_usec = mavlink_msg_ping_get_time_usec(msg);
ping->seq = mavlink_msg_ping_get_seq(msg);
ping->target_system = mavlink_msg_ping_get_target_system(msg);
ping->target_component = mavlink_msg_ping_get_target_component(msg);
#else
memcpy(ping, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_raw_imu.h
0,0 → 1,342
// MESSAGE RAW_IMU PACKING
 
#define MAVLINK_MSG_ID_RAW_IMU 27
 
typedef struct __mavlink_raw_imu_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int16_t xacc; ///< X acceleration (raw)
int16_t yacc; ///< Y acceleration (raw)
int16_t zacc; ///< Z acceleration (raw)
int16_t xgyro; ///< Angular speed around X axis (raw)
int16_t ygyro; ///< Angular speed around Y axis (raw)
int16_t zgyro; ///< Angular speed around Z axis (raw)
int16_t xmag; ///< X Magnetic field (raw)
int16_t ymag; ///< Y Magnetic field (raw)
int16_t zmag; ///< Z Magnetic field (raw)
} mavlink_raw_imu_t;
 
#define MAVLINK_MSG_ID_RAW_IMU_LEN 26
#define MAVLINK_MSG_ID_27_LEN 26
 
 
 
#define MAVLINK_MESSAGE_INFO_RAW_IMU { \
"RAW_IMU", \
10, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_raw_imu_t, time_usec) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_raw_imu_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_raw_imu_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_raw_imu_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_raw_imu_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_raw_imu_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_raw_imu_t, zgyro) }, \
{ "xmag", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_raw_imu_t, xmag) }, \
{ "ymag", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_raw_imu_t, ymag) }, \
{ "zmag", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_raw_imu_t, zmag) }, \
} \
}
 
 
/**
* @brief Pack a raw_imu message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_imu_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_raw_imu_t packet;
packet.time_usec = time_usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_IMU;
return mavlink_finalize_message(msg, system_id, component_id, 26, 144);
}
 
/**
* @brief Pack a raw_imu message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_imu_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,int16_t xacc,int16_t yacc,int16_t zacc,int16_t xgyro,int16_t ygyro,int16_t zgyro,int16_t xmag,int16_t ymag,int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 26);
#else
mavlink_raw_imu_t packet;
packet.time_usec = time_usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 26);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_IMU;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 26, 144);
}
 
/**
* @brief Encode a raw_imu struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param raw_imu C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_raw_imu_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_raw_imu_t* raw_imu)
{
return mavlink_msg_raw_imu_pack(system_id, component_id, msg, raw_imu->time_usec, raw_imu->xacc, raw_imu->yacc, raw_imu->zacc, raw_imu->xgyro, raw_imu->ygyro, raw_imu->zgyro, raw_imu->xmag, raw_imu->ymag, raw_imu->zmag);
}
 
/**
* @brief Send a raw_imu message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param xacc X acceleration (raw)
* @param yacc Y acceleration (raw)
* @param zacc Z acceleration (raw)
* @param xgyro Angular speed around X axis (raw)
* @param ygyro Angular speed around Y axis (raw)
* @param zgyro Angular speed around Z axis (raw)
* @param xmag X Magnetic field (raw)
* @param ymag Y Magnetic field (raw)
* @param zmag Z Magnetic field (raw)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_raw_imu_send(mavlink_channel_t chan, uint64_t time_usec, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[26];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, xacc);
_mav_put_int16_t(buf, 10, yacc);
_mav_put_int16_t(buf, 12, zacc);
_mav_put_int16_t(buf, 14, xgyro);
_mav_put_int16_t(buf, 16, ygyro);
_mav_put_int16_t(buf, 18, zgyro);
_mav_put_int16_t(buf, 20, xmag);
_mav_put_int16_t(buf, 22, ymag);
_mav_put_int16_t(buf, 24, zmag);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_IMU, buf, 26, 144);
#else
mavlink_raw_imu_t packet;
packet.time_usec = time_usec;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_IMU, (const char *)&packet, 26, 144);
#endif
}
 
#endif
 
// MESSAGE RAW_IMU UNPACKING
 
 
/**
* @brief Get field time_usec from raw_imu message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_raw_imu_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field xacc from raw_imu message
*
* @return X acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field yacc from raw_imu message
*
* @return Y acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field zacc from raw_imu message
*
* @return Z acceleration (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field xgyro from raw_imu message
*
* @return Angular speed around X axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field ygyro from raw_imu message
*
* @return Angular speed around Y axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field zgyro from raw_imu message
*
* @return Angular speed around Z axis (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 18);
}
 
/**
* @brief Get field xmag from raw_imu message
*
* @return X Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_xmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Get field ymag from raw_imu message
*
* @return Y Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_ymag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 22);
}
 
/**
* @brief Get field zmag from raw_imu message
*
* @return Z Magnetic field (raw)
*/
static inline int16_t mavlink_msg_raw_imu_get_zmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 24);
}
 
/**
* @brief Decode a raw_imu message into a struct
*
* @param msg The message to decode
* @param raw_imu C-struct to decode the message contents into
*/
static inline void mavlink_msg_raw_imu_decode(const mavlink_message_t* msg, mavlink_raw_imu_t* raw_imu)
{
#if MAVLINK_NEED_BYTE_SWAP
raw_imu->time_usec = mavlink_msg_raw_imu_get_time_usec(msg);
raw_imu->xacc = mavlink_msg_raw_imu_get_xacc(msg);
raw_imu->yacc = mavlink_msg_raw_imu_get_yacc(msg);
raw_imu->zacc = mavlink_msg_raw_imu_get_zacc(msg);
raw_imu->xgyro = mavlink_msg_raw_imu_get_xgyro(msg);
raw_imu->ygyro = mavlink_msg_raw_imu_get_ygyro(msg);
raw_imu->zgyro = mavlink_msg_raw_imu_get_zgyro(msg);
raw_imu->xmag = mavlink_msg_raw_imu_get_xmag(msg);
raw_imu->ymag = mavlink_msg_raw_imu_get_ymag(msg);
raw_imu->zmag = mavlink_msg_raw_imu_get_zmag(msg);
#else
memcpy(raw_imu, _MAV_PAYLOAD(msg), 26);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_raw_pressure.h
0,0 → 1,232
// MESSAGE RAW_PRESSURE PACKING
 
#define MAVLINK_MSG_ID_RAW_PRESSURE 28
 
typedef struct __mavlink_raw_pressure_t
{
uint64_t time_usec; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
int16_t press_abs; ///< Absolute pressure (raw)
int16_t press_diff1; ///< Differential pressure 1 (raw)
int16_t press_diff2; ///< Differential pressure 2 (raw)
int16_t temperature; ///< Raw Temperature measurement (raw)
} mavlink_raw_pressure_t;
 
#define MAVLINK_MSG_ID_RAW_PRESSURE_LEN 16
#define MAVLINK_MSG_ID_28_LEN 16
 
 
 
#define MAVLINK_MESSAGE_INFO_RAW_PRESSURE { \
"RAW_PRESSURE", \
5, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_raw_pressure_t, time_usec) }, \
{ "press_abs", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_raw_pressure_t, press_abs) }, \
{ "press_diff1", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_raw_pressure_t, press_diff1) }, \
{ "press_diff2", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_raw_pressure_t, press_diff2) }, \
{ "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_raw_pressure_t, temperature) }, \
} \
}
 
 
/**
* @brief Pack a raw_pressure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_pressure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_usec, int16_t press_abs, int16_t press_diff1, int16_t press_diff2, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_raw_pressure_t packet;
packet.time_usec = time_usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_PRESSURE;
return mavlink_finalize_message(msg, system_id, component_id, 16, 67);
}
 
/**
* @brief Pack a raw_pressure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_raw_pressure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_usec,int16_t press_abs,int16_t press_diff1,int16_t press_diff2,int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 16);
#else
mavlink_raw_pressure_t packet;
packet.time_usec = time_usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 16);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RAW_PRESSURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 16, 67);
}
 
/**
* @brief Encode a raw_pressure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param raw_pressure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_raw_pressure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_raw_pressure_t* raw_pressure)
{
return mavlink_msg_raw_pressure_pack(system_id, component_id, msg, raw_pressure->time_usec, raw_pressure->press_abs, raw_pressure->press_diff1, raw_pressure->press_diff2, raw_pressure->temperature);
}
 
/**
* @brief Send a raw_pressure message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (raw)
* @param press_diff1 Differential pressure 1 (raw)
* @param press_diff2 Differential pressure 2 (raw)
* @param temperature Raw Temperature measurement (raw)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_raw_pressure_send(mavlink_channel_t chan, uint64_t time_usec, int16_t press_abs, int16_t press_diff1, int16_t press_diff2, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[16];
_mav_put_uint64_t(buf, 0, time_usec);
_mav_put_int16_t(buf, 8, press_abs);
_mav_put_int16_t(buf, 10, press_diff1);
_mav_put_int16_t(buf, 12, press_diff2);
_mav_put_int16_t(buf, 14, temperature);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_PRESSURE, buf, 16, 67);
#else
mavlink_raw_pressure_t packet;
packet.time_usec = time_usec;
packet.press_abs = press_abs;
packet.press_diff1 = press_diff1;
packet.press_diff2 = press_diff2;
packet.temperature = temperature;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RAW_PRESSURE, (const char *)&packet, 16, 67);
#endif
}
 
#endif
 
// MESSAGE RAW_PRESSURE UNPACKING
 
 
/**
* @brief Get field time_usec from raw_pressure message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint64_t mavlink_msg_raw_pressure_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field press_abs from raw_pressure message
*
* @return Absolute pressure (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_abs(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field press_diff1 from raw_pressure message
*
* @return Differential pressure 1 (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_diff1(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field press_diff2 from raw_pressure message
*
* @return Differential pressure 2 (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_press_diff2(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field temperature from raw_pressure message
*
* @return Raw Temperature measurement (raw)
*/
static inline int16_t mavlink_msg_raw_pressure_get_temperature(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Decode a raw_pressure message into a struct
*
* @param msg The message to decode
* @param raw_pressure C-struct to decode the message contents into
*/
static inline void mavlink_msg_raw_pressure_decode(const mavlink_message_t* msg, mavlink_raw_pressure_t* raw_pressure)
{
#if MAVLINK_NEED_BYTE_SWAP
raw_pressure->time_usec = mavlink_msg_raw_pressure_get_time_usec(msg);
raw_pressure->press_abs = mavlink_msg_raw_pressure_get_press_abs(msg);
raw_pressure->press_diff1 = mavlink_msg_raw_pressure_get_press_diff1(msg);
raw_pressure->press_diff2 = mavlink_msg_raw_pressure_get_press_diff2(msg);
raw_pressure->temperature = mavlink_msg_raw_pressure_get_temperature(msg);
#else
memcpy(raw_pressure, _MAV_PAYLOAD(msg), 16);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_rc_channels_override.h
0,0 → 1,342
// MESSAGE RC_CHANNELS_OVERRIDE PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE 70
 
typedef struct __mavlink_rc_channels_override_t
{
uint16_t chan1_raw; ///< RC channel 1 value, in microseconds
uint16_t chan2_raw; ///< RC channel 2 value, in microseconds
uint16_t chan3_raw; ///< RC channel 3 value, in microseconds
uint16_t chan4_raw; ///< RC channel 4 value, in microseconds
uint16_t chan5_raw; ///< RC channel 5 value, in microseconds
uint16_t chan6_raw; ///< RC channel 6 value, in microseconds
uint16_t chan7_raw; ///< RC channel 7 value, in microseconds
uint16_t chan8_raw; ///< RC channel 8 value, in microseconds
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_rc_channels_override_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE_LEN 18
#define MAVLINK_MSG_ID_70_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE { \
"RC_CHANNELS_OVERRIDE", \
10, \
{ { "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_rc_channels_override_t, chan1_raw) }, \
{ "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_rc_channels_override_t, chan2_raw) }, \
{ "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_rc_channels_override_t, chan3_raw) }, \
{ "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_rc_channels_override_t, chan4_raw) }, \
{ "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_rc_channels_override_t, chan5_raw) }, \
{ "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_rc_channels_override_t, chan6_raw) }, \
{ "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_rc_channels_override_t, chan7_raw) }, \
{ "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_rc_channels_override_t, chan8_raw) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_rc_channels_override_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_rc_channels_override_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_override message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_override_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_rc_channels_override_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE;
return mavlink_finalize_message(msg, system_id, component_id, 18, 124);
}
 
/**
* @brief Pack a rc_channels_override message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_override_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_rc_channels_override_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18, 124);
}
 
/**
* @brief Encode a rc_channels_override struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_override C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_override_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_override_t* rc_channels_override)
{
return mavlink_msg_rc_channels_override_pack(system_id, component_id, msg, rc_channels_override->target_system, rc_channels_override->target_component, rc_channels_override->chan1_raw, rc_channels_override->chan2_raw, rc_channels_override->chan3_raw, rc_channels_override->chan4_raw, rc_channels_override->chan5_raw, rc_channels_override->chan6_raw, rc_channels_override->chan7_raw, rc_channels_override->chan8_raw);
}
 
/**
* @brief Send a rc_channels_override message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_override_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_uint16_t(buf, 0, chan1_raw);
_mav_put_uint16_t(buf, 2, chan2_raw);
_mav_put_uint16_t(buf, 4, chan3_raw);
_mav_put_uint16_t(buf, 6, chan4_raw);
_mav_put_uint16_t(buf, 8, chan5_raw);
_mav_put_uint16_t(buf, 10, chan6_raw);
_mav_put_uint16_t(buf, 12, chan7_raw);
_mav_put_uint16_t(buf, 14, chan8_raw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE, buf, 18, 124);
#else
mavlink_rc_channels_override_t packet;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE, (const char *)&packet, 18, 124);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_OVERRIDE UNPACKING
 
 
/**
* @brief Get field target_system from rc_channels_override message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_rc_channels_override_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field target_component from rc_channels_override message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_rc_channels_override_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field chan1_raw from rc_channels_override message
*
* @return RC channel 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field chan2_raw from rc_channels_override message
*
* @return RC channel 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field chan3_raw from rc_channels_override message
*
* @return RC channel 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field chan4_raw from rc_channels_override message
*
* @return RC channel 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field chan5_raw from rc_channels_override message
*
* @return RC channel 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field chan6_raw from rc_channels_override message
*
* @return RC channel 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field chan7_raw from rc_channels_override message
*
* @return RC channel 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field chan8_raw from rc_channels_override message
*
* @return RC channel 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_override_get_chan8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Decode a rc_channels_override message into a struct
*
* @param msg The message to decode
* @param rc_channels_override C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_override_decode(const mavlink_message_t* msg, mavlink_rc_channels_override_t* rc_channels_override)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_override->chan1_raw = mavlink_msg_rc_channels_override_get_chan1_raw(msg);
rc_channels_override->chan2_raw = mavlink_msg_rc_channels_override_get_chan2_raw(msg);
rc_channels_override->chan3_raw = mavlink_msg_rc_channels_override_get_chan3_raw(msg);
rc_channels_override->chan4_raw = mavlink_msg_rc_channels_override_get_chan4_raw(msg);
rc_channels_override->chan5_raw = mavlink_msg_rc_channels_override_get_chan5_raw(msg);
rc_channels_override->chan6_raw = mavlink_msg_rc_channels_override_get_chan6_raw(msg);
rc_channels_override->chan7_raw = mavlink_msg_rc_channels_override_get_chan7_raw(msg);
rc_channels_override->chan8_raw = mavlink_msg_rc_channels_override_get_chan8_raw(msg);
rc_channels_override->target_system = mavlink_msg_rc_channels_override_get_target_system(msg);
rc_channels_override->target_component = mavlink_msg_rc_channels_override_get_target_component(msg);
#else
memcpy(rc_channels_override, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_rc_channels_raw.h
0,0 → 1,364
// MESSAGE RC_CHANNELS_RAW PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_RAW 35
 
typedef struct __mavlink_rc_channels_raw_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
uint16_t chan1_raw; ///< RC channel 1 value, in microseconds
uint16_t chan2_raw; ///< RC channel 2 value, in microseconds
uint16_t chan3_raw; ///< RC channel 3 value, in microseconds
uint16_t chan4_raw; ///< RC channel 4 value, in microseconds
uint16_t chan5_raw; ///< RC channel 5 value, in microseconds
uint16_t chan6_raw; ///< RC channel 6 value, in microseconds
uint16_t chan7_raw; ///< RC channel 7 value, in microseconds
uint16_t chan8_raw; ///< RC channel 8 value, in microseconds
uint8_t port; ///< Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
uint8_t rssi; ///< Receive signal strength indicator, 0: 0%, 255: 100%
} mavlink_rc_channels_raw_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_RAW_LEN 22
#define MAVLINK_MSG_ID_35_LEN 22
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW { \
"RC_CHANNELS_RAW", \
11, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_rc_channels_raw_t, time_boot_ms) }, \
{ "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_rc_channels_raw_t, chan1_raw) }, \
{ "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_rc_channels_raw_t, chan2_raw) }, \
{ "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_rc_channels_raw_t, chan3_raw) }, \
{ "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_rc_channels_raw_t, chan4_raw) }, \
{ "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_rc_channels_raw_t, chan5_raw) }, \
{ "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_rc_channels_raw_t, chan6_raw) }, \
{ "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_rc_channels_raw_t, chan7_raw) }, \
{ "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_rc_channels_raw_t, chan8_raw) }, \
{ "port", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_rc_channels_raw_t, port) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_rc_channels_raw_t, rssi) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, uint8_t port, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_uint16_t(buf, 4, chan1_raw);
_mav_put_uint16_t(buf, 6, chan2_raw);
_mav_put_uint16_t(buf, 8, chan3_raw);
_mav_put_uint16_t(buf, 10, chan4_raw);
_mav_put_uint16_t(buf, 12, chan5_raw);
_mav_put_uint16_t(buf, 14, chan6_raw);
_mav_put_uint16_t(buf, 16, chan7_raw);
_mav_put_uint16_t(buf, 18, chan8_raw);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_rc_channels_raw_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.port = port;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 22, 244);
}
 
/**
* @brief Pack a rc_channels_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,uint8_t port,uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw,uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_uint16_t(buf, 4, chan1_raw);
_mav_put_uint16_t(buf, 6, chan2_raw);
_mav_put_uint16_t(buf, 8, chan3_raw);
_mav_put_uint16_t(buf, 10, chan4_raw);
_mav_put_uint16_t(buf, 12, chan5_raw);
_mav_put_uint16_t(buf, 14, chan6_raw);
_mav_put_uint16_t(buf, 16, chan7_raw);
_mav_put_uint16_t(buf, 18, chan8_raw);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_rc_channels_raw_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.port = port;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 22, 244);
}
 
/**
* @brief Encode a rc_channels_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_raw_t* rc_channels_raw)
{
return mavlink_msg_rc_channels_raw_pack(system_id, component_id, msg, rc_channels_raw->time_boot_ms, rc_channels_raw->port, rc_channels_raw->chan1_raw, rc_channels_raw->chan2_raw, rc_channels_raw->chan3_raw, rc_channels_raw->chan4_raw, rc_channels_raw->chan5_raw, rc_channels_raw->chan6_raw, rc_channels_raw->chan7_raw, rc_channels_raw->chan8_raw, rc_channels_raw->rssi);
}
 
/**
* @brief Send a rc_channels_raw message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_raw RC channel 1 value, in microseconds
* @param chan2_raw RC channel 2 value, in microseconds
* @param chan3_raw RC channel 3 value, in microseconds
* @param chan4_raw RC channel 4 value, in microseconds
* @param chan5_raw RC channel 5 value, in microseconds
* @param chan6_raw RC channel 6 value, in microseconds
* @param chan7_raw RC channel 7 value, in microseconds
* @param chan8_raw RC channel 8 value, in microseconds
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_raw_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t port, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_uint16_t(buf, 4, chan1_raw);
_mav_put_uint16_t(buf, 6, chan2_raw);
_mav_put_uint16_t(buf, 8, chan3_raw);
_mav_put_uint16_t(buf, 10, chan4_raw);
_mav_put_uint16_t(buf, 12, chan5_raw);
_mav_put_uint16_t(buf, 14, chan6_raw);
_mav_put_uint16_t(buf, 16, chan7_raw);
_mav_put_uint16_t(buf, 18, chan8_raw);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_RAW, buf, 22, 244);
#else
mavlink_rc_channels_raw_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_raw = chan1_raw;
packet.chan2_raw = chan2_raw;
packet.chan3_raw = chan3_raw;
packet.chan4_raw = chan4_raw;
packet.chan5_raw = chan5_raw;
packet.chan6_raw = chan6_raw;
packet.chan7_raw = chan7_raw;
packet.chan8_raw = chan8_raw;
packet.port = port;
packet.rssi = rssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_RAW, (const char *)&packet, 22, 244);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_RAW UNPACKING
 
 
/**
* @brief Get field time_boot_ms from rc_channels_raw message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_rc_channels_raw_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field port from rc_channels_raw message
*
* @return Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
*/
static inline uint8_t mavlink_msg_rc_channels_raw_get_port(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 20);
}
 
/**
* @brief Get field chan1_raw from rc_channels_raw message
*
* @return RC channel 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field chan2_raw from rc_channels_raw message
*
* @return RC channel 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field chan3_raw from rc_channels_raw message
*
* @return RC channel 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field chan4_raw from rc_channels_raw message
*
* @return RC channel 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field chan5_raw from rc_channels_raw message
*
* @return RC channel 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field chan6_raw from rc_channels_raw message
*
* @return RC channel 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field chan7_raw from rc_channels_raw message
*
* @return RC channel 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 16);
}
 
/**
* @brief Get field chan8_raw from rc_channels_raw message
*
* @return RC channel 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_rc_channels_raw_get_chan8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 18);
}
 
/**
* @brief Get field rssi from rc_channels_raw message
*
* @return Receive signal strength indicator, 0: 0%, 255: 100%
*/
static inline uint8_t mavlink_msg_rc_channels_raw_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 21);
}
 
/**
* @brief Decode a rc_channels_raw message into a struct
*
* @param msg The message to decode
* @param rc_channels_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_raw_decode(const mavlink_message_t* msg, mavlink_rc_channels_raw_t* rc_channels_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_raw->time_boot_ms = mavlink_msg_rc_channels_raw_get_time_boot_ms(msg);
rc_channels_raw->chan1_raw = mavlink_msg_rc_channels_raw_get_chan1_raw(msg);
rc_channels_raw->chan2_raw = mavlink_msg_rc_channels_raw_get_chan2_raw(msg);
rc_channels_raw->chan3_raw = mavlink_msg_rc_channels_raw_get_chan3_raw(msg);
rc_channels_raw->chan4_raw = mavlink_msg_rc_channels_raw_get_chan4_raw(msg);
rc_channels_raw->chan5_raw = mavlink_msg_rc_channels_raw_get_chan5_raw(msg);
rc_channels_raw->chan6_raw = mavlink_msg_rc_channels_raw_get_chan6_raw(msg);
rc_channels_raw->chan7_raw = mavlink_msg_rc_channels_raw_get_chan7_raw(msg);
rc_channels_raw->chan8_raw = mavlink_msg_rc_channels_raw_get_chan8_raw(msg);
rc_channels_raw->port = mavlink_msg_rc_channels_raw_get_port(msg);
rc_channels_raw->rssi = mavlink_msg_rc_channels_raw_get_rssi(msg);
#else
memcpy(rc_channels_raw, _MAV_PAYLOAD(msg), 22);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_rc_channels_scaled.h
0,0 → 1,364
// MESSAGE RC_CHANNELS_SCALED PACKING
 
#define MAVLINK_MSG_ID_RC_CHANNELS_SCALED 34
 
typedef struct __mavlink_rc_channels_scaled_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int16_t chan1_scaled; ///< RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan2_scaled; ///< RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan3_scaled; ///< RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan4_scaled; ///< RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan5_scaled; ///< RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan6_scaled; ///< RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan7_scaled; ///< RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
int16_t chan8_scaled; ///< RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
uint8_t port; ///< Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
uint8_t rssi; ///< Receive signal strength indicator, 0: 0%, 255: 100%
} mavlink_rc_channels_scaled_t;
 
#define MAVLINK_MSG_ID_RC_CHANNELS_SCALED_LEN 22
#define MAVLINK_MSG_ID_34_LEN 22
 
 
 
#define MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED { \
"RC_CHANNELS_SCALED", \
11, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_rc_channels_scaled_t, time_boot_ms) }, \
{ "chan1_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_rc_channels_scaled_t, chan1_scaled) }, \
{ "chan2_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 6, offsetof(mavlink_rc_channels_scaled_t, chan2_scaled) }, \
{ "chan3_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_rc_channels_scaled_t, chan3_scaled) }, \
{ "chan4_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_rc_channels_scaled_t, chan4_scaled) }, \
{ "chan5_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_rc_channels_scaled_t, chan5_scaled) }, \
{ "chan6_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_rc_channels_scaled_t, chan6_scaled) }, \
{ "chan7_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_rc_channels_scaled_t, chan7_scaled) }, \
{ "chan8_scaled", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_rc_channels_scaled_t, chan8_scaled) }, \
{ "port", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_rc_channels_scaled_t, port) }, \
{ "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_rc_channels_scaled_t, rssi) }, \
} \
}
 
 
/**
* @brief Pack a rc_channels_scaled message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, uint8_t port, int16_t chan1_scaled, int16_t chan2_scaled, int16_t chan3_scaled, int16_t chan4_scaled, int16_t chan5_scaled, int16_t chan6_scaled, int16_t chan7_scaled, int16_t chan8_scaled, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, chan1_scaled);
_mav_put_int16_t(buf, 6, chan2_scaled);
_mav_put_int16_t(buf, 8, chan3_scaled);
_mav_put_int16_t(buf, 10, chan4_scaled);
_mav_put_int16_t(buf, 12, chan5_scaled);
_mav_put_int16_t(buf, 14, chan6_scaled);
_mav_put_int16_t(buf, 16, chan7_scaled);
_mav_put_int16_t(buf, 18, chan8_scaled);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_rc_channels_scaled_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.port = port;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_SCALED;
return mavlink_finalize_message(msg, system_id, component_id, 22, 237);
}
 
/**
* @brief Pack a rc_channels_scaled message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,uint8_t port,int16_t chan1_scaled,int16_t chan2_scaled,int16_t chan3_scaled,int16_t chan4_scaled,int16_t chan5_scaled,int16_t chan6_scaled,int16_t chan7_scaled,int16_t chan8_scaled,uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, chan1_scaled);
_mav_put_int16_t(buf, 6, chan2_scaled);
_mav_put_int16_t(buf, 8, chan3_scaled);
_mav_put_int16_t(buf, 10, chan4_scaled);
_mav_put_int16_t(buf, 12, chan5_scaled);
_mav_put_int16_t(buf, 14, chan6_scaled);
_mav_put_int16_t(buf, 16, chan7_scaled);
_mav_put_int16_t(buf, 18, chan8_scaled);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_rc_channels_scaled_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.port = port;
packet.rssi = rssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_RC_CHANNELS_SCALED;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 22, 237);
}
 
/**
* @brief Encode a rc_channels_scaled struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param rc_channels_scaled C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_rc_channels_scaled_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_rc_channels_scaled_t* rc_channels_scaled)
{
return mavlink_msg_rc_channels_scaled_pack(system_id, component_id, msg, rc_channels_scaled->time_boot_ms, rc_channels_scaled->port, rc_channels_scaled->chan1_scaled, rc_channels_scaled->chan2_scaled, rc_channels_scaled->chan3_scaled, rc_channels_scaled->chan4_scaled, rc_channels_scaled->chan5_scaled, rc_channels_scaled->chan6_scaled, rc_channels_scaled->chan7_scaled, rc_channels_scaled->chan8_scaled, rc_channels_scaled->rssi);
}
 
/**
* @brief Send a rc_channels_scaled message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param chan1_scaled RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan2_scaled RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan3_scaled RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan4_scaled RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan5_scaled RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan6_scaled RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan7_scaled RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param chan8_scaled RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
* @param rssi Receive signal strength indicator, 0: 0%, 255: 100%
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_rc_channels_scaled_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t port, int16_t chan1_scaled, int16_t chan2_scaled, int16_t chan3_scaled, int16_t chan4_scaled, int16_t chan5_scaled, int16_t chan6_scaled, int16_t chan7_scaled, int16_t chan8_scaled, uint8_t rssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, chan1_scaled);
_mav_put_int16_t(buf, 6, chan2_scaled);
_mav_put_int16_t(buf, 8, chan3_scaled);
_mav_put_int16_t(buf, 10, chan4_scaled);
_mav_put_int16_t(buf, 12, chan5_scaled);
_mav_put_int16_t(buf, 14, chan6_scaled);
_mav_put_int16_t(buf, 16, chan7_scaled);
_mav_put_int16_t(buf, 18, chan8_scaled);
_mav_put_uint8_t(buf, 20, port);
_mav_put_uint8_t(buf, 21, rssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_SCALED, buf, 22, 237);
#else
mavlink_rc_channels_scaled_t packet;
packet.time_boot_ms = time_boot_ms;
packet.chan1_scaled = chan1_scaled;
packet.chan2_scaled = chan2_scaled;
packet.chan3_scaled = chan3_scaled;
packet.chan4_scaled = chan4_scaled;
packet.chan5_scaled = chan5_scaled;
packet.chan6_scaled = chan6_scaled;
packet.chan7_scaled = chan7_scaled;
packet.chan8_scaled = chan8_scaled;
packet.port = port;
packet.rssi = rssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RC_CHANNELS_SCALED, (const char *)&packet, 22, 237);
#endif
}
 
#endif
 
// MESSAGE RC_CHANNELS_SCALED UNPACKING
 
 
/**
* @brief Get field time_boot_ms from rc_channels_scaled message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_rc_channels_scaled_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field port from rc_channels_scaled message
*
* @return Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
*/
static inline uint8_t mavlink_msg_rc_channels_scaled_get_port(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 20);
}
 
/**
* @brief Get field chan1_scaled from rc_channels_scaled message
*
* @return RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan1_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Get field chan2_scaled from rc_channels_scaled message
*
* @return RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan2_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 6);
}
 
/**
* @brief Get field chan3_scaled from rc_channels_scaled message
*
* @return RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan3_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field chan4_scaled from rc_channels_scaled message
*
* @return RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan4_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field chan5_scaled from rc_channels_scaled message
*
* @return RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan5_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field chan6_scaled from rc_channels_scaled message
*
* @return RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan6_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field chan7_scaled from rc_channels_scaled message
*
* @return RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan7_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field chan8_scaled from rc_channels_scaled message
*
* @return RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000
*/
static inline int16_t mavlink_msg_rc_channels_scaled_get_chan8_scaled(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 18);
}
 
/**
* @brief Get field rssi from rc_channels_scaled message
*
* @return Receive signal strength indicator, 0: 0%, 255: 100%
*/
static inline uint8_t mavlink_msg_rc_channels_scaled_get_rssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 21);
}
 
/**
* @brief Decode a rc_channels_scaled message into a struct
*
* @param msg The message to decode
* @param rc_channels_scaled C-struct to decode the message contents into
*/
static inline void mavlink_msg_rc_channels_scaled_decode(const mavlink_message_t* msg, mavlink_rc_channels_scaled_t* rc_channels_scaled)
{
#if MAVLINK_NEED_BYTE_SWAP
rc_channels_scaled->time_boot_ms = mavlink_msg_rc_channels_scaled_get_time_boot_ms(msg);
rc_channels_scaled->chan1_scaled = mavlink_msg_rc_channels_scaled_get_chan1_scaled(msg);
rc_channels_scaled->chan2_scaled = mavlink_msg_rc_channels_scaled_get_chan2_scaled(msg);
rc_channels_scaled->chan3_scaled = mavlink_msg_rc_channels_scaled_get_chan3_scaled(msg);
rc_channels_scaled->chan4_scaled = mavlink_msg_rc_channels_scaled_get_chan4_scaled(msg);
rc_channels_scaled->chan5_scaled = mavlink_msg_rc_channels_scaled_get_chan5_scaled(msg);
rc_channels_scaled->chan6_scaled = mavlink_msg_rc_channels_scaled_get_chan6_scaled(msg);
rc_channels_scaled->chan7_scaled = mavlink_msg_rc_channels_scaled_get_chan7_scaled(msg);
rc_channels_scaled->chan8_scaled = mavlink_msg_rc_channels_scaled_get_chan8_scaled(msg);
rc_channels_scaled->port = mavlink_msg_rc_channels_scaled_get_port(msg);
rc_channels_scaled->rssi = mavlink_msg_rc_channels_scaled_get_rssi(msg);
#else
memcpy(rc_channels_scaled, _MAV_PAYLOAD(msg), 22);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_request_data_stream.h
0,0 → 1,232
// MESSAGE REQUEST_DATA_STREAM PACKING
 
#define MAVLINK_MSG_ID_REQUEST_DATA_STREAM 66
 
typedef struct __mavlink_request_data_stream_t
{
uint16_t req_message_rate; ///< The requested interval between two messages of this type
uint8_t target_system; ///< The target requested to send the message stream.
uint8_t target_component; ///< The target requested to send the message stream.
uint8_t req_stream_id; ///< The ID of the requested data stream
uint8_t start_stop; ///< 1 to start sending, 0 to stop sending.
} mavlink_request_data_stream_t;
 
#define MAVLINK_MSG_ID_REQUEST_DATA_STREAM_LEN 6
#define MAVLINK_MSG_ID_66_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM { \
"REQUEST_DATA_STREAM", \
5, \
{ { "req_message_rate", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_request_data_stream_t, req_message_rate) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_request_data_stream_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_request_data_stream_t, target_component) }, \
{ "req_stream_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_request_data_stream_t, req_stream_id) }, \
{ "start_stop", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_request_data_stream_t, start_stop) }, \
} \
}
 
 
/**
* @brief Pack a request_data_stream message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested data stream
* @param req_message_rate The requested interval between two messages of this type
* @param start_stop 1 to start sending, 0 to stop sending.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_request_data_stream_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t req_stream_id, uint16_t req_message_rate, uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint16_t(buf, 0, req_message_rate);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_uint8_t(buf, 4, req_stream_id);
_mav_put_uint8_t(buf, 5, start_stop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_request_data_stream_t packet;
packet.req_message_rate = req_message_rate;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.start_stop = start_stop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_REQUEST_DATA_STREAM;
return mavlink_finalize_message(msg, system_id, component_id, 6, 148);
}
 
/**
* @brief Pack a request_data_stream message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested data stream
* @param req_message_rate The requested interval between two messages of this type
* @param start_stop 1 to start sending, 0 to stop sending.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_request_data_stream_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t req_stream_id,uint16_t req_message_rate,uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint16_t(buf, 0, req_message_rate);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_uint8_t(buf, 4, req_stream_id);
_mav_put_uint8_t(buf, 5, start_stop);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_request_data_stream_t packet;
packet.req_message_rate = req_message_rate;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.start_stop = start_stop;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_REQUEST_DATA_STREAM;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6, 148);
}
 
/**
* @brief Encode a request_data_stream struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param request_data_stream C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_request_data_stream_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_request_data_stream_t* request_data_stream)
{
return mavlink_msg_request_data_stream_pack(system_id, component_id, msg, request_data_stream->target_system, request_data_stream->target_component, request_data_stream->req_stream_id, request_data_stream->req_message_rate, request_data_stream->start_stop);
}
 
/**
* @brief Send a request_data_stream message
* @param chan MAVLink channel to send the message
*
* @param target_system The target requested to send the message stream.
* @param target_component The target requested to send the message stream.
* @param req_stream_id The ID of the requested data stream
* @param req_message_rate The requested interval between two messages of this type
* @param start_stop 1 to start sending, 0 to stop sending.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_request_data_stream_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t req_stream_id, uint16_t req_message_rate, uint8_t start_stop)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint16_t(buf, 0, req_message_rate);
_mav_put_uint8_t(buf, 2, target_system);
_mav_put_uint8_t(buf, 3, target_component);
_mav_put_uint8_t(buf, 4, req_stream_id);
_mav_put_uint8_t(buf, 5, start_stop);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_REQUEST_DATA_STREAM, buf, 6, 148);
#else
mavlink_request_data_stream_t packet;
packet.req_message_rate = req_message_rate;
packet.target_system = target_system;
packet.target_component = target_component;
packet.req_stream_id = req_stream_id;
packet.start_stop = start_stop;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_REQUEST_DATA_STREAM, (const char *)&packet, 6, 148);
#endif
}
 
#endif
 
// MESSAGE REQUEST_DATA_STREAM UNPACKING
 
 
/**
* @brief Get field target_system from request_data_stream message
*
* @return The target requested to send the message stream.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field target_component from request_data_stream message
*
* @return The target requested to send the message stream.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Get field req_stream_id from request_data_stream message
*
* @return The ID of the requested data stream
*/
static inline uint8_t mavlink_msg_request_data_stream_get_req_stream_id(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field req_message_rate from request_data_stream message
*
* @return The requested interval between two messages of this type
*/
static inline uint16_t mavlink_msg_request_data_stream_get_req_message_rate(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field start_stop from request_data_stream message
*
* @return 1 to start sending, 0 to stop sending.
*/
static inline uint8_t mavlink_msg_request_data_stream_get_start_stop(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Decode a request_data_stream message into a struct
*
* @param msg The message to decode
* @param request_data_stream C-struct to decode the message contents into
*/
static inline void mavlink_msg_request_data_stream_decode(const mavlink_message_t* msg, mavlink_request_data_stream_t* request_data_stream)
{
#if MAVLINK_NEED_BYTE_SWAP
request_data_stream->req_message_rate = mavlink_msg_request_data_stream_get_req_message_rate(msg);
request_data_stream->target_system = mavlink_msg_request_data_stream_get_target_system(msg);
request_data_stream->target_component = mavlink_msg_request_data_stream_get_target_component(msg);
request_data_stream->req_stream_id = mavlink_msg_request_data_stream_get_req_stream_id(msg);
request_data_stream->start_stop = mavlink_msg_request_data_stream_get_start_stop(msg);
#else
memcpy(request_data_stream, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint.h
0,0 → 1,232
// MESSAGE ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT 59
 
typedef struct __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t
{
uint32_t time_boot_ms; ///< Timestamp in milliseconds since system boot
float roll_speed; ///< Desired roll angular speed in rad/s
float pitch_speed; ///< Desired pitch angular speed in rad/s
float yaw_speed; ///< Desired yaw angular speed in rad/s
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_roll_pitch_yaw_speed_thrust_setpoint_t;
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT_LEN 20
#define MAVLINK_MSG_ID_59_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT { \
"ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT", \
5, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, time_boot_ms) }, \
{ "roll_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, roll_speed) }, \
{ "pitch_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, pitch_speed) }, \
{ "yaw_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, yaw_speed) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_roll_pitch_yaw_speed_thrust_setpoint_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a roll_pitch_yaw_speed_thrust_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll_speed);
_mav_put_float(buf, 8, pitch_speed);
_mav_put_float(buf, 12, yaw_speed);
_mav_put_float(buf, 16, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 20, 238);
}
 
/**
* @brief Pack a roll_pitch_yaw_speed_thrust_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float roll_speed,float pitch_speed,float yaw_speed,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll_speed);
_mav_put_float(buf, 8, pitch_speed);
_mav_put_float(buf, 12, yaw_speed);
_mav_put_float(buf, 16, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 238);
}
 
/**
* @brief Encode a roll_pitch_yaw_speed_thrust_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param roll_pitch_yaw_speed_thrust_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_roll_pitch_yaw_speed_thrust_setpoint_t* roll_pitch_yaw_speed_thrust_setpoint)
{
return mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(system_id, component_id, msg, roll_pitch_yaw_speed_thrust_setpoint->time_boot_ms, roll_pitch_yaw_speed_thrust_setpoint->roll_speed, roll_pitch_yaw_speed_thrust_setpoint->pitch_speed, roll_pitch_yaw_speed_thrust_setpoint->yaw_speed, roll_pitch_yaw_speed_thrust_setpoint->thrust);
}
 
/**
* @brief Send a roll_pitch_yaw_speed_thrust_setpoint message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_send(mavlink_channel_t chan, uint32_t time_boot_ms, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll_speed);
_mav_put_float(buf, 8, pitch_speed);
_mav_put_float(buf, 12, yaw_speed);
_mav_put_float(buf, 16, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, buf, 20, 238);
#else
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, (const char *)&packet, 20, 238);
#endif
}
 
#endif
 
// MESSAGE ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT UNPACKING
 
 
/**
* @brief Get field time_boot_ms from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Timestamp in milliseconds since system boot
*/
static inline uint32_t mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field roll_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired roll angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_roll_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field pitch_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired pitch angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_pitch_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw_speed from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Desired yaw angular speed in rad/s
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_yaw_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field thrust from roll_pitch_yaw_speed_thrust_setpoint message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a roll_pitch_yaw_speed_thrust_setpoint message into a struct
*
* @param msg The message to decode
* @param roll_pitch_yaw_speed_thrust_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(const mavlink_message_t* msg, mavlink_roll_pitch_yaw_speed_thrust_setpoint_t* roll_pitch_yaw_speed_thrust_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
roll_pitch_yaw_speed_thrust_setpoint->time_boot_ms = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_time_boot_ms(msg);
roll_pitch_yaw_speed_thrust_setpoint->roll_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_roll_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->pitch_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_pitch_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->yaw_speed = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_yaw_speed(msg);
roll_pitch_yaw_speed_thrust_setpoint->thrust = mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_get_thrust(msg);
#else
memcpy(roll_pitch_yaw_speed_thrust_setpoint, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_roll_pitch_yaw_thrust_setpoint.h
0,0 → 1,232
// MESSAGE ROLL_PITCH_YAW_THRUST_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT 58
 
typedef struct __mavlink_roll_pitch_yaw_thrust_setpoint_t
{
uint32_t time_boot_ms; ///< Timestamp in milliseconds since system boot
float roll; ///< Desired roll angle in radians
float pitch; ///< Desired pitch angle in radians
float yaw; ///< Desired yaw angle in radians
float thrust; ///< Collective thrust, normalized to 0 .. 1
} mavlink_roll_pitch_yaw_thrust_setpoint_t;
 
#define MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT_LEN 20
#define MAVLINK_MSG_ID_58_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT { \
"ROLL_PITCH_YAW_THRUST_SETPOINT", \
5, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, time_boot_ms) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_roll_pitch_yaw_thrust_setpoint_t, thrust) }, \
} \
}
 
 
/**
* @brief Pack a roll_pitch_yaw_thrust_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 20, 239);
}
 
/**
* @brief Pack a roll_pitch_yaw_thrust_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float roll,float pitch,float yaw,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, thrust);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 239);
}
 
/**
* @brief Encode a roll_pitch_yaw_thrust_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param roll_pitch_yaw_thrust_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_roll_pitch_yaw_thrust_setpoint_t* roll_pitch_yaw_thrust_setpoint)
{
return mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(system_id, component_id, msg, roll_pitch_yaw_thrust_setpoint->time_boot_ms, roll_pitch_yaw_thrust_setpoint->roll, roll_pitch_yaw_thrust_setpoint->pitch, roll_pitch_yaw_thrust_setpoint->yaw, roll_pitch_yaw_thrust_setpoint->thrust);
}
 
/**
* @brief Send a roll_pitch_yaw_thrust_setpoint message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp in milliseconds since system boot
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_roll_pitch_yaw_thrust_setpoint_send(mavlink_channel_t chan, uint32_t time_boot_ms, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, roll);
_mav_put_float(buf, 8, pitch);
_mav_put_float(buf, 12, yaw);
_mav_put_float(buf, 16, thrust);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT, buf, 20, 239);
#else
mavlink_roll_pitch_yaw_thrust_setpoint_t packet;
packet.time_boot_ms = time_boot_ms;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT, (const char *)&packet, 20, 239);
#endif
}
 
#endif
 
// MESSAGE ROLL_PITCH_YAW_THRUST_SETPOINT UNPACKING
 
 
/**
* @brief Get field time_boot_ms from roll_pitch_yaw_thrust_setpoint message
*
* @return Timestamp in milliseconds since system boot
*/
static inline uint32_t mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field roll from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired roll angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field pitch from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired pitch angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from roll_pitch_yaw_thrust_setpoint message
*
* @return Desired yaw angle in radians
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field thrust from roll_pitch_yaw_thrust_setpoint message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a roll_pitch_yaw_thrust_setpoint message into a struct
*
* @param msg The message to decode
* @param roll_pitch_yaw_thrust_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(const mavlink_message_t* msg, mavlink_roll_pitch_yaw_thrust_setpoint_t* roll_pitch_yaw_thrust_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
roll_pitch_yaw_thrust_setpoint->time_boot_ms = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_time_boot_ms(msg);
roll_pitch_yaw_thrust_setpoint->roll = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_roll(msg);
roll_pitch_yaw_thrust_setpoint->pitch = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_pitch(msg);
roll_pitch_yaw_thrust_setpoint->yaw = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_yaw(msg);
roll_pitch_yaw_thrust_setpoint->thrust = mavlink_msg_roll_pitch_yaw_thrust_setpoint_get_thrust(msg);
#else
memcpy(roll_pitch_yaw_thrust_setpoint, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_safety_allowed_area.h
0,0 → 1,276
// MESSAGE SAFETY_ALLOWED_AREA PACKING
 
#define MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA 55
 
typedef struct __mavlink_safety_allowed_area_t
{
float p1x; ///< x position 1 / Latitude 1
float p1y; ///< y position 1 / Longitude 1
float p1z; ///< z position 1 / Altitude 1
float p2x; ///< x position 2 / Latitude 2
float p2y; ///< y position 2 / Longitude 2
float p2z; ///< z position 2 / Altitude 2
uint8_t frame; ///< Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
} mavlink_safety_allowed_area_t;
 
#define MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA_LEN 25
#define MAVLINK_MSG_ID_55_LEN 25
 
 
 
#define MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA { \
"SAFETY_ALLOWED_AREA", \
7, \
{ { "p1x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_safety_allowed_area_t, p1x) }, \
{ "p1y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_safety_allowed_area_t, p1y) }, \
{ "p1z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_safety_allowed_area_t, p1z) }, \
{ "p2x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_safety_allowed_area_t, p2x) }, \
{ "p2y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_safety_allowed_area_t, p2y) }, \
{ "p2z", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_safety_allowed_area_t, p2z) }, \
{ "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_safety_allowed_area_t, frame) }, \
} \
}
 
 
/**
* @brief Pack a safety_allowed_area message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_allowed_area_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_safety_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.frame = frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA;
return mavlink_finalize_message(msg, system_id, component_id, 25, 3);
}
 
/**
* @brief Pack a safety_allowed_area message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_allowed_area_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t frame,float p1x,float p1y,float p1z,float p2x,float p2y,float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 25);
#else
mavlink_safety_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.frame = frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 25);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 25, 3);
}
 
/**
* @brief Encode a safety_allowed_area struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param safety_allowed_area C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_safety_allowed_area_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_safety_allowed_area_t* safety_allowed_area)
{
return mavlink_msg_safety_allowed_area_pack(system_id, component_id, msg, safety_allowed_area->frame, safety_allowed_area->p1x, safety_allowed_area->p1y, safety_allowed_area->p1z, safety_allowed_area->p2x, safety_allowed_area->p2y, safety_allowed_area->p2z);
}
 
/**
* @brief Send a safety_allowed_area message
* @param chan MAVLink channel to send the message
*
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_safety_allowed_area_send(mavlink_channel_t chan, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[25];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA, buf, 25, 3);
#else
mavlink_safety_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.frame = frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA, (const char *)&packet, 25, 3);
#endif
}
 
#endif
 
// MESSAGE SAFETY_ALLOWED_AREA UNPACKING
 
 
/**
* @brief Get field frame from safety_allowed_area message
*
* @return Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
*/
static inline uint8_t mavlink_msg_safety_allowed_area_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 24);
}
 
/**
* @brief Get field p1x from safety_allowed_area message
*
* @return x position 1 / Latitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field p1y from safety_allowed_area message
*
* @return y position 1 / Longitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field p1z from safety_allowed_area message
*
* @return z position 1 / Altitude 1
*/
static inline float mavlink_msg_safety_allowed_area_get_p1z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field p2x from safety_allowed_area message
*
* @return x position 2 / Latitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field p2y from safety_allowed_area message
*
* @return y position 2 / Longitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field p2z from safety_allowed_area message
*
* @return z position 2 / Altitude 2
*/
static inline float mavlink_msg_safety_allowed_area_get_p2z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Decode a safety_allowed_area message into a struct
*
* @param msg The message to decode
* @param safety_allowed_area C-struct to decode the message contents into
*/
static inline void mavlink_msg_safety_allowed_area_decode(const mavlink_message_t* msg, mavlink_safety_allowed_area_t* safety_allowed_area)
{
#if MAVLINK_NEED_BYTE_SWAP
safety_allowed_area->p1x = mavlink_msg_safety_allowed_area_get_p1x(msg);
safety_allowed_area->p1y = mavlink_msg_safety_allowed_area_get_p1y(msg);
safety_allowed_area->p1z = mavlink_msg_safety_allowed_area_get_p1z(msg);
safety_allowed_area->p2x = mavlink_msg_safety_allowed_area_get_p2x(msg);
safety_allowed_area->p2y = mavlink_msg_safety_allowed_area_get_p2y(msg);
safety_allowed_area->p2z = mavlink_msg_safety_allowed_area_get_p2z(msg);
safety_allowed_area->frame = mavlink_msg_safety_allowed_area_get_frame(msg);
#else
memcpy(safety_allowed_area, _MAV_PAYLOAD(msg), 25);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_safety_set_allowed_area.h
0,0 → 1,320
// MESSAGE SAFETY_SET_ALLOWED_AREA PACKING
 
#define MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA 54
 
typedef struct __mavlink_safety_set_allowed_area_t
{
float p1x; ///< x position 1 / Latitude 1
float p1y; ///< y position 1 / Longitude 1
float p1z; ///< z position 1 / Altitude 1
float p2x; ///< x position 2 / Latitude 2
float p2y; ///< y position 2 / Longitude 2
float p2z; ///< z position 2 / Altitude 2
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t frame; ///< Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
} mavlink_safety_set_allowed_area_t;
 
#define MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA_LEN 27
#define MAVLINK_MSG_ID_54_LEN 27
 
 
 
#define MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA { \
"SAFETY_SET_ALLOWED_AREA", \
9, \
{ { "p1x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_safety_set_allowed_area_t, p1x) }, \
{ "p1y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_safety_set_allowed_area_t, p1y) }, \
{ "p1z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_safety_set_allowed_area_t, p1z) }, \
{ "p2x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_safety_set_allowed_area_t, p2x) }, \
{ "p2y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_safety_set_allowed_area_t, p2y) }, \
{ "p2z", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_safety_set_allowed_area_t, p2z) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_safety_set_allowed_area_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 25, offsetof(mavlink_safety_set_allowed_area_t, target_component) }, \
{ "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_safety_set_allowed_area_t, frame) }, \
} \
}
 
 
/**
* @brief Pack a safety_set_allowed_area message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, target_system);
_mav_put_uint8_t(buf, 25, target_component);
_mav_put_uint8_t(buf, 26, frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 27);
#else
mavlink_safety_set_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 27);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA;
return mavlink_finalize_message(msg, system_id, component_id, 27, 15);
}
 
/**
* @brief Pack a safety_set_allowed_area message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t frame,float p1x,float p1y,float p1z,float p2x,float p2y,float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, target_system);
_mav_put_uint8_t(buf, 25, target_component);
_mav_put_uint8_t(buf, 26, frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 27);
#else
mavlink_safety_set_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 27);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 27, 15);
}
 
/**
* @brief Encode a safety_set_allowed_area struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param safety_set_allowed_area C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_safety_set_allowed_area_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_safety_set_allowed_area_t* safety_set_allowed_area)
{
return mavlink_msg_safety_set_allowed_area_pack(system_id, component_id, msg, safety_set_allowed_area->target_system, safety_set_allowed_area->target_component, safety_set_allowed_area->frame, safety_set_allowed_area->p1x, safety_set_allowed_area->p1y, safety_set_allowed_area->p1z, safety_set_allowed_area->p2x, safety_set_allowed_area->p2y, safety_set_allowed_area->p2z);
}
 
/**
* @brief Send a safety_set_allowed_area message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param frame Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
* @param p1x x position 1 / Latitude 1
* @param p1y y position 1 / Longitude 1
* @param p1z z position 1 / Altitude 1
* @param p2x x position 2 / Latitude 2
* @param p2y y position 2 / Longitude 2
* @param p2z z position 2 / Altitude 2
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_safety_set_allowed_area_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t frame, float p1x, float p1y, float p1z, float p2x, float p2y, float p2z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[27];
_mav_put_float(buf, 0, p1x);
_mav_put_float(buf, 4, p1y);
_mav_put_float(buf, 8, p1z);
_mav_put_float(buf, 12, p2x);
_mav_put_float(buf, 16, p2y);
_mav_put_float(buf, 20, p2z);
_mav_put_uint8_t(buf, 24, target_system);
_mav_put_uint8_t(buf, 25, target_component);
_mav_put_uint8_t(buf, 26, frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA, buf, 27, 15);
#else
mavlink_safety_set_allowed_area_t packet;
packet.p1x = p1x;
packet.p1y = p1y;
packet.p1z = p1z;
packet.p2x = p2x;
packet.p2y = p2y;
packet.p2z = p2z;
packet.target_system = target_system;
packet.target_component = target_component;
packet.frame = frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA, (const char *)&packet, 27, 15);
#endif
}
 
#endif
 
// MESSAGE SAFETY_SET_ALLOWED_AREA UNPACKING
 
 
/**
* @brief Get field target_system from safety_set_allowed_area message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 24);
}
 
/**
* @brief Get field target_component from safety_set_allowed_area message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 25);
}
 
/**
* @brief Get field frame from safety_set_allowed_area message
*
* @return Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.
*/
static inline uint8_t mavlink_msg_safety_set_allowed_area_get_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 26);
}
 
/**
* @brief Get field p1x from safety_set_allowed_area message
*
* @return x position 1 / Latitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field p1y from safety_set_allowed_area message
*
* @return y position 1 / Longitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field p1z from safety_set_allowed_area message
*
* @return z position 1 / Altitude 1
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p1z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field p2x from safety_set_allowed_area message
*
* @return x position 2 / Latitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field p2y from safety_set_allowed_area message
*
* @return y position 2 / Longitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field p2z from safety_set_allowed_area message
*
* @return z position 2 / Altitude 2
*/
static inline float mavlink_msg_safety_set_allowed_area_get_p2z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Decode a safety_set_allowed_area message into a struct
*
* @param msg The message to decode
* @param safety_set_allowed_area C-struct to decode the message contents into
*/
static inline void mavlink_msg_safety_set_allowed_area_decode(const mavlink_message_t* msg, mavlink_safety_set_allowed_area_t* safety_set_allowed_area)
{
#if MAVLINK_NEED_BYTE_SWAP
safety_set_allowed_area->p1x = mavlink_msg_safety_set_allowed_area_get_p1x(msg);
safety_set_allowed_area->p1y = mavlink_msg_safety_set_allowed_area_get_p1y(msg);
safety_set_allowed_area->p1z = mavlink_msg_safety_set_allowed_area_get_p1z(msg);
safety_set_allowed_area->p2x = mavlink_msg_safety_set_allowed_area_get_p2x(msg);
safety_set_allowed_area->p2y = mavlink_msg_safety_set_allowed_area_get_p2y(msg);
safety_set_allowed_area->p2z = mavlink_msg_safety_set_allowed_area_get_p2z(msg);
safety_set_allowed_area->target_system = mavlink_msg_safety_set_allowed_area_get_target_system(msg);
safety_set_allowed_area->target_component = mavlink_msg_safety_set_allowed_area_get_target_component(msg);
safety_set_allowed_area->frame = mavlink_msg_safety_set_allowed_area_get_frame(msg);
#else
memcpy(safety_set_allowed_area, _MAV_PAYLOAD(msg), 27);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_scaled_imu.h
0,0 → 1,342
// MESSAGE SCALED_IMU PACKING
 
#define MAVLINK_MSG_ID_SCALED_IMU 26
 
typedef struct __mavlink_scaled_imu_t
{
uint32_t time_boot_ms; ///< Timestamp (milliseconds since system boot)
int16_t xacc; ///< X acceleration (mg)
int16_t yacc; ///< Y acceleration (mg)
int16_t zacc; ///< Z acceleration (mg)
int16_t xgyro; ///< Angular speed around X axis (millirad /sec)
int16_t ygyro; ///< Angular speed around Y axis (millirad /sec)
int16_t zgyro; ///< Angular speed around Z axis (millirad /sec)
int16_t xmag; ///< X Magnetic field (milli tesla)
int16_t ymag; ///< Y Magnetic field (milli tesla)
int16_t zmag; ///< Z Magnetic field (milli tesla)
} mavlink_scaled_imu_t;
 
#define MAVLINK_MSG_ID_SCALED_IMU_LEN 22
#define MAVLINK_MSG_ID_26_LEN 22
 
 
 
#define MAVLINK_MESSAGE_INFO_SCALED_IMU { \
"SCALED_IMU", \
10, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_scaled_imu_t, time_boot_ms) }, \
{ "xacc", NULL, MAVLINK_TYPE_INT16_T, 0, 4, offsetof(mavlink_scaled_imu_t, xacc) }, \
{ "yacc", NULL, MAVLINK_TYPE_INT16_T, 0, 6, offsetof(mavlink_scaled_imu_t, yacc) }, \
{ "zacc", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_scaled_imu_t, zacc) }, \
{ "xgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 10, offsetof(mavlink_scaled_imu_t, xgyro) }, \
{ "ygyro", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_scaled_imu_t, ygyro) }, \
{ "zgyro", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_scaled_imu_t, zgyro) }, \
{ "xmag", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_scaled_imu_t, xmag) }, \
{ "ymag", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_scaled_imu_t, ymag) }, \
{ "zmag", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_scaled_imu_t, zmag) }, \
} \
}
 
 
/**
* @brief Pack a scaled_imu message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_imu_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, xacc);
_mav_put_int16_t(buf, 6, yacc);
_mav_put_int16_t(buf, 8, zacc);
_mav_put_int16_t(buf, 10, xgyro);
_mav_put_int16_t(buf, 12, ygyro);
_mav_put_int16_t(buf, 14, zgyro);
_mav_put_int16_t(buf, 16, xmag);
_mav_put_int16_t(buf, 18, ymag);
_mav_put_int16_t(buf, 20, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_scaled_imu_t packet;
packet.time_boot_ms = time_boot_ms;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_IMU;
return mavlink_finalize_message(msg, system_id, component_id, 22, 170);
}
 
/**
* @brief Pack a scaled_imu message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_imu_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,int16_t xacc,int16_t yacc,int16_t zacc,int16_t xgyro,int16_t ygyro,int16_t zgyro,int16_t xmag,int16_t ymag,int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, xacc);
_mav_put_int16_t(buf, 6, yacc);
_mav_put_int16_t(buf, 8, zacc);
_mav_put_int16_t(buf, 10, xgyro);
_mav_put_int16_t(buf, 12, ygyro);
_mav_put_int16_t(buf, 14, zgyro);
_mav_put_int16_t(buf, 16, xmag);
_mav_put_int16_t(buf, 18, ymag);
_mav_put_int16_t(buf, 20, zmag);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 22);
#else
mavlink_scaled_imu_t packet;
packet.time_boot_ms = time_boot_ms;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 22);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_IMU;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 22, 170);
}
 
/**
* @brief Encode a scaled_imu struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param scaled_imu C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_scaled_imu_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_scaled_imu_t* scaled_imu)
{
return mavlink_msg_scaled_imu_pack(system_id, component_id, msg, scaled_imu->time_boot_ms, scaled_imu->xacc, scaled_imu->yacc, scaled_imu->zacc, scaled_imu->xgyro, scaled_imu->ygyro, scaled_imu->zgyro, scaled_imu->xmag, scaled_imu->ymag, scaled_imu->zmag);
}
 
/**
* @brief Send a scaled_imu message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (milliseconds since system boot)
* @param xacc X acceleration (mg)
* @param yacc Y acceleration (mg)
* @param zacc Z acceleration (mg)
* @param xgyro Angular speed around X axis (millirad /sec)
* @param ygyro Angular speed around Y axis (millirad /sec)
* @param zgyro Angular speed around Z axis (millirad /sec)
* @param xmag X Magnetic field (milli tesla)
* @param ymag Y Magnetic field (milli tesla)
* @param zmag Z Magnetic field (milli tesla)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_scaled_imu_send(mavlink_channel_t chan, uint32_t time_boot_ms, int16_t xacc, int16_t yacc, int16_t zacc, int16_t xgyro, int16_t ygyro, int16_t zgyro, int16_t xmag, int16_t ymag, int16_t zmag)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[22];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_int16_t(buf, 4, xacc);
_mav_put_int16_t(buf, 6, yacc);
_mav_put_int16_t(buf, 8, zacc);
_mav_put_int16_t(buf, 10, xgyro);
_mav_put_int16_t(buf, 12, ygyro);
_mav_put_int16_t(buf, 14, zgyro);
_mav_put_int16_t(buf, 16, xmag);
_mav_put_int16_t(buf, 18, ymag);
_mav_put_int16_t(buf, 20, zmag);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_IMU, buf, 22, 170);
#else
mavlink_scaled_imu_t packet;
packet.time_boot_ms = time_boot_ms;
packet.xacc = xacc;
packet.yacc = yacc;
packet.zacc = zacc;
packet.xgyro = xgyro;
packet.ygyro = ygyro;
packet.zgyro = zgyro;
packet.xmag = xmag;
packet.ymag = ymag;
packet.zmag = zmag;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_IMU, (const char *)&packet, 22, 170);
#endif
}
 
#endif
 
// MESSAGE SCALED_IMU UNPACKING
 
 
/**
* @brief Get field time_boot_ms from scaled_imu message
*
* @return Timestamp (milliseconds since system boot)
*/
static inline uint32_t mavlink_msg_scaled_imu_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field xacc from scaled_imu message
*
* @return X acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 4);
}
 
/**
* @brief Get field yacc from scaled_imu message
*
* @return Y acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_yacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 6);
}
 
/**
* @brief Get field zacc from scaled_imu message
*
* @return Z acceleration (mg)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zacc(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 8);
}
 
/**
* @brief Get field xgyro from scaled_imu message
*
* @return Angular speed around X axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 10);
}
 
/**
* @brief Get field ygyro from scaled_imu message
*
* @return Angular speed around Y axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_ygyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Get field zgyro from scaled_imu message
*
* @return Angular speed around Z axis (millirad /sec)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zgyro(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 14);
}
 
/**
* @brief Get field xmag from scaled_imu message
*
* @return X Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_xmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field ymag from scaled_imu message
*
* @return Y Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_ymag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 18);
}
 
/**
* @brief Get field zmag from scaled_imu message
*
* @return Z Magnetic field (milli tesla)
*/
static inline int16_t mavlink_msg_scaled_imu_get_zmag(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 20);
}
 
/**
* @brief Decode a scaled_imu message into a struct
*
* @param msg The message to decode
* @param scaled_imu C-struct to decode the message contents into
*/
static inline void mavlink_msg_scaled_imu_decode(const mavlink_message_t* msg, mavlink_scaled_imu_t* scaled_imu)
{
#if MAVLINK_NEED_BYTE_SWAP
scaled_imu->time_boot_ms = mavlink_msg_scaled_imu_get_time_boot_ms(msg);
scaled_imu->xacc = mavlink_msg_scaled_imu_get_xacc(msg);
scaled_imu->yacc = mavlink_msg_scaled_imu_get_yacc(msg);
scaled_imu->zacc = mavlink_msg_scaled_imu_get_zacc(msg);
scaled_imu->xgyro = mavlink_msg_scaled_imu_get_xgyro(msg);
scaled_imu->ygyro = mavlink_msg_scaled_imu_get_ygyro(msg);
scaled_imu->zgyro = mavlink_msg_scaled_imu_get_zgyro(msg);
scaled_imu->xmag = mavlink_msg_scaled_imu_get_xmag(msg);
scaled_imu->ymag = mavlink_msg_scaled_imu_get_ymag(msg);
scaled_imu->zmag = mavlink_msg_scaled_imu_get_zmag(msg);
#else
memcpy(scaled_imu, _MAV_PAYLOAD(msg), 22);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_scaled_pressure.h
0,0 → 1,210
// MESSAGE SCALED_PRESSURE PACKING
 
#define MAVLINK_MSG_ID_SCALED_PRESSURE 29
 
typedef struct __mavlink_scaled_pressure_t
{
uint32_t time_boot_ms; ///< Timestamp (microseconds since UNIX epoch or microseconds since system boot)
float press_abs; ///< Absolute pressure (hectopascal)
float press_diff; ///< Differential pressure 1 (hectopascal)
int16_t temperature; ///< Temperature measurement (0.01 degrees celsius)
} mavlink_scaled_pressure_t;
 
#define MAVLINK_MSG_ID_SCALED_PRESSURE_LEN 14
#define MAVLINK_MSG_ID_29_LEN 14
 
 
 
#define MAVLINK_MESSAGE_INFO_SCALED_PRESSURE { \
"SCALED_PRESSURE", \
4, \
{ { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_scaled_pressure_t, time_boot_ms) }, \
{ "press_abs", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_scaled_pressure_t, press_abs) }, \
{ "press_diff", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_scaled_pressure_t, press_diff) }, \
{ "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_scaled_pressure_t, temperature) }, \
} \
}
 
 
/**
* @brief Pack a scaled_pressure message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_boot_ms Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_pressure_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_boot_ms, float press_abs, float press_diff, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, press_abs);
_mav_put_float(buf, 8, press_diff);
_mav_put_int16_t(buf, 12, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_scaled_pressure_t packet;
packet.time_boot_ms = time_boot_ms;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_PRESSURE;
return mavlink_finalize_message(msg, system_id, component_id, 14, 115);
}
 
/**
* @brief Pack a scaled_pressure message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_boot_ms Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_scaled_pressure_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_boot_ms,float press_abs,float press_diff,int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, press_abs);
_mav_put_float(buf, 8, press_diff);
_mav_put_int16_t(buf, 12, temperature);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 14);
#else
mavlink_scaled_pressure_t packet;
packet.time_boot_ms = time_boot_ms;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 14);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SCALED_PRESSURE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 14, 115);
}
 
/**
* @brief Encode a scaled_pressure struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param scaled_pressure C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_scaled_pressure_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_scaled_pressure_t* scaled_pressure)
{
return mavlink_msg_scaled_pressure_pack(system_id, component_id, msg, scaled_pressure->time_boot_ms, scaled_pressure->press_abs, scaled_pressure->press_diff, scaled_pressure->temperature);
}
 
/**
* @brief Send a scaled_pressure message
* @param chan MAVLink channel to send the message
*
* @param time_boot_ms Timestamp (microseconds since UNIX epoch or microseconds since system boot)
* @param press_abs Absolute pressure (hectopascal)
* @param press_diff Differential pressure 1 (hectopascal)
* @param temperature Temperature measurement (0.01 degrees celsius)
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_scaled_pressure_send(mavlink_channel_t chan, uint32_t time_boot_ms, float press_abs, float press_diff, int16_t temperature)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[14];
_mav_put_uint32_t(buf, 0, time_boot_ms);
_mav_put_float(buf, 4, press_abs);
_mav_put_float(buf, 8, press_diff);
_mav_put_int16_t(buf, 12, temperature);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_PRESSURE, buf, 14, 115);
#else
mavlink_scaled_pressure_t packet;
packet.time_boot_ms = time_boot_ms;
packet.press_abs = press_abs;
packet.press_diff = press_diff;
packet.temperature = temperature;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SCALED_PRESSURE, (const char *)&packet, 14, 115);
#endif
}
 
#endif
 
// MESSAGE SCALED_PRESSURE UNPACKING
 
 
/**
* @brief Get field time_boot_ms from scaled_pressure message
*
* @return Timestamp (microseconds since UNIX epoch or microseconds since system boot)
*/
static inline uint32_t mavlink_msg_scaled_pressure_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field press_abs from scaled_pressure message
*
* @return Absolute pressure (hectopascal)
*/
static inline float mavlink_msg_scaled_pressure_get_press_abs(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field press_diff from scaled_pressure message
*
* @return Differential pressure 1 (hectopascal)
*/
static inline float mavlink_msg_scaled_pressure_get_press_diff(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field temperature from scaled_pressure message
*
* @return Temperature measurement (0.01 degrees celsius)
*/
static inline int16_t mavlink_msg_scaled_pressure_get_temperature(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Decode a scaled_pressure message into a struct
*
* @param msg The message to decode
* @param scaled_pressure C-struct to decode the message contents into
*/
static inline void mavlink_msg_scaled_pressure_decode(const mavlink_message_t* msg, mavlink_scaled_pressure_t* scaled_pressure)
{
#if MAVLINK_NEED_BYTE_SWAP
scaled_pressure->time_boot_ms = mavlink_msg_scaled_pressure_get_time_boot_ms(msg);
scaled_pressure->press_abs = mavlink_msg_scaled_pressure_get_press_abs(msg);
scaled_pressure->press_diff = mavlink_msg_scaled_pressure_get_press_diff(msg);
scaled_pressure->temperature = mavlink_msg_scaled_pressure_get_temperature(msg);
#else
memcpy(scaled_pressure, _MAV_PAYLOAD(msg), 14);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_servo_output_raw.h
0,0 → 1,342
// MESSAGE SERVO_OUTPUT_RAW PACKING
 
#define MAVLINK_MSG_ID_SERVO_OUTPUT_RAW 36
 
typedef struct __mavlink_servo_output_raw_t
{
uint32_t time_usec; ///< Timestamp (since UNIX epoch or microseconds since system boot)
uint16_t servo1_raw; ///< Servo output 1 value, in microseconds
uint16_t servo2_raw; ///< Servo output 2 value, in microseconds
uint16_t servo3_raw; ///< Servo output 3 value, in microseconds
uint16_t servo4_raw; ///< Servo output 4 value, in microseconds
uint16_t servo5_raw; ///< Servo output 5 value, in microseconds
uint16_t servo6_raw; ///< Servo output 6 value, in microseconds
uint16_t servo7_raw; ///< Servo output 7 value, in microseconds
uint16_t servo8_raw; ///< Servo output 8 value, in microseconds
uint8_t port; ///< Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
} mavlink_servo_output_raw_t;
 
#define MAVLINK_MSG_ID_SERVO_OUTPUT_RAW_LEN 21
#define MAVLINK_MSG_ID_36_LEN 21
 
 
 
#define MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW { \
"SERVO_OUTPUT_RAW", \
10, \
{ { "time_usec", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_servo_output_raw_t, time_usec) }, \
{ "servo1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_servo_output_raw_t, servo1_raw) }, \
{ "servo2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_servo_output_raw_t, servo2_raw) }, \
{ "servo3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_servo_output_raw_t, servo3_raw) }, \
{ "servo4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_servo_output_raw_t, servo4_raw) }, \
{ "servo5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_servo_output_raw_t, servo5_raw) }, \
{ "servo6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_servo_output_raw_t, servo6_raw) }, \
{ "servo7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_servo_output_raw_t, servo7_raw) }, \
{ "servo8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_servo_output_raw_t, servo8_raw) }, \
{ "port", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_servo_output_raw_t, port) }, \
} \
}
 
 
/**
* @brief Pack a servo_output_raw message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_usec Timestamp (since UNIX epoch or microseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_servo_output_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t time_usec, uint8_t port, uint16_t servo1_raw, uint16_t servo2_raw, uint16_t servo3_raw, uint16_t servo4_raw, uint16_t servo5_raw, uint16_t servo6_raw, uint16_t servo7_raw, uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint32_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 4, servo1_raw);
_mav_put_uint16_t(buf, 6, servo2_raw);
_mav_put_uint16_t(buf, 8, servo3_raw);
_mav_put_uint16_t(buf, 10, servo4_raw);
_mav_put_uint16_t(buf, 12, servo5_raw);
_mav_put_uint16_t(buf, 14, servo6_raw);
_mav_put_uint16_t(buf, 16, servo7_raw);
_mav_put_uint16_t(buf, 18, servo8_raw);
_mav_put_uint8_t(buf, 20, port);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_servo_output_raw_t packet;
packet.time_usec = time_usec;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
packet.port = port;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SERVO_OUTPUT_RAW;
return mavlink_finalize_message(msg, system_id, component_id, 21, 222);
}
 
/**
* @brief Pack a servo_output_raw message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_usec Timestamp (since UNIX epoch or microseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_servo_output_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t time_usec,uint8_t port,uint16_t servo1_raw,uint16_t servo2_raw,uint16_t servo3_raw,uint16_t servo4_raw,uint16_t servo5_raw,uint16_t servo6_raw,uint16_t servo7_raw,uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint32_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 4, servo1_raw);
_mav_put_uint16_t(buf, 6, servo2_raw);
_mav_put_uint16_t(buf, 8, servo3_raw);
_mav_put_uint16_t(buf, 10, servo4_raw);
_mav_put_uint16_t(buf, 12, servo5_raw);
_mav_put_uint16_t(buf, 14, servo6_raw);
_mav_put_uint16_t(buf, 16, servo7_raw);
_mav_put_uint16_t(buf, 18, servo8_raw);
_mav_put_uint8_t(buf, 20, port);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 21);
#else
mavlink_servo_output_raw_t packet;
packet.time_usec = time_usec;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
packet.port = port;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 21);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SERVO_OUTPUT_RAW;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 21, 222);
}
 
/**
* @brief Encode a servo_output_raw struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param servo_output_raw C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_servo_output_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_servo_output_raw_t* servo_output_raw)
{
return mavlink_msg_servo_output_raw_pack(system_id, component_id, msg, servo_output_raw->time_usec, servo_output_raw->port, servo_output_raw->servo1_raw, servo_output_raw->servo2_raw, servo_output_raw->servo3_raw, servo_output_raw->servo4_raw, servo_output_raw->servo5_raw, servo_output_raw->servo6_raw, servo_output_raw->servo7_raw, servo_output_raw->servo8_raw);
}
 
/**
* @brief Send a servo_output_raw message
* @param chan MAVLink channel to send the message
*
* @param time_usec Timestamp (since UNIX epoch or microseconds since system boot)
* @param port Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
* @param servo1_raw Servo output 1 value, in microseconds
* @param servo2_raw Servo output 2 value, in microseconds
* @param servo3_raw Servo output 3 value, in microseconds
* @param servo4_raw Servo output 4 value, in microseconds
* @param servo5_raw Servo output 5 value, in microseconds
* @param servo6_raw Servo output 6 value, in microseconds
* @param servo7_raw Servo output 7 value, in microseconds
* @param servo8_raw Servo output 8 value, in microseconds
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_servo_output_raw_send(mavlink_channel_t chan, uint32_t time_usec, uint8_t port, uint16_t servo1_raw, uint16_t servo2_raw, uint16_t servo3_raw, uint16_t servo4_raw, uint16_t servo5_raw, uint16_t servo6_raw, uint16_t servo7_raw, uint16_t servo8_raw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[21];
_mav_put_uint32_t(buf, 0, time_usec);
_mav_put_uint16_t(buf, 4, servo1_raw);
_mav_put_uint16_t(buf, 6, servo2_raw);
_mav_put_uint16_t(buf, 8, servo3_raw);
_mav_put_uint16_t(buf, 10, servo4_raw);
_mav_put_uint16_t(buf, 12, servo5_raw);
_mav_put_uint16_t(buf, 14, servo6_raw);
_mav_put_uint16_t(buf, 16, servo7_raw);
_mav_put_uint16_t(buf, 18, servo8_raw);
_mav_put_uint8_t(buf, 20, port);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SERVO_OUTPUT_RAW, buf, 21, 222);
#else
mavlink_servo_output_raw_t packet;
packet.time_usec = time_usec;
packet.servo1_raw = servo1_raw;
packet.servo2_raw = servo2_raw;
packet.servo3_raw = servo3_raw;
packet.servo4_raw = servo4_raw;
packet.servo5_raw = servo5_raw;
packet.servo6_raw = servo6_raw;
packet.servo7_raw = servo7_raw;
packet.servo8_raw = servo8_raw;
packet.port = port;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SERVO_OUTPUT_RAW, (const char *)&packet, 21, 222);
#endif
}
 
#endif
 
// MESSAGE SERVO_OUTPUT_RAW UNPACKING
 
 
/**
* @brief Get field time_usec from servo_output_raw message
*
* @return Timestamp (since UNIX epoch or microseconds since system boot)
*/
static inline uint32_t mavlink_msg_servo_output_raw_get_time_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field port from servo_output_raw message
*
* @return Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.
*/
static inline uint8_t mavlink_msg_servo_output_raw_get_port(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 20);
}
 
/**
* @brief Get field servo1_raw from servo_output_raw message
*
* @return Servo output 1 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo1_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field servo2_raw from servo_output_raw message
*
* @return Servo output 2 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo2_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Get field servo3_raw from servo_output_raw message
*
* @return Servo output 3 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo3_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 8);
}
 
/**
* @brief Get field servo4_raw from servo_output_raw message
*
* @return Servo output 4 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo4_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 10);
}
 
/**
* @brief Get field servo5_raw from servo_output_raw message
*
* @return Servo output 5 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo5_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field servo6_raw from servo_output_raw message
*
* @return Servo output 6 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo6_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field servo7_raw from servo_output_raw message
*
* @return Servo output 7 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo7_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 16);
}
 
/**
* @brief Get field servo8_raw from servo_output_raw message
*
* @return Servo output 8 value, in microseconds
*/
static inline uint16_t mavlink_msg_servo_output_raw_get_servo8_raw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 18);
}
 
/**
* @brief Decode a servo_output_raw message into a struct
*
* @param msg The message to decode
* @param servo_output_raw C-struct to decode the message contents into
*/
static inline void mavlink_msg_servo_output_raw_decode(const mavlink_message_t* msg, mavlink_servo_output_raw_t* servo_output_raw)
{
#if MAVLINK_NEED_BYTE_SWAP
servo_output_raw->time_usec = mavlink_msg_servo_output_raw_get_time_usec(msg);
servo_output_raw->servo1_raw = mavlink_msg_servo_output_raw_get_servo1_raw(msg);
servo_output_raw->servo2_raw = mavlink_msg_servo_output_raw_get_servo2_raw(msg);
servo_output_raw->servo3_raw = mavlink_msg_servo_output_raw_get_servo3_raw(msg);
servo_output_raw->servo4_raw = mavlink_msg_servo_output_raw_get_servo4_raw(msg);
servo_output_raw->servo5_raw = mavlink_msg_servo_output_raw_get_servo5_raw(msg);
servo_output_raw->servo6_raw = mavlink_msg_servo_output_raw_get_servo6_raw(msg);
servo_output_raw->servo7_raw = mavlink_msg_servo_output_raw_get_servo7_raw(msg);
servo_output_raw->servo8_raw = mavlink_msg_servo_output_raw_get_servo8_raw(msg);
servo_output_raw->port = mavlink_msg_servo_output_raw_get_port(msg);
#else
memcpy(servo_output_raw, _MAV_PAYLOAD(msg), 21);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_global_position_setpoint_int.h
0,0 → 1,232
// MESSAGE SET_GLOBAL_POSITION_SETPOINT_INT PACKING
 
#define MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT 53
 
typedef struct __mavlink_set_global_position_setpoint_int_t
{
int32_t latitude; ///< WGS84 Latitude position in degrees * 1E7
int32_t longitude; ///< WGS84 Longitude position in degrees * 1E7
int32_t altitude; ///< WGS84 Altitude in meters * 1000 (positive for up)
int16_t yaw; ///< Desired yaw angle in degrees * 100
uint8_t coordinate_frame; ///< Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
} mavlink_set_global_position_setpoint_int_t;
 
#define MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT_LEN 15
#define MAVLINK_MSG_ID_53_LEN 15
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_GLOBAL_POSITION_SETPOINT_INT { \
"SET_GLOBAL_POSITION_SETPOINT_INT", \
5, \
{ { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_set_global_position_setpoint_int_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_set_global_position_setpoint_int_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_set_global_position_setpoint_int_t, altitude) }, \
{ "yaw", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_set_global_position_setpoint_int_t, yaw) }, \
{ "coordinate_frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 14, offsetof(mavlink_set_global_position_setpoint_int_t, coordinate_frame) }, \
} \
}
 
 
/**
* @brief Pack a set_global_position_setpoint_int message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_global_position_setpoint_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t coordinate_frame, int32_t latitude, int32_t longitude, int32_t altitude, int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_set_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT;
return mavlink_finalize_message(msg, system_id, component_id, 15, 33);
}
 
/**
* @brief Pack a set_global_position_setpoint_int message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_global_position_setpoint_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t coordinate_frame,int32_t latitude,int32_t longitude,int32_t altitude,int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 15);
#else
mavlink_set_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 15);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 15, 33);
}
 
/**
* @brief Encode a set_global_position_setpoint_int struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_global_position_setpoint_int C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_global_position_setpoint_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_global_position_setpoint_int_t* set_global_position_setpoint_int)
{
return mavlink_msg_set_global_position_setpoint_int_pack(system_id, component_id, msg, set_global_position_setpoint_int->coordinate_frame, set_global_position_setpoint_int->latitude, set_global_position_setpoint_int->longitude, set_global_position_setpoint_int->altitude, set_global_position_setpoint_int->yaw);
}
 
/**
* @brief Send a set_global_position_setpoint_int message
* @param chan MAVLink channel to send the message
*
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
* @param latitude WGS84 Latitude position in degrees * 1E7
* @param longitude WGS84 Longitude position in degrees * 1E7
* @param altitude WGS84 Altitude in meters * 1000 (positive for up)
* @param yaw Desired yaw angle in degrees * 100
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_global_position_setpoint_int_send(mavlink_channel_t chan, uint8_t coordinate_frame, int32_t latitude, int32_t longitude, int32_t altitude, int16_t yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[15];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_int16_t(buf, 12, yaw);
_mav_put_uint8_t(buf, 14, coordinate_frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT, buf, 15, 33);
#else
mavlink_set_global_position_setpoint_int_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.yaw = yaw;
packet.coordinate_frame = coordinate_frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT, (const char *)&packet, 15, 33);
#endif
}
 
#endif
 
// MESSAGE SET_GLOBAL_POSITION_SETPOINT_INT UNPACKING
 
 
/**
* @brief Get field coordinate_frame from set_global_position_setpoint_int message
*
* @return Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT
*/
static inline uint8_t mavlink_msg_set_global_position_setpoint_int_get_coordinate_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 14);
}
 
/**
* @brief Get field latitude from set_global_position_setpoint_int message
*
* @return WGS84 Latitude position in degrees * 1E7
*/
static inline int32_t mavlink_msg_set_global_position_setpoint_int_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field longitude from set_global_position_setpoint_int message
*
* @return WGS84 Longitude position in degrees * 1E7
*/
static inline int32_t mavlink_msg_set_global_position_setpoint_int_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field altitude from set_global_position_setpoint_int message
*
* @return WGS84 Altitude in meters * 1000 (positive for up)
*/
static inline int32_t mavlink_msg_set_global_position_setpoint_int_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Get field yaw from set_global_position_setpoint_int message
*
* @return Desired yaw angle in degrees * 100
*/
static inline int16_t mavlink_msg_set_global_position_setpoint_int_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 12);
}
 
/**
* @brief Decode a set_global_position_setpoint_int message into a struct
*
* @param msg The message to decode
* @param set_global_position_setpoint_int C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_global_position_setpoint_int_decode(const mavlink_message_t* msg, mavlink_set_global_position_setpoint_int_t* set_global_position_setpoint_int)
{
#if MAVLINK_NEED_BYTE_SWAP
set_global_position_setpoint_int->latitude = mavlink_msg_set_global_position_setpoint_int_get_latitude(msg);
set_global_position_setpoint_int->longitude = mavlink_msg_set_global_position_setpoint_int_get_longitude(msg);
set_global_position_setpoint_int->altitude = mavlink_msg_set_global_position_setpoint_int_get_altitude(msg);
set_global_position_setpoint_int->yaw = mavlink_msg_set_global_position_setpoint_int_get_yaw(msg);
set_global_position_setpoint_int->coordinate_frame = mavlink_msg_set_global_position_setpoint_int_get_coordinate_frame(msg);
#else
memcpy(set_global_position_setpoint_int, _MAV_PAYLOAD(msg), 15);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_gps_global_origin.h
0,0 → 1,210
// MESSAGE SET_GPS_GLOBAL_ORIGIN PACKING
 
#define MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN 48
 
typedef struct __mavlink_set_gps_global_origin_t
{
int32_t latitude; ///< global position * 1E7
int32_t longitude; ///< global position * 1E7
int32_t altitude; ///< global position * 1000
uint8_t target_system; ///< System ID
} mavlink_set_gps_global_origin_t;
 
#define MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN_LEN 13
#define MAVLINK_MSG_ID_48_LEN 13
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_GPS_GLOBAL_ORIGIN { \
"SET_GPS_GLOBAL_ORIGIN", \
4, \
{ { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_set_gps_global_origin_t, latitude) }, \
{ "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_set_gps_global_origin_t, longitude) }, \
{ "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_set_gps_global_origin_t, altitude) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_set_gps_global_origin_t, target_system) }, \
} \
}
 
 
/**
* @brief Pack a set_gps_global_origin message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_gps_global_origin_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_uint8_t(buf, 12, target_system);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_set_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.target_system = target_system;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN;
return mavlink_finalize_message(msg, system_id, component_id, 13, 41);
}
 
/**
* @brief Pack a set_gps_global_origin message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_gps_global_origin_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,int32_t latitude,int32_t longitude,int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_uint8_t(buf, 12, target_system);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 13);
#else
mavlink_set_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.target_system = target_system;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 13);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 13, 41);
}
 
/**
* @brief Encode a set_gps_global_origin struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_gps_global_origin C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_gps_global_origin_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_gps_global_origin_t* set_gps_global_origin)
{
return mavlink_msg_set_gps_global_origin_pack(system_id, component_id, msg, set_gps_global_origin->target_system, set_gps_global_origin->latitude, set_gps_global_origin->longitude, set_gps_global_origin->altitude);
}
 
/**
* @brief Send a set_gps_global_origin message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param latitude global position * 1E7
* @param longitude global position * 1E7
* @param altitude global position * 1000
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_gps_global_origin_send(mavlink_channel_t chan, uint8_t target_system, int32_t latitude, int32_t longitude, int32_t altitude)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[13];
_mav_put_int32_t(buf, 0, latitude);
_mav_put_int32_t(buf, 4, longitude);
_mav_put_int32_t(buf, 8, altitude);
_mav_put_uint8_t(buf, 12, target_system);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN, buf, 13, 41);
#else
mavlink_set_gps_global_origin_t packet;
packet.latitude = latitude;
packet.longitude = longitude;
packet.altitude = altitude;
packet.target_system = target_system;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN, (const char *)&packet, 13, 41);
#endif
}
 
#endif
 
// MESSAGE SET_GPS_GLOBAL_ORIGIN UNPACKING
 
 
/**
* @brief Get field target_system from set_gps_global_origin message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_gps_global_origin_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 12);
}
 
/**
* @brief Get field latitude from set_gps_global_origin message
*
* @return global position * 1E7
*/
static inline int32_t mavlink_msg_set_gps_global_origin_get_latitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field longitude from set_gps_global_origin message
*
* @return global position * 1E7
*/
static inline int32_t mavlink_msg_set_gps_global_origin_get_longitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field altitude from set_gps_global_origin message
*
* @return global position * 1000
*/
static inline int32_t mavlink_msg_set_gps_global_origin_get_altitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Decode a set_gps_global_origin message into a struct
*
* @param msg The message to decode
* @param set_gps_global_origin C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_gps_global_origin_decode(const mavlink_message_t* msg, mavlink_set_gps_global_origin_t* set_gps_global_origin)
{
#if MAVLINK_NEED_BYTE_SWAP
set_gps_global_origin->latitude = mavlink_msg_set_gps_global_origin_get_latitude(msg);
set_gps_global_origin->longitude = mavlink_msg_set_gps_global_origin_get_longitude(msg);
set_gps_global_origin->altitude = mavlink_msg_set_gps_global_origin_get_altitude(msg);
set_gps_global_origin->target_system = mavlink_msg_set_gps_global_origin_get_target_system(msg);
#else
memcpy(set_gps_global_origin, _MAV_PAYLOAD(msg), 13);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_local_position_setpoint.h
0,0 → 1,276
// MESSAGE SET_LOCAL_POSITION_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT 50
 
typedef struct __mavlink_set_local_position_setpoint_t
{
float x; ///< x position
float y; ///< y position
float z; ///< z position
float yaw; ///< Desired yaw angle
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
uint8_t coordinate_frame; ///< Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
} mavlink_set_local_position_setpoint_t;
 
#define MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT_LEN 19
#define MAVLINK_MSG_ID_50_LEN 19
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_LOCAL_POSITION_SETPOINT { \
"SET_LOCAL_POSITION_SETPOINT", \
7, \
{ { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_set_local_position_setpoint_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_set_local_position_setpoint_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_set_local_position_setpoint_t, z) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_set_local_position_setpoint_t, yaw) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_set_local_position_setpoint_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_set_local_position_setpoint_t, target_component) }, \
{ "coordinate_frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 18, offsetof(mavlink_set_local_position_setpoint_t, coordinate_frame) }, \
} \
}
 
 
/**
* @brief Pack a set_local_position_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_local_position_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, uint8_t coordinate_frame, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
_mav_put_uint8_t(buf, 18, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 19);
#else
mavlink_set_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.target_system = target_system;
packet.target_component = target_component;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 19);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 19, 214);
}
 
/**
* @brief Pack a set_local_position_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_local_position_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,uint8_t coordinate_frame,float x,float y,float z,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
_mav_put_uint8_t(buf, 18, coordinate_frame);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 19);
#else
mavlink_set_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.target_system = target_system;
packet.target_component = target_component;
packet.coordinate_frame = coordinate_frame;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 19);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 19, 214);
}
 
/**
* @brief Encode a set_local_position_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_local_position_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_local_position_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_local_position_setpoint_t* set_local_position_setpoint)
{
return mavlink_msg_set_local_position_setpoint_pack(system_id, component_id, msg, set_local_position_setpoint->target_system, set_local_position_setpoint->target_component, set_local_position_setpoint->coordinate_frame, set_local_position_setpoint->x, set_local_position_setpoint->y, set_local_position_setpoint->z, set_local_position_setpoint->yaw);
}
 
/**
* @brief Send a set_local_position_setpoint message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param coordinate_frame Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
* @param x x position
* @param y y position
* @param z z position
* @param yaw Desired yaw angle
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_local_position_setpoint_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t coordinate_frame, float x, float y, float z, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[19];
_mav_put_float(buf, 0, x);
_mav_put_float(buf, 4, y);
_mav_put_float(buf, 8, z);
_mav_put_float(buf, 12, yaw);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
_mav_put_uint8_t(buf, 18, coordinate_frame);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT, buf, 19, 214);
#else
mavlink_set_local_position_setpoint_t packet;
packet.x = x;
packet.y = y;
packet.z = z;
packet.yaw = yaw;
packet.target_system = target_system;
packet.target_component = target_component;
packet.coordinate_frame = coordinate_frame;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT, (const char *)&packet, 19, 214);
#endif
}
 
#endif
 
// MESSAGE SET_LOCAL_POSITION_SETPOINT UNPACKING
 
 
/**
* @brief Get field target_system from set_local_position_setpoint message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_local_position_setpoint_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field target_component from set_local_position_setpoint message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_local_position_setpoint_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field coordinate_frame from set_local_position_setpoint message
*
* @return Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU
*/
static inline uint8_t mavlink_msg_set_local_position_setpoint_get_coordinate_frame(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 18);
}
 
/**
* @brief Get field x from set_local_position_setpoint message
*
* @return x position
*/
static inline float mavlink_msg_set_local_position_setpoint_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field y from set_local_position_setpoint message
*
* @return y position
*/
static inline float mavlink_msg_set_local_position_setpoint_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field z from set_local_position_setpoint message
*
* @return z position
*/
static inline float mavlink_msg_set_local_position_setpoint_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field yaw from set_local_position_setpoint message
*
* @return Desired yaw angle
*/
static inline float mavlink_msg_set_local_position_setpoint_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a set_local_position_setpoint message into a struct
*
* @param msg The message to decode
* @param set_local_position_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_local_position_setpoint_decode(const mavlink_message_t* msg, mavlink_set_local_position_setpoint_t* set_local_position_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
set_local_position_setpoint->x = mavlink_msg_set_local_position_setpoint_get_x(msg);
set_local_position_setpoint->y = mavlink_msg_set_local_position_setpoint_get_y(msg);
set_local_position_setpoint->z = mavlink_msg_set_local_position_setpoint_get_z(msg);
set_local_position_setpoint->yaw = mavlink_msg_set_local_position_setpoint_get_yaw(msg);
set_local_position_setpoint->target_system = mavlink_msg_set_local_position_setpoint_get_target_system(msg);
set_local_position_setpoint->target_component = mavlink_msg_set_local_position_setpoint_get_target_component(msg);
set_local_position_setpoint->coordinate_frame = mavlink_msg_set_local_position_setpoint_get_coordinate_frame(msg);
#else
memcpy(set_local_position_setpoint, _MAV_PAYLOAD(msg), 19);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_mode.h
0,0 → 1,188
// MESSAGE SET_MODE PACKING
 
#define MAVLINK_MSG_ID_SET_MODE 11
 
typedef struct __mavlink_set_mode_t
{
uint32_t custom_mode; ///< The new autopilot-specific mode. This field can be ignored by an autopilot.
uint8_t target_system; ///< The system setting the mode
uint8_t base_mode; ///< The new base mode
} mavlink_set_mode_t;
 
#define MAVLINK_MSG_ID_SET_MODE_LEN 6
#define MAVLINK_MSG_ID_11_LEN 6
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_MODE { \
"SET_MODE", \
3, \
{ { "custom_mode", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_set_mode_t, custom_mode) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_set_mode_t, target_system) }, \
{ "base_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_set_mode_t, base_mode) }, \
} \
}
 
 
/**
* @brief Pack a set_mode message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system The system setting the mode
* @param base_mode The new base mode
* @param custom_mode The new autopilot-specific mode. This field can be ignored by an autopilot.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mode_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t base_mode, uint32_t custom_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, base_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_set_mode_t packet;
packet.custom_mode = custom_mode;
packet.target_system = target_system;
packet.base_mode = base_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MODE;
return mavlink_finalize_message(msg, system_id, component_id, 6, 89);
}
 
/**
* @brief Pack a set_mode message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system The system setting the mode
* @param base_mode The new base mode
* @param custom_mode The new autopilot-specific mode. This field can be ignored by an autopilot.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_mode_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t base_mode,uint32_t custom_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, base_mode);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 6);
#else
mavlink_set_mode_t packet;
packet.custom_mode = custom_mode;
packet.target_system = target_system;
packet.base_mode = base_mode;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 6);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_MODE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 6, 89);
}
 
/**
* @brief Encode a set_mode struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_mode C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_mode_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_mode_t* set_mode)
{
return mavlink_msg_set_mode_pack(system_id, component_id, msg, set_mode->target_system, set_mode->base_mode, set_mode->custom_mode);
}
 
/**
* @brief Send a set_mode message
* @param chan MAVLink channel to send the message
*
* @param target_system The system setting the mode
* @param base_mode The new base mode
* @param custom_mode The new autopilot-specific mode. This field can be ignored by an autopilot.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_mode_send(mavlink_channel_t chan, uint8_t target_system, uint8_t base_mode, uint32_t custom_mode)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[6];
_mav_put_uint32_t(buf, 0, custom_mode);
_mav_put_uint8_t(buf, 4, target_system);
_mav_put_uint8_t(buf, 5, base_mode);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MODE, buf, 6, 89);
#else
mavlink_set_mode_t packet;
packet.custom_mode = custom_mode;
packet.target_system = target_system;
packet.base_mode = base_mode;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_MODE, (const char *)&packet, 6, 89);
#endif
}
 
#endif
 
// MESSAGE SET_MODE UNPACKING
 
 
/**
* @brief Get field target_system from set_mode message
*
* @return The system setting the mode
*/
static inline uint8_t mavlink_msg_set_mode_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field base_mode from set_mode message
*
* @return The new base mode
*/
static inline uint8_t mavlink_msg_set_mode_get_base_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 5);
}
 
/**
* @brief Get field custom_mode from set_mode message
*
* @return The new autopilot-specific mode. This field can be ignored by an autopilot.
*/
static inline uint32_t mavlink_msg_set_mode_get_custom_mode(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Decode a set_mode message into a struct
*
* @param msg The message to decode
* @param set_mode C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_mode_decode(const mavlink_message_t* msg, mavlink_set_mode_t* set_mode)
{
#if MAVLINK_NEED_BYTE_SWAP
set_mode->custom_mode = mavlink_msg_set_mode_get_custom_mode(msg);
set_mode->target_system = mavlink_msg_set_mode_get_target_system(msg);
set_mode->base_mode = mavlink_msg_set_mode_get_base_mode(msg);
#else
memcpy(set_mode, _MAV_PAYLOAD(msg), 6);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_quad_motors_setpoint.h
0,0 → 1,232
// MESSAGE SET_QUAD_MOTORS_SETPOINT PACKING
 
#define MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT 60
 
typedef struct __mavlink_set_quad_motors_setpoint_t
{
uint16_t motor_front_nw; ///< Front motor in + configuration, front left motor in x configuration
uint16_t motor_right_ne; ///< Right motor in + configuration, front right motor in x configuration
uint16_t motor_back_se; ///< Back motor in + configuration, back right motor in x configuration
uint16_t motor_left_sw; ///< Left motor in + configuration, back left motor in x configuration
uint8_t target_system; ///< System ID of the system that should set these motor commands
} mavlink_set_quad_motors_setpoint_t;
 
#define MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT_LEN 9
#define MAVLINK_MSG_ID_60_LEN 9
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_QUAD_MOTORS_SETPOINT { \
"SET_QUAD_MOTORS_SETPOINT", \
5, \
{ { "motor_front_nw", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_set_quad_motors_setpoint_t, motor_front_nw) }, \
{ "motor_right_ne", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_set_quad_motors_setpoint_t, motor_right_ne) }, \
{ "motor_back_se", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_set_quad_motors_setpoint_t, motor_back_se) }, \
{ "motor_left_sw", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_set_quad_motors_setpoint_t, motor_left_sw) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_set_quad_motors_setpoint_t, target_system) }, \
} \
}
 
 
/**
* @brief Pack a set_quad_motors_setpoint message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID of the system that should set these motor commands
* @param motor_front_nw Front motor in + configuration, front left motor in x configuration
* @param motor_right_ne Right motor in + configuration, front right motor in x configuration
* @param motor_back_se Back motor in + configuration, back right motor in x configuration
* @param motor_left_sw Left motor in + configuration, back left motor in x configuration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint16_t motor_front_nw, uint16_t motor_right_ne, uint16_t motor_back_se, uint16_t motor_left_sw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, motor_front_nw);
_mav_put_uint16_t(buf, 2, motor_right_ne);
_mav_put_uint16_t(buf, 4, motor_back_se);
_mav_put_uint16_t(buf, 6, motor_left_sw);
_mav_put_uint8_t(buf, 8, target_system);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_set_quad_motors_setpoint_t packet;
packet.motor_front_nw = motor_front_nw;
packet.motor_right_ne = motor_right_ne;
packet.motor_back_se = motor_back_se;
packet.motor_left_sw = motor_left_sw;
packet.target_system = target_system;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT;
return mavlink_finalize_message(msg, system_id, component_id, 9, 30);
}
 
/**
* @brief Pack a set_quad_motors_setpoint message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID of the system that should set these motor commands
* @param motor_front_nw Front motor in + configuration, front left motor in x configuration
* @param motor_right_ne Right motor in + configuration, front right motor in x configuration
* @param motor_back_se Back motor in + configuration, back right motor in x configuration
* @param motor_left_sw Left motor in + configuration, back left motor in x configuration
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint16_t motor_front_nw,uint16_t motor_right_ne,uint16_t motor_back_se,uint16_t motor_left_sw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, motor_front_nw);
_mav_put_uint16_t(buf, 2, motor_right_ne);
_mav_put_uint16_t(buf, 4, motor_back_se);
_mav_put_uint16_t(buf, 6, motor_left_sw);
_mav_put_uint8_t(buf, 8, target_system);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 9);
#else
mavlink_set_quad_motors_setpoint_t packet;
packet.motor_front_nw = motor_front_nw;
packet.motor_right_ne = motor_right_ne;
packet.motor_back_se = motor_back_se;
packet.motor_left_sw = motor_left_sw;
packet.target_system = target_system;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 9);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 9, 30);
}
 
/**
* @brief Encode a set_quad_motors_setpoint struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_quad_motors_setpoint C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_quad_motors_setpoint_t* set_quad_motors_setpoint)
{
return mavlink_msg_set_quad_motors_setpoint_pack(system_id, component_id, msg, set_quad_motors_setpoint->target_system, set_quad_motors_setpoint->motor_front_nw, set_quad_motors_setpoint->motor_right_ne, set_quad_motors_setpoint->motor_back_se, set_quad_motors_setpoint->motor_left_sw);
}
 
/**
* @brief Send a set_quad_motors_setpoint message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID of the system that should set these motor commands
* @param motor_front_nw Front motor in + configuration, front left motor in x configuration
* @param motor_right_ne Right motor in + configuration, front right motor in x configuration
* @param motor_back_se Back motor in + configuration, back right motor in x configuration
* @param motor_left_sw Left motor in + configuration, back left motor in x configuration
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_quad_motors_setpoint_send(mavlink_channel_t chan, uint8_t target_system, uint16_t motor_front_nw, uint16_t motor_right_ne, uint16_t motor_back_se, uint16_t motor_left_sw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[9];
_mav_put_uint16_t(buf, 0, motor_front_nw);
_mav_put_uint16_t(buf, 2, motor_right_ne);
_mav_put_uint16_t(buf, 4, motor_back_se);
_mav_put_uint16_t(buf, 6, motor_left_sw);
_mav_put_uint8_t(buf, 8, target_system);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT, buf, 9, 30);
#else
mavlink_set_quad_motors_setpoint_t packet;
packet.motor_front_nw = motor_front_nw;
packet.motor_right_ne = motor_right_ne;
packet.motor_back_se = motor_back_se;
packet.motor_left_sw = motor_left_sw;
packet.target_system = target_system;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_QUAD_MOTORS_SETPOINT, (const char *)&packet, 9, 30);
#endif
}
 
#endif
 
// MESSAGE SET_QUAD_MOTORS_SETPOINT UNPACKING
 
 
/**
* @brief Get field target_system from set_quad_motors_setpoint message
*
* @return System ID of the system that should set these motor commands
*/
static inline uint8_t mavlink_msg_set_quad_motors_setpoint_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 8);
}
 
/**
* @brief Get field motor_front_nw from set_quad_motors_setpoint message
*
* @return Front motor in + configuration, front left motor in x configuration
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_get_motor_front_nw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 0);
}
 
/**
* @brief Get field motor_right_ne from set_quad_motors_setpoint message
*
* @return Right motor in + configuration, front right motor in x configuration
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_get_motor_right_ne(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 2);
}
 
/**
* @brief Get field motor_back_se from set_quad_motors_setpoint message
*
* @return Back motor in + configuration, back right motor in x configuration
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_get_motor_back_se(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 4);
}
 
/**
* @brief Get field motor_left_sw from set_quad_motors_setpoint message
*
* @return Left motor in + configuration, back left motor in x configuration
*/
static inline uint16_t mavlink_msg_set_quad_motors_setpoint_get_motor_left_sw(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 6);
}
 
/**
* @brief Decode a set_quad_motors_setpoint message into a struct
*
* @param msg The message to decode
* @param set_quad_motors_setpoint C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_quad_motors_setpoint_decode(const mavlink_message_t* msg, mavlink_set_quad_motors_setpoint_t* set_quad_motors_setpoint)
{
#if MAVLINK_NEED_BYTE_SWAP
set_quad_motors_setpoint->motor_front_nw = mavlink_msg_set_quad_motors_setpoint_get_motor_front_nw(msg);
set_quad_motors_setpoint->motor_right_ne = mavlink_msg_set_quad_motors_setpoint_get_motor_right_ne(msg);
set_quad_motors_setpoint->motor_back_se = mavlink_msg_set_quad_motors_setpoint_get_motor_back_se(msg);
set_quad_motors_setpoint->motor_left_sw = mavlink_msg_set_quad_motors_setpoint_get_motor_left_sw(msg);
set_quad_motors_setpoint->target_system = mavlink_msg_set_quad_motors_setpoint_get_target_system(msg);
#else
memcpy(set_quad_motors_setpoint, _MAV_PAYLOAD(msg), 9);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust.h
0,0 → 1,236
// MESSAGE SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST PACKING
 
#define MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST 61
 
typedef struct __mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t
{
int16_t roll[6]; ///< Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5
int16_t pitch[6]; ///< Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5
int16_t yaw[6]; ///< Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5
uint16_t thrust[6]; ///< Collective thrust, scaled to uint16 for 6 quadrotors: 0..5
uint8_t target_systems[6]; ///< System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs
} mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t;
 
#define MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_LEN 54
#define MAVLINK_MSG_ID_61_LEN 54
 
#define MAVLINK_MSG_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_FIELD_ROLL_LEN 6
#define MAVLINK_MSG_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_FIELD_PITCH_LEN 6
#define MAVLINK_MSG_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_FIELD_YAW_LEN 6
#define MAVLINK_MSG_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_FIELD_THRUST_LEN 6
#define MAVLINK_MSG_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST_FIELD_TARGET_SYSTEMS_LEN 6
 
#define MAVLINK_MESSAGE_INFO_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST { \
"SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST", \
5, \
{ { "roll", NULL, MAVLINK_TYPE_INT16_T, 6, 0, offsetof(mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_INT16_T, 6, 12, offsetof(mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_INT16_T, 6, 24, offsetof(mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_UINT16_T, 6, 36, offsetof(mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t, thrust) }, \
{ "target_systems", NULL, MAVLINK_TYPE_UINT8_T, 6, 48, offsetof(mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t, target_systems) }, \
} \
}
 
 
/**
* @brief Pack a set_quad_swarm_roll_pitch_yaw_thrust message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_systems System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs
* @param roll Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param pitch Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param yaw Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param thrust Collective thrust, scaled to uint16 for 6 quadrotors: 0..5
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const uint8_t *target_systems, const int16_t *roll, const int16_t *pitch, const int16_t *yaw, const uint16_t *thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[54];
 
_mav_put_int16_t_array(buf, 0, roll, 6);
_mav_put_int16_t_array(buf, 12, pitch, 6);
_mav_put_int16_t_array(buf, 24, yaw, 6);
_mav_put_uint16_t_array(buf, 36, thrust, 6);
_mav_put_uint8_t_array(buf, 48, target_systems, 6);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 54);
#else
mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t packet;
 
mav_array_memcpy(packet.roll, roll, sizeof(int16_t)*6);
mav_array_memcpy(packet.pitch, pitch, sizeof(int16_t)*6);
mav_array_memcpy(packet.yaw, yaw, sizeof(int16_t)*6);
mav_array_memcpy(packet.thrust, thrust, sizeof(uint16_t)*6);
mav_array_memcpy(packet.target_systems, target_systems, sizeof(uint8_t)*6);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 54);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message(msg, system_id, component_id, 54, 200);
}
 
/**
* @brief Pack a set_quad_swarm_roll_pitch_yaw_thrust message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_systems System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs
* @param roll Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param pitch Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param yaw Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param thrust Collective thrust, scaled to uint16 for 6 quadrotors: 0..5
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const uint8_t *target_systems,const int16_t *roll,const int16_t *pitch,const int16_t *yaw,const uint16_t *thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[54];
 
_mav_put_int16_t_array(buf, 0, roll, 6);
_mav_put_int16_t_array(buf, 12, pitch, 6);
_mav_put_int16_t_array(buf, 24, yaw, 6);
_mav_put_uint16_t_array(buf, 36, thrust, 6);
_mav_put_uint8_t_array(buf, 48, target_systems, 6);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 54);
#else
mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t packet;
 
mav_array_memcpy(packet.roll, roll, sizeof(int16_t)*6);
mav_array_memcpy(packet.pitch, pitch, sizeof(int16_t)*6);
mav_array_memcpy(packet.yaw, yaw, sizeof(int16_t)*6);
mav_array_memcpy(packet.thrust, thrust, sizeof(uint16_t)*6);
mav_array_memcpy(packet.target_systems, target_systems, sizeof(uint8_t)*6);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 54);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 54, 200);
}
 
/**
* @brief Encode a set_quad_swarm_roll_pitch_yaw_thrust struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_quad_swarm_roll_pitch_yaw_thrust C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t* set_quad_swarm_roll_pitch_yaw_thrust)
{
return mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_pack(system_id, component_id, msg, set_quad_swarm_roll_pitch_yaw_thrust->target_systems, set_quad_swarm_roll_pitch_yaw_thrust->roll, set_quad_swarm_roll_pitch_yaw_thrust->pitch, set_quad_swarm_roll_pitch_yaw_thrust->yaw, set_quad_swarm_roll_pitch_yaw_thrust->thrust);
}
 
/**
* @brief Send a set_quad_swarm_roll_pitch_yaw_thrust message
* @param chan MAVLink channel to send the message
*
* @param target_systems System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs
* @param roll Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param pitch Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param yaw Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5
* @param thrust Collective thrust, scaled to uint16 for 6 quadrotors: 0..5
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_send(mavlink_channel_t chan, const uint8_t *target_systems, const int16_t *roll, const int16_t *pitch, const int16_t *yaw, const uint16_t *thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[54];
 
_mav_put_int16_t_array(buf, 0, roll, 6);
_mav_put_int16_t_array(buf, 12, pitch, 6);
_mav_put_int16_t_array(buf, 24, yaw, 6);
_mav_put_uint16_t_array(buf, 36, thrust, 6);
_mav_put_uint8_t_array(buf, 48, target_systems, 6);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, buf, 54, 200);
#else
mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t packet;
 
mav_array_memcpy(packet.roll, roll, sizeof(int16_t)*6);
mav_array_memcpy(packet.pitch, pitch, sizeof(int16_t)*6);
mav_array_memcpy(packet.yaw, yaw, sizeof(int16_t)*6);
mav_array_memcpy(packet.thrust, thrust, sizeof(uint16_t)*6);
mav_array_memcpy(packet.target_systems, target_systems, sizeof(uint8_t)*6);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, (const char *)&packet, 54, 200);
#endif
}
 
#endif
 
// MESSAGE SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST UNPACKING
 
 
/**
* @brief Get field target_systems from set_quad_swarm_roll_pitch_yaw_thrust message
*
* @return System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_target_systems(const mavlink_message_t* msg, uint8_t *target_systems)
{
return _MAV_RETURN_uint8_t_array(msg, target_systems, 6, 48);
}
 
/**
* @brief Get field roll from set_quad_swarm_roll_pitch_yaw_thrust message
*
* @return Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_roll(const mavlink_message_t* msg, int16_t *roll)
{
return _MAV_RETURN_int16_t_array(msg, roll, 6, 0);
}
 
/**
* @brief Get field pitch from set_quad_swarm_roll_pitch_yaw_thrust message
*
* @return Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_pitch(const mavlink_message_t* msg, int16_t *pitch)
{
return _MAV_RETURN_int16_t_array(msg, pitch, 6, 12);
}
 
/**
* @brief Get field yaw from set_quad_swarm_roll_pitch_yaw_thrust message
*
* @return Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_yaw(const mavlink_message_t* msg, int16_t *yaw)
{
return _MAV_RETURN_int16_t_array(msg, yaw, 6, 24);
}
 
/**
* @brief Get field thrust from set_quad_swarm_roll_pitch_yaw_thrust message
*
* @return Collective thrust, scaled to uint16 for 6 quadrotors: 0..5
*/
static inline uint16_t mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_thrust(const mavlink_message_t* msg, uint16_t *thrust)
{
return _MAV_RETURN_uint16_t_array(msg, thrust, 6, 36);
}
 
/**
* @brief Decode a set_quad_swarm_roll_pitch_yaw_thrust message into a struct
*
* @param msg The message to decode
* @param set_quad_swarm_roll_pitch_yaw_thrust C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(const mavlink_message_t* msg, mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t* set_quad_swarm_roll_pitch_yaw_thrust)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_roll(msg, set_quad_swarm_roll_pitch_yaw_thrust->roll);
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_pitch(msg, set_quad_swarm_roll_pitch_yaw_thrust->pitch);
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_yaw(msg, set_quad_swarm_roll_pitch_yaw_thrust->yaw);
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_thrust(msg, set_quad_swarm_roll_pitch_yaw_thrust->thrust);
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_get_target_systems(msg, set_quad_swarm_roll_pitch_yaw_thrust->target_systems);
#else
memcpy(set_quad_swarm_roll_pitch_yaw_thrust, _MAV_PAYLOAD(msg), 54);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_roll_pitch_yaw_speed_thrust.h
0,0 → 1,254
// MESSAGE SET_ROLL_PITCH_YAW_SPEED_THRUST PACKING
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST 57
 
typedef struct __mavlink_set_roll_pitch_yaw_speed_thrust_t
{
float roll_speed; ///< Desired roll angular speed in rad/s
float pitch_speed; ///< Desired pitch angular speed in rad/s
float yaw_speed; ///< Desired yaw angular speed in rad/s
float thrust; ///< Collective thrust, normalized to 0 .. 1
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_set_roll_pitch_yaw_speed_thrust_t;
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST_LEN 18
#define MAVLINK_MSG_ID_57_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST { \
"SET_ROLL_PITCH_YAW_SPEED_THRUST", \
6, \
{ { "roll_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, roll_speed) }, \
{ "pitch_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, pitch_speed) }, \
{ "yaw_speed", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, yaw_speed) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, thrust) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_set_roll_pitch_yaw_speed_thrust_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a set_roll_pitch_yaw_speed_thrust message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll_speed);
_mav_put_float(buf, 4, pitch_speed);
_mav_put_float(buf, 8, yaw_speed);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST;
return mavlink_finalize_message(msg, system_id, component_id, 18, 24);
}
 
/**
* @brief Pack a set_roll_pitch_yaw_speed_thrust message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,float roll_speed,float pitch_speed,float yaw_speed,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll_speed);
_mav_put_float(buf, 4, pitch_speed);
_mav_put_float(buf, 8, yaw_speed);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18, 24);
}
 
/**
* @brief Encode a set_roll_pitch_yaw_speed_thrust struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_roll_pitch_yaw_speed_thrust C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_roll_pitch_yaw_speed_thrust_t* set_roll_pitch_yaw_speed_thrust)
{
return mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(system_id, component_id, msg, set_roll_pitch_yaw_speed_thrust->target_system, set_roll_pitch_yaw_speed_thrust->target_component, set_roll_pitch_yaw_speed_thrust->roll_speed, set_roll_pitch_yaw_speed_thrust->pitch_speed, set_roll_pitch_yaw_speed_thrust->yaw_speed, set_roll_pitch_yaw_speed_thrust->thrust);
}
 
/**
* @brief Send a set_roll_pitch_yaw_speed_thrust message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param roll_speed Desired roll angular speed in rad/s
* @param pitch_speed Desired pitch angular speed in rad/s
* @param yaw_speed Desired yaw angular speed in rad/s
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_roll_pitch_yaw_speed_thrust_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, float roll_speed, float pitch_speed, float yaw_speed, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll_speed);
_mav_put_float(buf, 4, pitch_speed);
_mav_put_float(buf, 8, yaw_speed);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST, buf, 18, 24);
#else
mavlink_set_roll_pitch_yaw_speed_thrust_t packet;
packet.roll_speed = roll_speed;
packet.pitch_speed = pitch_speed;
packet.yaw_speed = yaw_speed;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST, (const char *)&packet, 18, 24);
#endif
}
 
#endif
 
// MESSAGE SET_ROLL_PITCH_YAW_SPEED_THRUST UNPACKING
 
 
/**
* @brief Get field target_system from set_roll_pitch_yaw_speed_thrust message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field target_component from set_roll_pitch_yaw_speed_thrust message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field roll_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired roll angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_roll_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field pitch_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired pitch angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_pitch_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field yaw_speed from set_roll_pitch_yaw_speed_thrust message
*
* @return Desired yaw angular speed in rad/s
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_yaw_speed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field thrust from set_roll_pitch_yaw_speed_thrust message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a set_roll_pitch_yaw_speed_thrust message into a struct
*
* @param msg The message to decode
* @param set_roll_pitch_yaw_speed_thrust C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(const mavlink_message_t* msg, mavlink_set_roll_pitch_yaw_speed_thrust_t* set_roll_pitch_yaw_speed_thrust)
{
#if MAVLINK_NEED_BYTE_SWAP
set_roll_pitch_yaw_speed_thrust->roll_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_roll_speed(msg);
set_roll_pitch_yaw_speed_thrust->pitch_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_pitch_speed(msg);
set_roll_pitch_yaw_speed_thrust->yaw_speed = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_yaw_speed(msg);
set_roll_pitch_yaw_speed_thrust->thrust = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_thrust(msg);
set_roll_pitch_yaw_speed_thrust->target_system = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_system(msg);
set_roll_pitch_yaw_speed_thrust->target_component = mavlink_msg_set_roll_pitch_yaw_speed_thrust_get_target_component(msg);
#else
memcpy(set_roll_pitch_yaw_speed_thrust, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_set_roll_pitch_yaw_thrust.h
0,0 → 1,254
// MESSAGE SET_ROLL_PITCH_YAW_THRUST PACKING
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST 56
 
typedef struct __mavlink_set_roll_pitch_yaw_thrust_t
{
float roll; ///< Desired roll angle in radians
float pitch; ///< Desired pitch angle in radians
float yaw; ///< Desired yaw angle in radians
float thrust; ///< Collective thrust, normalized to 0 .. 1
uint8_t target_system; ///< System ID
uint8_t target_component; ///< Component ID
} mavlink_set_roll_pitch_yaw_thrust_t;
 
#define MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST_LEN 18
#define MAVLINK_MSG_ID_56_LEN 18
 
 
 
#define MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST { \
"SET_ROLL_PITCH_YAW_THRUST", \
6, \
{ { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, yaw) }, \
{ "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, thrust) }, \
{ "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, target_system) }, \
{ "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_set_roll_pitch_yaw_thrust_t, target_component) }, \
} \
}
 
 
/**
* @brief Pack a set_roll_pitch_yaw_thrust message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target_system, uint8_t target_component, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message(msg, system_id, component_id, 18, 100);
}
 
/**
* @brief Pack a set_roll_pitch_yaw_thrust message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target_system,uint8_t target_component,float roll,float pitch,float yaw,float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 18);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 18);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 18, 100);
}
 
/**
* @brief Encode a set_roll_pitch_yaw_thrust struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param set_roll_pitch_yaw_thrust C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_set_roll_pitch_yaw_thrust_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_set_roll_pitch_yaw_thrust_t* set_roll_pitch_yaw_thrust)
{
return mavlink_msg_set_roll_pitch_yaw_thrust_pack(system_id, component_id, msg, set_roll_pitch_yaw_thrust->target_system, set_roll_pitch_yaw_thrust->target_component, set_roll_pitch_yaw_thrust->roll, set_roll_pitch_yaw_thrust->pitch, set_roll_pitch_yaw_thrust->yaw, set_roll_pitch_yaw_thrust->thrust);
}
 
/**
* @brief Send a set_roll_pitch_yaw_thrust message
* @param chan MAVLink channel to send the message
*
* @param target_system System ID
* @param target_component Component ID
* @param roll Desired roll angle in radians
* @param pitch Desired pitch angle in radians
* @param yaw Desired yaw angle in radians
* @param thrust Collective thrust, normalized to 0 .. 1
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_set_roll_pitch_yaw_thrust_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, float roll, float pitch, float yaw, float thrust)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[18];
_mav_put_float(buf, 0, roll);
_mav_put_float(buf, 4, pitch);
_mav_put_float(buf, 8, yaw);
_mav_put_float(buf, 12, thrust);
_mav_put_uint8_t(buf, 16, target_system);
_mav_put_uint8_t(buf, 17, target_component);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST, buf, 18, 100);
#else
mavlink_set_roll_pitch_yaw_thrust_t packet;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
packet.thrust = thrust;
packet.target_system = target_system;
packet.target_component = target_component;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST, (const char *)&packet, 18, 100);
#endif
}
 
#endif
 
// MESSAGE SET_ROLL_PITCH_YAW_THRUST UNPACKING
 
 
/**
* @brief Get field target_system from set_roll_pitch_yaw_thrust message
*
* @return System ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_thrust_get_target_system(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 16);
}
 
/**
* @brief Get field target_component from set_roll_pitch_yaw_thrust message
*
* @return Component ID
*/
static inline uint8_t mavlink_msg_set_roll_pitch_yaw_thrust_get_target_component(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 17);
}
 
/**
* @brief Get field roll from set_roll_pitch_yaw_thrust message
*
* @return Desired roll angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field pitch from set_roll_pitch_yaw_thrust message
*
* @return Desired pitch angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field yaw from set_roll_pitch_yaw_thrust message
*
* @return Desired yaw angle in radians
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field thrust from set_roll_pitch_yaw_thrust message
*
* @return Collective thrust, normalized to 0 .. 1
*/
static inline float mavlink_msg_set_roll_pitch_yaw_thrust_get_thrust(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a set_roll_pitch_yaw_thrust message into a struct
*
* @param msg The message to decode
* @param set_roll_pitch_yaw_thrust C-struct to decode the message contents into
*/
static inline void mavlink_msg_set_roll_pitch_yaw_thrust_decode(const mavlink_message_t* msg, mavlink_set_roll_pitch_yaw_thrust_t* set_roll_pitch_yaw_thrust)
{
#if MAVLINK_NEED_BYTE_SWAP
set_roll_pitch_yaw_thrust->roll = mavlink_msg_set_roll_pitch_yaw_thrust_get_roll(msg);
set_roll_pitch_yaw_thrust->pitch = mavlink_msg_set_roll_pitch_yaw_thrust_get_pitch(msg);
set_roll_pitch_yaw_thrust->yaw = mavlink_msg_set_roll_pitch_yaw_thrust_get_yaw(msg);
set_roll_pitch_yaw_thrust->thrust = mavlink_msg_set_roll_pitch_yaw_thrust_get_thrust(msg);
set_roll_pitch_yaw_thrust->target_system = mavlink_msg_set_roll_pitch_yaw_thrust_get_target_system(msg);
set_roll_pitch_yaw_thrust->target_component = mavlink_msg_set_roll_pitch_yaw_thrust_get_target_component(msg);
#else
memcpy(set_roll_pitch_yaw_thrust, _MAV_PAYLOAD(msg), 18);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_state_correction.h
0,0 → 1,320
// MESSAGE STATE_CORRECTION PACKING
 
#define MAVLINK_MSG_ID_STATE_CORRECTION 64
 
typedef struct __mavlink_state_correction_t
{
float xErr; ///< x position error
float yErr; ///< y position error
float zErr; ///< z position error
float rollErr; ///< roll error (radians)
float pitchErr; ///< pitch error (radians)
float yawErr; ///< yaw error (radians)
float vxErr; ///< x velocity
float vyErr; ///< y velocity
float vzErr; ///< z velocity
} mavlink_state_correction_t;
 
#define MAVLINK_MSG_ID_STATE_CORRECTION_LEN 36
#define MAVLINK_MSG_ID_64_LEN 36
 
 
 
#define MAVLINK_MESSAGE_INFO_STATE_CORRECTION { \
"STATE_CORRECTION", \
9, \
{ { "xErr", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_state_correction_t, xErr) }, \
{ "yErr", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_state_correction_t, yErr) }, \
{ "zErr", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_state_correction_t, zErr) }, \
{ "rollErr", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_state_correction_t, rollErr) }, \
{ "pitchErr", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_state_correction_t, pitchErr) }, \
{ "yawErr", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_state_correction_t, yawErr) }, \
{ "vxErr", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_state_correction_t, vxErr) }, \
{ "vyErr", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_state_correction_t, vyErr) }, \
{ "vzErr", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_state_correction_t, vzErr) }, \
} \
}
 
 
/**
* @brief Pack a state_correction message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_state_correction_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float xErr, float yErr, float zErr, float rollErr, float pitchErr, float yawErr, float vxErr, float vyErr, float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATE_CORRECTION;
return mavlink_finalize_message(msg, system_id, component_id, 36, 130);
}
 
/**
* @brief Pack a state_correction message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_state_correction_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float xErr,float yErr,float zErr,float rollErr,float pitchErr,float yawErr,float vxErr,float vyErr,float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 36);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 36);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATE_CORRECTION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 36, 130);
}
 
/**
* @brief Encode a state_correction struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param state_correction C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_state_correction_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_state_correction_t* state_correction)
{
return mavlink_msg_state_correction_pack(system_id, component_id, msg, state_correction->xErr, state_correction->yErr, state_correction->zErr, state_correction->rollErr, state_correction->pitchErr, state_correction->yawErr, state_correction->vxErr, state_correction->vyErr, state_correction->vzErr);
}
 
/**
* @brief Send a state_correction message
* @param chan MAVLink channel to send the message
*
* @param xErr x position error
* @param yErr y position error
* @param zErr z position error
* @param rollErr roll error (radians)
* @param pitchErr pitch error (radians)
* @param yawErr yaw error (radians)
* @param vxErr x velocity
* @param vyErr y velocity
* @param vzErr z velocity
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_state_correction_send(mavlink_channel_t chan, float xErr, float yErr, float zErr, float rollErr, float pitchErr, float yawErr, float vxErr, float vyErr, float vzErr)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[36];
_mav_put_float(buf, 0, xErr);
_mav_put_float(buf, 4, yErr);
_mav_put_float(buf, 8, zErr);
_mav_put_float(buf, 12, rollErr);
_mav_put_float(buf, 16, pitchErr);
_mav_put_float(buf, 20, yawErr);
_mav_put_float(buf, 24, vxErr);
_mav_put_float(buf, 28, vyErr);
_mav_put_float(buf, 32, vzErr);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATE_CORRECTION, buf, 36, 130);
#else
mavlink_state_correction_t packet;
packet.xErr = xErr;
packet.yErr = yErr;
packet.zErr = zErr;
packet.rollErr = rollErr;
packet.pitchErr = pitchErr;
packet.yawErr = yawErr;
packet.vxErr = vxErr;
packet.vyErr = vyErr;
packet.vzErr = vzErr;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATE_CORRECTION, (const char *)&packet, 36, 130);
#endif
}
 
#endif
 
// MESSAGE STATE_CORRECTION UNPACKING
 
 
/**
* @brief Get field xErr from state_correction message
*
* @return x position error
*/
static inline float mavlink_msg_state_correction_get_xErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field yErr from state_correction message
*
* @return y position error
*/
static inline float mavlink_msg_state_correction_get_yErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field zErr from state_correction message
*
* @return z position error
*/
static inline float mavlink_msg_state_correction_get_zErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field rollErr from state_correction message
*
* @return roll error (radians)
*/
static inline float mavlink_msg_state_correction_get_rollErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field pitchErr from state_correction message
*
* @return pitch error (radians)
*/
static inline float mavlink_msg_state_correction_get_pitchErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field yawErr from state_correction message
*
* @return yaw error (radians)
*/
static inline float mavlink_msg_state_correction_get_yawErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field vxErr from state_correction message
*
* @return x velocity
*/
static inline float mavlink_msg_state_correction_get_vxErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field vyErr from state_correction message
*
* @return y velocity
*/
static inline float mavlink_msg_state_correction_get_vyErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Get field vzErr from state_correction message
*
* @return z velocity
*/
static inline float mavlink_msg_state_correction_get_vzErr(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 32);
}
 
/**
* @brief Decode a state_correction message into a struct
*
* @param msg The message to decode
* @param state_correction C-struct to decode the message contents into
*/
static inline void mavlink_msg_state_correction_decode(const mavlink_message_t* msg, mavlink_state_correction_t* state_correction)
{
#if MAVLINK_NEED_BYTE_SWAP
state_correction->xErr = mavlink_msg_state_correction_get_xErr(msg);
state_correction->yErr = mavlink_msg_state_correction_get_yErr(msg);
state_correction->zErr = mavlink_msg_state_correction_get_zErr(msg);
state_correction->rollErr = mavlink_msg_state_correction_get_rollErr(msg);
state_correction->pitchErr = mavlink_msg_state_correction_get_pitchErr(msg);
state_correction->yawErr = mavlink_msg_state_correction_get_yawErr(msg);
state_correction->vxErr = mavlink_msg_state_correction_get_vxErr(msg);
state_correction->vyErr = mavlink_msg_state_correction_get_vyErr(msg);
state_correction->vzErr = mavlink_msg_state_correction_get_vzErr(msg);
#else
memcpy(state_correction, _MAV_PAYLOAD(msg), 36);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_statustext.h
0,0 → 1,160
// MESSAGE STATUSTEXT PACKING
 
#define MAVLINK_MSG_ID_STATUSTEXT 253
 
typedef struct __mavlink_statustext_t
{
uint8_t severity; ///< Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.
char text[50]; ///< Status text message, without null termination character
} mavlink_statustext_t;
 
#define MAVLINK_MSG_ID_STATUSTEXT_LEN 51
#define MAVLINK_MSG_ID_253_LEN 51
 
#define MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN 50
 
#define MAVLINK_MESSAGE_INFO_STATUSTEXT { \
"STATUSTEXT", \
2, \
{ { "severity", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_statustext_t, severity) }, \
{ "text", NULL, MAVLINK_TYPE_CHAR, 50, 1, offsetof(mavlink_statustext_t, text) }, \
} \
}
 
 
/**
* @brief Pack a statustext message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param severity Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.
* @param text Status text message, without null termination character
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_statustext_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t severity, const char *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_char_array(buf, 1, text, 50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 51);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(char)*50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 51);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATUSTEXT;
return mavlink_finalize_message(msg, system_id, component_id, 51, 83);
}
 
/**
* @brief Pack a statustext message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param severity Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.
* @param text Status text message, without null termination character
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_statustext_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t severity,const char *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_char_array(buf, 1, text, 50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 51);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(char)*50);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 51);
#endif
 
msg->msgid = MAVLINK_MSG_ID_STATUSTEXT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 51, 83);
}
 
/**
* @brief Encode a statustext struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param statustext C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_statustext_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_statustext_t* statustext)
{
return mavlink_msg_statustext_pack(system_id, component_id, msg, statustext->severity, statustext->text);
}
 
/**
* @brief Send a statustext message
* @param chan MAVLink channel to send the message
*
* @param severity Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.
* @param text Status text message, without null termination character
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_statustext_send(mavlink_channel_t chan, uint8_t severity, const char *text)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[51];
_mav_put_uint8_t(buf, 0, severity);
_mav_put_char_array(buf, 1, text, 50);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATUSTEXT, buf, 51, 83);
#else
mavlink_statustext_t packet;
packet.severity = severity;
mav_array_memcpy(packet.text, text, sizeof(char)*50);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_STATUSTEXT, (const char *)&packet, 51, 83);
#endif
}
 
#endif
 
// MESSAGE STATUSTEXT UNPACKING
 
 
/**
* @brief Get field severity from statustext message
*
* @return Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.
*/
static inline uint8_t mavlink_msg_statustext_get_severity(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field text from statustext message
*
* @return Status text message, without null termination character
*/
static inline uint16_t mavlink_msg_statustext_get_text(const mavlink_message_t* msg, char *text)
{
return _MAV_RETURN_char_array(msg, text, 50, 1);
}
 
/**
* @brief Decode a statustext message into a struct
*
* @param msg The message to decode
* @param statustext C-struct to decode the message contents into
*/
static inline void mavlink_msg_statustext_decode(const mavlink_message_t* msg, mavlink_statustext_t* statustext)
{
#if MAVLINK_NEED_BYTE_SWAP
statustext->severity = mavlink_msg_statustext_get_severity(msg);
mavlink_msg_statustext_get_text(msg, statustext->text);
#else
memcpy(statustext, _MAV_PAYLOAD(msg), 51);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_sys_status.h
0,0 → 1,408
// MESSAGE SYS_STATUS PACKING
 
#define MAVLINK_MSG_ID_SYS_STATUS 1
 
typedef struct __mavlink_sys_status_t
{
uint32_t onboard_control_sensors_present; ///< Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_enabled; ///< Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint32_t onboard_control_sensors_health; ///< Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
uint16_t load; ///< Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
uint16_t voltage_battery; ///< Battery voltage, in millivolts (1 = 1 millivolt)
int16_t current_battery; ///< Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
uint16_t drop_rate_comm; ///< Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_comm; ///< Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
uint16_t errors_count1; ///< Autopilot-specific errors
uint16_t errors_count2; ///< Autopilot-specific errors
uint16_t errors_count3; ///< Autopilot-specific errors
uint16_t errors_count4; ///< Autopilot-specific errors
int8_t battery_remaining; ///< Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
} mavlink_sys_status_t;
 
#define MAVLINK_MSG_ID_SYS_STATUS_LEN 31
#define MAVLINK_MSG_ID_1_LEN 31
 
 
 
#define MAVLINK_MESSAGE_INFO_SYS_STATUS { \
"SYS_STATUS", \
13, \
{ { "onboard_control_sensors_present", "0x%04x", MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_sys_status_t, onboard_control_sensors_present) }, \
{ "onboard_control_sensors_enabled", "0x%04x", MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_sys_status_t, onboard_control_sensors_enabled) }, \
{ "onboard_control_sensors_health", "0x%04x", MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_sys_status_t, onboard_control_sensors_health) }, \
{ "load", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_sys_status_t, load) }, \
{ "voltage_battery", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_sys_status_t, voltage_battery) }, \
{ "current_battery", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_sys_status_t, current_battery) }, \
{ "drop_rate_comm", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_sys_status_t, drop_rate_comm) }, \
{ "errors_comm", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_sys_status_t, errors_comm) }, \
{ "errors_count1", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_sys_status_t, errors_count1) }, \
{ "errors_count2", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_sys_status_t, errors_count2) }, \
{ "errors_count3", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_sys_status_t, errors_count3) }, \
{ "errors_count4", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_sys_status_t, errors_count4) }, \
{ "battery_remaining", NULL, MAVLINK_TYPE_INT8_T, 0, 30, offsetof(mavlink_sys_status_t, battery_remaining) }, \
} \
}
 
 
/**
* @brief Pack a sys_status message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param onboard_control_sensors_present Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_enabled Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_health Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param voltage_battery Battery voltage, in millivolts (1 = 1 millivolt)
* @param current_battery Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
* @param drop_rate_comm Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_comm Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_count1 Autopilot-specific errors
* @param errors_count2 Autopilot-specific errors
* @param errors_count3 Autopilot-specific errors
* @param errors_count4 Autopilot-specific errors
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint32_t onboard_control_sensors_present, uint32_t onboard_control_sensors_enabled, uint32_t onboard_control_sensors_health, uint16_t load, uint16_t voltage_battery, int16_t current_battery, int8_t battery_remaining, uint16_t drop_rate_comm, uint16_t errors_comm, uint16_t errors_count1, uint16_t errors_count2, uint16_t errors_count3, uint16_t errors_count4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[31];
_mav_put_uint32_t(buf, 0, onboard_control_sensors_present);
_mav_put_uint32_t(buf, 4, onboard_control_sensors_enabled);
_mav_put_uint32_t(buf, 8, onboard_control_sensors_health);
_mav_put_uint16_t(buf, 12, load);
_mav_put_uint16_t(buf, 14, voltage_battery);
_mav_put_int16_t(buf, 16, current_battery);
_mav_put_uint16_t(buf, 18, drop_rate_comm);
_mav_put_uint16_t(buf, 20, errors_comm);
_mav_put_uint16_t(buf, 22, errors_count1);
_mav_put_uint16_t(buf, 24, errors_count2);
_mav_put_uint16_t(buf, 26, errors_count3);
_mav_put_uint16_t(buf, 28, errors_count4);
_mav_put_int8_t(buf, 30, battery_remaining);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 31);
#else
mavlink_sys_status_t packet;
packet.onboard_control_sensors_present = onboard_control_sensors_present;
packet.onboard_control_sensors_enabled = onboard_control_sensors_enabled;
packet.onboard_control_sensors_health = onboard_control_sensors_health;
packet.load = load;
packet.voltage_battery = voltage_battery;
packet.current_battery = current_battery;
packet.drop_rate_comm = drop_rate_comm;
packet.errors_comm = errors_comm;
packet.errors_count1 = errors_count1;
packet.errors_count2 = errors_count2;
packet.errors_count3 = errors_count3;
packet.errors_count4 = errors_count4;
packet.battery_remaining = battery_remaining;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 31);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_STATUS;
return mavlink_finalize_message(msg, system_id, component_id, 31, 124);
}
 
/**
* @brief Pack a sys_status message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param onboard_control_sensors_present Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_enabled Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_health Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param voltage_battery Battery voltage, in millivolts (1 = 1 millivolt)
* @param current_battery Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
* @param drop_rate_comm Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_comm Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_count1 Autopilot-specific errors
* @param errors_count2 Autopilot-specific errors
* @param errors_count3 Autopilot-specific errors
* @param errors_count4 Autopilot-specific errors
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint32_t onboard_control_sensors_present,uint32_t onboard_control_sensors_enabled,uint32_t onboard_control_sensors_health,uint16_t load,uint16_t voltage_battery,int16_t current_battery,int8_t battery_remaining,uint16_t drop_rate_comm,uint16_t errors_comm,uint16_t errors_count1,uint16_t errors_count2,uint16_t errors_count3,uint16_t errors_count4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[31];
_mav_put_uint32_t(buf, 0, onboard_control_sensors_present);
_mav_put_uint32_t(buf, 4, onboard_control_sensors_enabled);
_mav_put_uint32_t(buf, 8, onboard_control_sensors_health);
_mav_put_uint16_t(buf, 12, load);
_mav_put_uint16_t(buf, 14, voltage_battery);
_mav_put_int16_t(buf, 16, current_battery);
_mav_put_uint16_t(buf, 18, drop_rate_comm);
_mav_put_uint16_t(buf, 20, errors_comm);
_mav_put_uint16_t(buf, 22, errors_count1);
_mav_put_uint16_t(buf, 24, errors_count2);
_mav_put_uint16_t(buf, 26, errors_count3);
_mav_put_uint16_t(buf, 28, errors_count4);
_mav_put_int8_t(buf, 30, battery_remaining);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 31);
#else
mavlink_sys_status_t packet;
packet.onboard_control_sensors_present = onboard_control_sensors_present;
packet.onboard_control_sensors_enabled = onboard_control_sensors_enabled;
packet.onboard_control_sensors_health = onboard_control_sensors_health;
packet.load = load;
packet.voltage_battery = voltage_battery;
packet.current_battery = current_battery;
packet.drop_rate_comm = drop_rate_comm;
packet.errors_comm = errors_comm;
packet.errors_count1 = errors_count1;
packet.errors_count2 = errors_count2;
packet.errors_count3 = errors_count3;
packet.errors_count4 = errors_count4;
packet.battery_remaining = battery_remaining;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 31);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_STATUS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 31, 124);
}
 
/**
* @brief Encode a sys_status struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param sys_status C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_sys_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_sys_status_t* sys_status)
{
return mavlink_msg_sys_status_pack(system_id, component_id, msg, sys_status->onboard_control_sensors_present, sys_status->onboard_control_sensors_enabled, sys_status->onboard_control_sensors_health, sys_status->load, sys_status->voltage_battery, sys_status->current_battery, sys_status->battery_remaining, sys_status->drop_rate_comm, sys_status->errors_comm, sys_status->errors_count1, sys_status->errors_count2, sys_status->errors_count3, sys_status->errors_count4);
}
 
/**
* @brief Send a sys_status message
* @param chan MAVLink channel to send the message
*
* @param onboard_control_sensors_present Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_enabled Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param onboard_control_sensors_health Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
* @param load Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
* @param voltage_battery Battery voltage, in millivolts (1 = 1 millivolt)
* @param current_battery Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
* @param battery_remaining Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
* @param drop_rate_comm Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_comm Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
* @param errors_count1 Autopilot-specific errors
* @param errors_count2 Autopilot-specific errors
* @param errors_count3 Autopilot-specific errors
* @param errors_count4 Autopilot-specific errors
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_sys_status_send(mavlink_channel_t chan, uint32_t onboard_control_sensors_present, uint32_t onboard_control_sensors_enabled, uint32_t onboard_control_sensors_health, uint16_t load, uint16_t voltage_battery, int16_t current_battery, int8_t battery_remaining, uint16_t drop_rate_comm, uint16_t errors_comm, uint16_t errors_count1, uint16_t errors_count2, uint16_t errors_count3, uint16_t errors_count4)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[31];
_mav_put_uint32_t(buf, 0, onboard_control_sensors_present);
_mav_put_uint32_t(buf, 4, onboard_control_sensors_enabled);
_mav_put_uint32_t(buf, 8, onboard_control_sensors_health);
_mav_put_uint16_t(buf, 12, load);
_mav_put_uint16_t(buf, 14, voltage_battery);
_mav_put_int16_t(buf, 16, current_battery);
_mav_put_uint16_t(buf, 18, drop_rate_comm);
_mav_put_uint16_t(buf, 20, errors_comm);
_mav_put_uint16_t(buf, 22, errors_count1);
_mav_put_uint16_t(buf, 24, errors_count2);
_mav_put_uint16_t(buf, 26, errors_count3);
_mav_put_uint16_t(buf, 28, errors_count4);
_mav_put_int8_t(buf, 30, battery_remaining);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_STATUS, buf, 31, 124);
#else
mavlink_sys_status_t packet;
packet.onboard_control_sensors_present = onboard_control_sensors_present;
packet.onboard_control_sensors_enabled = onboard_control_sensors_enabled;
packet.onboard_control_sensors_health = onboard_control_sensors_health;
packet.load = load;
packet.voltage_battery = voltage_battery;
packet.current_battery = current_battery;
packet.drop_rate_comm = drop_rate_comm;
packet.errors_comm = errors_comm;
packet.errors_count1 = errors_count1;
packet.errors_count2 = errors_count2;
packet.errors_count3 = errors_count3;
packet.errors_count4 = errors_count4;
packet.battery_remaining = battery_remaining;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_STATUS, (const char *)&packet, 31, 124);
#endif
}
 
#endif
 
// MESSAGE SYS_STATUS UNPACKING
 
 
/**
* @brief Get field onboard_control_sensors_present from sys_status message
*
* @return Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
*/
static inline uint32_t mavlink_msg_sys_status_get_onboard_control_sensors_present(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 0);
}
 
/**
* @brief Get field onboard_control_sensors_enabled from sys_status message
*
* @return Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
*/
static inline uint32_t mavlink_msg_sys_status_get_onboard_control_sensors_enabled(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 4);
}
 
/**
* @brief Get field onboard_control_sensors_health from sys_status message
*
* @return Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control
*/
static inline uint32_t mavlink_msg_sys_status_get_onboard_control_sensors_health(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 8);
}
 
/**
* @brief Get field load from sys_status message
*
* @return Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000
*/
static inline uint16_t mavlink_msg_sys_status_get_load(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 12);
}
 
/**
* @brief Get field voltage_battery from sys_status message
*
* @return Battery voltage, in millivolts (1 = 1 millivolt)
*/
static inline uint16_t mavlink_msg_sys_status_get_voltage_battery(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 14);
}
 
/**
* @brief Get field current_battery from sys_status message
*
* @return Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current
*/
static inline int16_t mavlink_msg_sys_status_get_current_battery(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field battery_remaining from sys_status message
*
* @return Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery
*/
static inline int8_t mavlink_msg_sys_status_get_battery_remaining(const mavlink_message_t* msg)
{
return _MAV_RETURN_int8_t(msg, 30);
}
 
/**
* @brief Get field drop_rate_comm from sys_status message
*
* @return Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
*/
static inline uint16_t mavlink_msg_sys_status_get_drop_rate_comm(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 18);
}
 
/**
* @brief Get field errors_comm from sys_status message
*
* @return Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)
*/
static inline uint16_t mavlink_msg_sys_status_get_errors_comm(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 20);
}
 
/**
* @brief Get field errors_count1 from sys_status message
*
* @return Autopilot-specific errors
*/
static inline uint16_t mavlink_msg_sys_status_get_errors_count1(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 22);
}
 
/**
* @brief Get field errors_count2 from sys_status message
*
* @return Autopilot-specific errors
*/
static inline uint16_t mavlink_msg_sys_status_get_errors_count2(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 24);
}
 
/**
* @brief Get field errors_count3 from sys_status message
*
* @return Autopilot-specific errors
*/
static inline uint16_t mavlink_msg_sys_status_get_errors_count3(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 26);
}
 
/**
* @brief Get field errors_count4 from sys_status message
*
* @return Autopilot-specific errors
*/
static inline uint16_t mavlink_msg_sys_status_get_errors_count4(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 28);
}
 
/**
* @brief Decode a sys_status message into a struct
*
* @param msg The message to decode
* @param sys_status C-struct to decode the message contents into
*/
static inline void mavlink_msg_sys_status_decode(const mavlink_message_t* msg, mavlink_sys_status_t* sys_status)
{
#if MAVLINK_NEED_BYTE_SWAP
sys_status->onboard_control_sensors_present = mavlink_msg_sys_status_get_onboard_control_sensors_present(msg);
sys_status->onboard_control_sensors_enabled = mavlink_msg_sys_status_get_onboard_control_sensors_enabled(msg);
sys_status->onboard_control_sensors_health = mavlink_msg_sys_status_get_onboard_control_sensors_health(msg);
sys_status->load = mavlink_msg_sys_status_get_load(msg);
sys_status->voltage_battery = mavlink_msg_sys_status_get_voltage_battery(msg);
sys_status->current_battery = mavlink_msg_sys_status_get_current_battery(msg);
sys_status->drop_rate_comm = mavlink_msg_sys_status_get_drop_rate_comm(msg);
sys_status->errors_comm = mavlink_msg_sys_status_get_errors_comm(msg);
sys_status->errors_count1 = mavlink_msg_sys_status_get_errors_count1(msg);
sys_status->errors_count2 = mavlink_msg_sys_status_get_errors_count2(msg);
sys_status->errors_count3 = mavlink_msg_sys_status_get_errors_count3(msg);
sys_status->errors_count4 = mavlink_msg_sys_status_get_errors_count4(msg);
sys_status->battery_remaining = mavlink_msg_sys_status_get_battery_remaining(msg);
#else
memcpy(sys_status, _MAV_PAYLOAD(msg), 31);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_system_time.h
0,0 → 1,166
// MESSAGE SYSTEM_TIME PACKING
 
#define MAVLINK_MSG_ID_SYSTEM_TIME 2
 
typedef struct __mavlink_system_time_t
{
uint64_t time_unix_usec; ///< Timestamp of the master clock in microseconds since UNIX epoch.
uint32_t time_boot_ms; ///< Timestamp of the component clock since boot time in milliseconds.
} mavlink_system_time_t;
 
#define MAVLINK_MSG_ID_SYSTEM_TIME_LEN 12
#define MAVLINK_MSG_ID_2_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_SYSTEM_TIME { \
"SYSTEM_TIME", \
2, \
{ { "time_unix_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_system_time_t, time_unix_usec) }, \
{ "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_system_time_t, time_boot_ms) }, \
} \
}
 
 
/**
* @brief Pack a system_time message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param time_unix_usec Timestamp of the master clock in microseconds since UNIX epoch.
* @param time_boot_ms Timestamp of the component clock since boot time in milliseconds.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t time_unix_usec, uint32_t time_boot_ms)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint64_t(buf, 0, time_unix_usec);
_mav_put_uint32_t(buf, 8, time_boot_ms);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_system_time_t packet;
packet.time_unix_usec = time_unix_usec;
packet.time_boot_ms = time_boot_ms;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME;
return mavlink_finalize_message(msg, system_id, component_id, 12, 137);
}
 
/**
* @brief Pack a system_time message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param time_unix_usec Timestamp of the master clock in microseconds since UNIX epoch.
* @param time_boot_ms Timestamp of the component clock since boot time in milliseconds.
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_system_time_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t time_unix_usec,uint32_t time_boot_ms)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint64_t(buf, 0, time_unix_usec);
_mav_put_uint32_t(buf, 8, time_boot_ms);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_system_time_t packet;
packet.time_unix_usec = time_unix_usec;
packet.time_boot_ms = time_boot_ms;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYSTEM_TIME;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 137);
}
 
/**
* @brief Encode a system_time struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param system_time C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_system_time_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_system_time_t* system_time)
{
return mavlink_msg_system_time_pack(system_id, component_id, msg, system_time->time_unix_usec, system_time->time_boot_ms);
}
 
/**
* @brief Send a system_time message
* @param chan MAVLink channel to send the message
*
* @param time_unix_usec Timestamp of the master clock in microseconds since UNIX epoch.
* @param time_boot_ms Timestamp of the component clock since boot time in milliseconds.
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_system_time_send(mavlink_channel_t chan, uint64_t time_unix_usec, uint32_t time_boot_ms)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_uint64_t(buf, 0, time_unix_usec);
_mav_put_uint32_t(buf, 8, time_boot_ms);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME, buf, 12, 137);
#else
mavlink_system_time_t packet;
packet.time_unix_usec = time_unix_usec;
packet.time_boot_ms = time_boot_ms;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYSTEM_TIME, (const char *)&packet, 12, 137);
#endif
}
 
#endif
 
// MESSAGE SYSTEM_TIME UNPACKING
 
 
/**
* @brief Get field time_unix_usec from system_time message
*
* @return Timestamp of the master clock in microseconds since UNIX epoch.
*/
static inline uint64_t mavlink_msg_system_time_get_time_unix_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field time_boot_ms from system_time message
*
* @return Timestamp of the component clock since boot time in milliseconds.
*/
static inline uint32_t mavlink_msg_system_time_get_time_boot_ms(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint32_t(msg, 8);
}
 
/**
* @brief Decode a system_time message into a struct
*
* @param msg The message to decode
* @param system_time C-struct to decode the message contents into
*/
static inline void mavlink_msg_system_time_decode(const mavlink_message_t* msg, mavlink_system_time_t* system_time)
{
#if MAVLINK_NEED_BYTE_SWAP
system_time->time_unix_usec = mavlink_msg_system_time_get_time_unix_usec(msg);
system_time->time_boot_ms = mavlink_msg_system_time_get_time_boot_ms(msg);
#else
memcpy(system_time, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_vfr_hud.h
0,0 → 1,254
// MESSAGE VFR_HUD PACKING
 
#define MAVLINK_MSG_ID_VFR_HUD 74
 
typedef struct __mavlink_vfr_hud_t
{
float airspeed; ///< Current airspeed in m/s
float groundspeed; ///< Current ground speed in m/s
float alt; ///< Current altitude (MSL), in meters
float climb; ///< Current climb rate in meters/second
int16_t heading; ///< Current heading in degrees, in compass units (0..360, 0=north)
uint16_t throttle; ///< Current throttle setting in integer percent, 0 to 100
} mavlink_vfr_hud_t;
 
#define MAVLINK_MSG_ID_VFR_HUD_LEN 20
#define MAVLINK_MSG_ID_74_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_VFR_HUD { \
"VFR_HUD", \
6, \
{ { "airspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_vfr_hud_t, airspeed) }, \
{ "groundspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vfr_hud_t, groundspeed) }, \
{ "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_vfr_hud_t, alt) }, \
{ "climb", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_vfr_hud_t, climb) }, \
{ "heading", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_vfr_hud_t, heading) }, \
{ "throttle", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_vfr_hud_t, throttle) }, \
} \
}
 
 
/**
* @brief Pack a vfr_hud message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vfr_hud_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float airspeed, float groundspeed, int16_t heading, uint16_t throttle, float alt, float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_float(buf, 8, alt);
_mav_put_float(buf, 12, climb);
_mav_put_int16_t(buf, 16, heading);
_mav_put_uint16_t(buf, 18, throttle);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.alt = alt;
packet.climb = climb;
packet.heading = heading;
packet.throttle = throttle;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VFR_HUD;
return mavlink_finalize_message(msg, system_id, component_id, 20, 20);
}
 
/**
* @brief Pack a vfr_hud message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vfr_hud_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float airspeed,float groundspeed,int16_t heading,uint16_t throttle,float alt,float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_float(buf, 8, alt);
_mav_put_float(buf, 12, climb);
_mav_put_int16_t(buf, 16, heading);
_mav_put_uint16_t(buf, 18, throttle);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.alt = alt;
packet.climb = climb;
packet.heading = heading;
packet.throttle = throttle;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VFR_HUD;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 20);
}
 
/**
* @brief Encode a vfr_hud struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param vfr_hud C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_vfr_hud_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vfr_hud_t* vfr_hud)
{
return mavlink_msg_vfr_hud_pack(system_id, component_id, msg, vfr_hud->airspeed, vfr_hud->groundspeed, vfr_hud->heading, vfr_hud->throttle, vfr_hud->alt, vfr_hud->climb);
}
 
/**
* @brief Send a vfr_hud message
* @param chan MAVLink channel to send the message
*
* @param airspeed Current airspeed in m/s
* @param groundspeed Current ground speed in m/s
* @param heading Current heading in degrees, in compass units (0..360, 0=north)
* @param throttle Current throttle setting in integer percent, 0 to 100
* @param alt Current altitude (MSL), in meters
* @param climb Current climb rate in meters/second
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_vfr_hud_send(mavlink_channel_t chan, float airspeed, float groundspeed, int16_t heading, uint16_t throttle, float alt, float climb)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, airspeed);
_mav_put_float(buf, 4, groundspeed);
_mav_put_float(buf, 8, alt);
_mav_put_float(buf, 12, climb);
_mav_put_int16_t(buf, 16, heading);
_mav_put_uint16_t(buf, 18, throttle);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VFR_HUD, buf, 20, 20);
#else
mavlink_vfr_hud_t packet;
packet.airspeed = airspeed;
packet.groundspeed = groundspeed;
packet.alt = alt;
packet.climb = climb;
packet.heading = heading;
packet.throttle = throttle;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VFR_HUD, (const char *)&packet, 20, 20);
#endif
}
 
#endif
 
// MESSAGE VFR_HUD UNPACKING
 
 
/**
* @brief Get field airspeed from vfr_hud message
*
* @return Current airspeed in m/s
*/
static inline float mavlink_msg_vfr_hud_get_airspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field groundspeed from vfr_hud message
*
* @return Current ground speed in m/s
*/
static inline float mavlink_msg_vfr_hud_get_groundspeed(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field heading from vfr_hud message
*
* @return Current heading in degrees, in compass units (0..360, 0=north)
*/
static inline int16_t mavlink_msg_vfr_hud_get_heading(const mavlink_message_t* msg)
{
return _MAV_RETURN_int16_t(msg, 16);
}
 
/**
* @brief Get field throttle from vfr_hud message
*
* @return Current throttle setting in integer percent, 0 to 100
*/
static inline uint16_t mavlink_msg_vfr_hud_get_throttle(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint16_t(msg, 18);
}
 
/**
* @brief Get field alt from vfr_hud message
*
* @return Current altitude (MSL), in meters
*/
static inline float mavlink_msg_vfr_hud_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field climb from vfr_hud message
*
* @return Current climb rate in meters/second
*/
static inline float mavlink_msg_vfr_hud_get_climb(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Decode a vfr_hud message into a struct
*
* @param msg The message to decode
* @param vfr_hud C-struct to decode the message contents into
*/
static inline void mavlink_msg_vfr_hud_decode(const mavlink_message_t* msg, mavlink_vfr_hud_t* vfr_hud)
{
#if MAVLINK_NEED_BYTE_SWAP
vfr_hud->airspeed = mavlink_msg_vfr_hud_get_airspeed(msg);
vfr_hud->groundspeed = mavlink_msg_vfr_hud_get_groundspeed(msg);
vfr_hud->alt = mavlink_msg_vfr_hud_get_alt(msg);
vfr_hud->climb = mavlink_msg_vfr_hud_get_climb(msg);
vfr_hud->heading = mavlink_msg_vfr_hud_get_heading(msg);
vfr_hud->throttle = mavlink_msg_vfr_hud_get_throttle(msg);
#else
memcpy(vfr_hud, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_vicon_position_estimate.h
0,0 → 1,276
// MESSAGE VICON_POSITION_ESTIMATE PACKING
 
#define MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE 104
 
typedef struct __mavlink_vicon_position_estimate_t
{
uint64_t usec; ///< Timestamp (milliseconds)
float x; ///< Global X position
float y; ///< Global Y position
float z; ///< Global Z position
float roll; ///< Roll angle in rad
float pitch; ///< Pitch angle in rad
float yaw; ///< Yaw angle in rad
} mavlink_vicon_position_estimate_t;
 
#define MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE_LEN 32
#define MAVLINK_MSG_ID_104_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_VICON_POSITION_ESTIMATE { \
"VICON_POSITION_ESTIMATE", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_vicon_position_estimate_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_vicon_position_estimate_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_vicon_position_estimate_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vicon_position_estimate_t, z) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_vicon_position_estimate_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_vicon_position_estimate_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_vicon_position_estimate_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a vicon_position_estimate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vicon_position_estimate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_vicon_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE;
return mavlink_finalize_message(msg, system_id, component_id, 32, 56);
}
 
/**
* @brief Pack a vicon_position_estimate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vicon_position_estimate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float x,float y,float z,float roll,float pitch,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_vicon_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 56);
}
 
/**
* @brief Encode a vicon_position_estimate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param vicon_position_estimate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_vicon_position_estimate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vicon_position_estimate_t* vicon_position_estimate)
{
return mavlink_msg_vicon_position_estimate_pack(system_id, component_id, msg, vicon_position_estimate->usec, vicon_position_estimate->x, vicon_position_estimate->y, vicon_position_estimate->z, vicon_position_estimate->roll, vicon_position_estimate->pitch, vicon_position_estimate->yaw);
}
 
/**
* @brief Send a vicon_position_estimate message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_vicon_position_estimate_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE, buf, 32, 56);
#else
mavlink_vicon_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE, (const char *)&packet, 32, 56);
#endif
}
 
#endif
 
// MESSAGE VICON_POSITION_ESTIMATE UNPACKING
 
 
/**
* @brief Get field usec from vicon_position_estimate message
*
* @return Timestamp (milliseconds)
*/
static inline uint64_t mavlink_msg_vicon_position_estimate_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from vicon_position_estimate message
*
* @return Global X position
*/
static inline float mavlink_msg_vicon_position_estimate_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from vicon_position_estimate message
*
* @return Global Y position
*/
static inline float mavlink_msg_vicon_position_estimate_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from vicon_position_estimate message
*
* @return Global Z position
*/
static inline float mavlink_msg_vicon_position_estimate_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field roll from vicon_position_estimate message
*
* @return Roll angle in rad
*/
static inline float mavlink_msg_vicon_position_estimate_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitch from vicon_position_estimate message
*
* @return Pitch angle in rad
*/
static inline float mavlink_msg_vicon_position_estimate_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yaw from vicon_position_estimate message
*
* @return Yaw angle in rad
*/
static inline float mavlink_msg_vicon_position_estimate_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a vicon_position_estimate message into a struct
*
* @param msg The message to decode
* @param vicon_position_estimate C-struct to decode the message contents into
*/
static inline void mavlink_msg_vicon_position_estimate_decode(const mavlink_message_t* msg, mavlink_vicon_position_estimate_t* vicon_position_estimate)
{
#if MAVLINK_NEED_BYTE_SWAP
vicon_position_estimate->usec = mavlink_msg_vicon_position_estimate_get_usec(msg);
vicon_position_estimate->x = mavlink_msg_vicon_position_estimate_get_x(msg);
vicon_position_estimate->y = mavlink_msg_vicon_position_estimate_get_y(msg);
vicon_position_estimate->z = mavlink_msg_vicon_position_estimate_get_z(msg);
vicon_position_estimate->roll = mavlink_msg_vicon_position_estimate_get_roll(msg);
vicon_position_estimate->pitch = mavlink_msg_vicon_position_estimate_get_pitch(msg);
vicon_position_estimate->yaw = mavlink_msg_vicon_position_estimate_get_yaw(msg);
#else
memcpy(vicon_position_estimate, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_vision_position_estimate.h
0,0 → 1,276
// MESSAGE VISION_POSITION_ESTIMATE PACKING
 
#define MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE 102
 
typedef struct __mavlink_vision_position_estimate_t
{
uint64_t usec; ///< Timestamp (milliseconds)
float x; ///< Global X position
float y; ///< Global Y position
float z; ///< Global Z position
float roll; ///< Roll angle in rad
float pitch; ///< Pitch angle in rad
float yaw; ///< Yaw angle in rad
} mavlink_vision_position_estimate_t;
 
#define MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE_LEN 32
#define MAVLINK_MSG_ID_102_LEN 32
 
 
 
#define MAVLINK_MESSAGE_INFO_VISION_POSITION_ESTIMATE { \
"VISION_POSITION_ESTIMATE", \
7, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_vision_position_estimate_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_vision_position_estimate_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_vision_position_estimate_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vision_position_estimate_t, z) }, \
{ "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_vision_position_estimate_t, roll) }, \
{ "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_vision_position_estimate_t, pitch) }, \
{ "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_vision_position_estimate_t, yaw) }, \
} \
}
 
 
/**
* @brief Pack a vision_position_estimate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vision_position_estimate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE;
return mavlink_finalize_message(msg, system_id, component_id, 32, 158);
}
 
/**
* @brief Pack a vision_position_estimate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vision_position_estimate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float x,float y,float z,float roll,float pitch,float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 158);
}
 
/**
* @brief Encode a vision_position_estimate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param vision_position_estimate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_vision_position_estimate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vision_position_estimate_t* vision_position_estimate)
{
return mavlink_msg_vision_position_estimate_pack(system_id, component_id, msg, vision_position_estimate->usec, vision_position_estimate->x, vision_position_estimate->y, vision_position_estimate->z, vision_position_estimate->roll, vision_position_estimate->pitch, vision_position_estimate->yaw);
}
 
/**
* @brief Send a vision_position_estimate message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (milliseconds)
* @param x Global X position
* @param y Global Y position
* @param z Global Z position
* @param roll Roll angle in rad
* @param pitch Pitch angle in rad
* @param yaw Yaw angle in rad
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_vision_position_estimate_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
_mav_put_float(buf, 20, roll);
_mav_put_float(buf, 24, pitch);
_mav_put_float(buf, 28, yaw);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE, buf, 32, 158);
#else
mavlink_vision_position_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
packet.roll = roll;
packet.pitch = pitch;
packet.yaw = yaw;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE, (const char *)&packet, 32, 158);
#endif
}
 
#endif
 
// MESSAGE VISION_POSITION_ESTIMATE UNPACKING
 
 
/**
* @brief Get field usec from vision_position_estimate message
*
* @return Timestamp (milliseconds)
*/
static inline uint64_t mavlink_msg_vision_position_estimate_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from vision_position_estimate message
*
* @return Global X position
*/
static inline float mavlink_msg_vision_position_estimate_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from vision_position_estimate message
*
* @return Global Y position
*/
static inline float mavlink_msg_vision_position_estimate_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from vision_position_estimate message
*
* @return Global Z position
*/
static inline float mavlink_msg_vision_position_estimate_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Get field roll from vision_position_estimate message
*
* @return Roll angle in rad
*/
static inline float mavlink_msg_vision_position_estimate_get_roll(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 20);
}
 
/**
* @brief Get field pitch from vision_position_estimate message
*
* @return Pitch angle in rad
*/
static inline float mavlink_msg_vision_position_estimate_get_pitch(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 24);
}
 
/**
* @brief Get field yaw from vision_position_estimate message
*
* @return Yaw angle in rad
*/
static inline float mavlink_msg_vision_position_estimate_get_yaw(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 28);
}
 
/**
* @brief Decode a vision_position_estimate message into a struct
*
* @param msg The message to decode
* @param vision_position_estimate C-struct to decode the message contents into
*/
static inline void mavlink_msg_vision_position_estimate_decode(const mavlink_message_t* msg, mavlink_vision_position_estimate_t* vision_position_estimate)
{
#if MAVLINK_NEED_BYTE_SWAP
vision_position_estimate->usec = mavlink_msg_vision_position_estimate_get_usec(msg);
vision_position_estimate->x = mavlink_msg_vision_position_estimate_get_x(msg);
vision_position_estimate->y = mavlink_msg_vision_position_estimate_get_y(msg);
vision_position_estimate->z = mavlink_msg_vision_position_estimate_get_z(msg);
vision_position_estimate->roll = mavlink_msg_vision_position_estimate_get_roll(msg);
vision_position_estimate->pitch = mavlink_msg_vision_position_estimate_get_pitch(msg);
vision_position_estimate->yaw = mavlink_msg_vision_position_estimate_get_yaw(msg);
#else
memcpy(vision_position_estimate, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_vision_speed_estimate.h
0,0 → 1,210
// MESSAGE VISION_SPEED_ESTIMATE PACKING
 
#define MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE 103
 
typedef struct __mavlink_vision_speed_estimate_t
{
uint64_t usec; ///< Timestamp (milliseconds)
float x; ///< Global X speed
float y; ///< Global Y speed
float z; ///< Global Z speed
} mavlink_vision_speed_estimate_t;
 
#define MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE_LEN 20
#define MAVLINK_MSG_ID_103_LEN 20
 
 
 
#define MAVLINK_MESSAGE_INFO_VISION_SPEED_ESTIMATE { \
"VISION_SPEED_ESTIMATE", \
4, \
{ { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_vision_speed_estimate_t, usec) }, \
{ "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_vision_speed_estimate_t, x) }, \
{ "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_vision_speed_estimate_t, y) }, \
{ "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vision_speed_estimate_t, z) }, \
} \
}
 
 
/**
* @brief Pack a vision_speed_estimate message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param usec Timestamp (milliseconds)
* @param x Global X speed
* @param y Global Y speed
* @param z Global Z speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vision_speed_estimate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint64_t usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vision_speed_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE;
return mavlink_finalize_message(msg, system_id, component_id, 20, 208);
}
 
/**
* @brief Pack a vision_speed_estimate message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param usec Timestamp (milliseconds)
* @param x Global X speed
* @param y Global Y speed
* @param z Global Z speed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_vision_speed_estimate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint64_t usec,float x,float y,float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_vision_speed_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 208);
}
 
/**
* @brief Encode a vision_speed_estimate struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param vision_speed_estimate C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_vision_speed_estimate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vision_speed_estimate_t* vision_speed_estimate)
{
return mavlink_msg_vision_speed_estimate_pack(system_id, component_id, msg, vision_speed_estimate->usec, vision_speed_estimate->x, vision_speed_estimate->y, vision_speed_estimate->z);
}
 
/**
* @brief Send a vision_speed_estimate message
* @param chan MAVLink channel to send the message
*
* @param usec Timestamp (milliseconds)
* @param x Global X speed
* @param y Global Y speed
* @param z Global Z speed
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_vision_speed_estimate_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_uint64_t(buf, 0, usec);
_mav_put_float(buf, 8, x);
_mav_put_float(buf, 12, y);
_mav_put_float(buf, 16, z);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE, buf, 20, 208);
#else
mavlink_vision_speed_estimate_t packet;
packet.usec = usec;
packet.x = x;
packet.y = y;
packet.z = z;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE, (const char *)&packet, 20, 208);
#endif
}
 
#endif
 
// MESSAGE VISION_SPEED_ESTIMATE UNPACKING
 
 
/**
* @brief Get field usec from vision_speed_estimate message
*
* @return Timestamp (milliseconds)
*/
static inline uint64_t mavlink_msg_vision_speed_estimate_get_usec(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint64_t(msg, 0);
}
 
/**
* @brief Get field x from vision_speed_estimate message
*
* @return Global X speed
*/
static inline float mavlink_msg_vision_speed_estimate_get_x(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Get field y from vision_speed_estimate message
*
* @return Global Y speed
*/
static inline float mavlink_msg_vision_speed_estimate_get_y(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 12);
}
 
/**
* @brief Get field z from vision_speed_estimate message
*
* @return Global Z speed
*/
static inline float mavlink_msg_vision_speed_estimate_get_z(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 16);
}
 
/**
* @brief Decode a vision_speed_estimate message into a struct
*
* @param msg The message to decode
* @param vision_speed_estimate C-struct to decode the message contents into
*/
static inline void mavlink_msg_vision_speed_estimate_decode(const mavlink_message_t* msg, mavlink_vision_speed_estimate_t* vision_speed_estimate)
{
#if MAVLINK_NEED_BYTE_SWAP
vision_speed_estimate->usec = mavlink_msg_vision_speed_estimate_get_usec(msg);
vision_speed_estimate->x = mavlink_msg_vision_speed_estimate_get_x(msg);
vision_speed_estimate->y = mavlink_msg_vision_speed_estimate_get_y(msg);
vision_speed_estimate->z = mavlink_msg_vision_speed_estimate_get_z(msg);
#else
memcpy(vision_speed_estimate, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/testsuite.h
0,0 → 1,4024
/** @file
* @brief MAVLink comm protocol testsuite generated from common.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef COMMON_TESTSUITE_H
#define COMMON_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
 
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
 
mavlink_test_common(system_id, component_id, last_msg);
}
#endif
 
 
 
 
static void mavlink_test_heartbeat(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_heartbeat_t packet_in = {
963497464,
17,
84,
151,
218,
3,
};
mavlink_heartbeat_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.custom_mode = packet_in.custom_mode;
packet1.type = packet_in.type;
packet1.autopilot = packet_in.autopilot;
packet1.base_mode = packet_in.base_mode;
packet1.system_status = packet_in.system_status;
packet1.mavlink_version = packet_in.mavlink_version;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_pack(system_id, component_id, &msg , packet1.type , packet1.autopilot , packet1.base_mode , packet1.custom_mode , packet1.system_status );
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.type , packet1.autopilot , packet1.base_mode , packet1.custom_mode , packet1.system_status );
mavlink_msg_heartbeat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_heartbeat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_heartbeat_send(MAVLINK_COMM_1 , packet1.type , packet1.autopilot , packet1.base_mode , packet1.custom_mode , packet1.system_status );
mavlink_msg_heartbeat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_sys_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_sys_status_t packet_in = {
963497464,
963497672,
963497880,
17859,
17963,
18067,
18171,
18275,
18379,
18483,
18587,
18691,
223,
};
mavlink_sys_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.onboard_control_sensors_present = packet_in.onboard_control_sensors_present;
packet1.onboard_control_sensors_enabled = packet_in.onboard_control_sensors_enabled;
packet1.onboard_control_sensors_health = packet_in.onboard_control_sensors_health;
packet1.load = packet_in.load;
packet1.voltage_battery = packet_in.voltage_battery;
packet1.current_battery = packet_in.current_battery;
packet1.drop_rate_comm = packet_in.drop_rate_comm;
packet1.errors_comm = packet_in.errors_comm;
packet1.errors_count1 = packet_in.errors_count1;
packet1.errors_count2 = packet_in.errors_count2;
packet1.errors_count3 = packet_in.errors_count3;
packet1.errors_count4 = packet_in.errors_count4;
packet1.battery_remaining = packet_in.battery_remaining;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_pack(system_id, component_id, &msg , packet1.onboard_control_sensors_present , packet1.onboard_control_sensors_enabled , packet1.onboard_control_sensors_health , packet1.load , packet1.voltage_battery , packet1.current_battery , packet1.battery_remaining , packet1.drop_rate_comm , packet1.errors_comm , packet1.errors_count1 , packet1.errors_count2 , packet1.errors_count3 , packet1.errors_count4 );
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.onboard_control_sensors_present , packet1.onboard_control_sensors_enabled , packet1.onboard_control_sensors_health , packet1.load , packet1.voltage_battery , packet1.current_battery , packet1.battery_remaining , packet1.drop_rate_comm , packet1.errors_comm , packet1.errors_count1 , packet1.errors_count2 , packet1.errors_count3 , packet1.errors_count4 );
mavlink_msg_sys_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_sys_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_status_send(MAVLINK_COMM_1 , packet1.onboard_control_sensors_present , packet1.onboard_control_sensors_enabled , packet1.onboard_control_sensors_health , packet1.load , packet1.voltage_battery , packet1.current_battery , packet1.battery_remaining , packet1.drop_rate_comm , packet1.errors_comm , packet1.errors_count1 , packet1.errors_count2 , packet1.errors_count3 , packet1.errors_count4 );
mavlink_msg_sys_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_system_time(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_system_time_t packet_in = {
93372036854775807ULL,
963497880,
};
mavlink_system_time_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_unix_usec = packet_in.time_unix_usec;
packet1.time_boot_ms = packet_in.time_boot_ms;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_pack(system_id, component_id, &msg , packet1.time_unix_usec , packet1.time_boot_ms );
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_unix_usec , packet1.time_boot_ms );
mavlink_msg_system_time_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_system_time_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_system_time_send(MAVLINK_COMM_1 , packet1.time_unix_usec , packet1.time_boot_ms );
mavlink_msg_system_time_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_ping(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_ping_t packet_in = {
93372036854775807ULL,
963497880,
41,
108,
};
mavlink_ping_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.seq = packet_in.seq;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_pack(system_id, component_id, &msg , packet1.time_usec , packet1.seq , packet1.target_system , packet1.target_component );
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.seq , packet1.target_system , packet1.target_component );
mavlink_msg_ping_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_ping_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_ping_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.seq , packet1.target_system , packet1.target_component );
mavlink_msg_ping_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_change_operator_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_change_operator_control_t packet_in = {
5,
72,
139,
"DEFGHIJKLMNOPQRSTUVWXYZA",
};
mavlink_change_operator_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.control_request = packet_in.control_request;
packet1.version = packet_in.version;
mav_array_memcpy(packet1.passkey, packet_in.passkey, sizeof(char)*25);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_pack(system_id, component_id, &msg , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_change_operator_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_send(MAVLINK_COMM_1 , packet1.target_system , packet1.control_request , packet1.version , packet1.passkey );
mavlink_msg_change_operator_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_change_operator_control_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_change_operator_control_ack_t packet_in = {
5,
72,
139,
};
mavlink_change_operator_control_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.gcs_system_id = packet_in.gcs_system_id;
packet1.control_request = packet_in.control_request;
packet1.ack = packet_in.ack;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_pack(system_id, component_id, &msg , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_change_operator_control_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_change_operator_control_ack_send(MAVLINK_COMM_1 , packet1.gcs_system_id , packet1.control_request , packet1.ack );
mavlink_msg_change_operator_control_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_auth_key(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_auth_key_t packet_in = {
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE",
};
mavlink_auth_key_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.key, packet_in.key, sizeof(char)*32);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_pack(system_id, component_id, &msg , packet1.key );
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.key );
mavlink_msg_auth_key_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_auth_key_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_auth_key_send(MAVLINK_COMM_1 , packet1.key );
mavlink_msg_auth_key_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_mode(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_mode_t packet_in = {
963497464,
17,
84,
};
mavlink_set_mode_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.custom_mode = packet_in.custom_mode;
packet1.target_system = packet_in.target_system;
packet1.base_mode = packet_in.base_mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_pack(system_id, component_id, &msg , packet1.target_system , packet1.base_mode , packet1.custom_mode );
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.base_mode , packet1.custom_mode );
mavlink_msg_set_mode_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_mode_send(MAVLINK_COMM_1 , packet1.target_system , packet1.base_mode , packet1.custom_mode );
mavlink_msg_set_mode_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_request_read(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_request_read_t packet_in = {
17235,
139,
206,
"EFGHIJKLMNOPQRS",
};
mavlink_param_request_read_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param_index = packet_in.param_index;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(char)*16);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_request_read_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_read_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_index );
mavlink_msg_param_request_read_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_request_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_request_list_t packet_in = {
5,
72,
};
mavlink_param_request_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_request_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_param_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_value(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_value_t packet_in = {
17.0,
17443,
17547,
"IJKLMNOPQRSTUVW",
77,
};
mavlink_param_value_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param_value = packet_in.param_value;
packet1.param_count = packet_in.param_count;
packet1.param_index = packet_in.param_index;
packet1.param_type = packet_in.param_type;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(char)*16);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_pack(system_id, component_id, &msg , packet1.param_id , packet1.param_value , packet1.param_type , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.param_id , packet1.param_value , packet1.param_type , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_value_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_value_send(MAVLINK_COMM_1 , packet1.param_id , packet1.param_value , packet1.param_type , packet1.param_count , packet1.param_index );
mavlink_msg_param_value_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_param_set(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_param_set_t packet_in = {
17.0,
17,
84,
"GHIJKLMNOPQRSTU",
199,
};
mavlink_param_set_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param_value = packet_in.param_value;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.param_type = packet_in.param_type;
mav_array_memcpy(packet1.param_id, packet_in.param_id, sizeof(char)*16);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value , packet1.param_type );
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value , packet1.param_type );
mavlink_msg_param_set_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_param_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_param_set_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.param_id , packet1.param_value , packet1.param_type );
mavlink_msg_param_set_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_raw_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_raw_int_t packet_in = {
93372036854775807ULL,
963497880,
963498088,
963498296,
18275,
18379,
18483,
18587,
89,
156,
};
mavlink_gps_raw_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.eph = packet_in.eph;
packet1.epv = packet_in.epv;
packet1.vel = packet_in.vel;
packet1.cog = packet_in.cog;
packet1.fix_type = packet_in.fix_type;
packet1.satellites_visible = packet_in.satellites_visible;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_pack(system_id, component_id, &msg , packet1.time_usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.vel , packet1.cog , packet1.satellites_visible );
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.vel , packet1.cog , packet1.satellites_visible );
mavlink_msg_gps_raw_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_raw_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_raw_int_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.fix_type , packet1.lat , packet1.lon , packet1.alt , packet1.eph , packet1.epv , packet1.vel , packet1.cog , packet1.satellites_visible );
mavlink_msg_gps_raw_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_status_t packet_in = {
5,
{ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 },
{ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151 },
{ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211 },
{ 252, 253, 254, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
{ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 },
};
mavlink_gps_status_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.satellites_visible = packet_in.satellites_visible;
mav_array_memcpy(packet1.satellite_prn, packet_in.satellite_prn, sizeof(uint8_t)*20);
mav_array_memcpy(packet1.satellite_used, packet_in.satellite_used, sizeof(uint8_t)*20);
mav_array_memcpy(packet1.satellite_elevation, packet_in.satellite_elevation, sizeof(uint8_t)*20);
mav_array_memcpy(packet1.satellite_azimuth, packet_in.satellite_azimuth, sizeof(uint8_t)*20);
mav_array_memcpy(packet1.satellite_snr, packet_in.satellite_snr, sizeof(uint8_t)*20);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_pack(system_id, component_id, &msg , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_status_send(MAVLINK_COMM_1 , packet1.satellites_visible , packet1.satellite_prn , packet1.satellite_used , packet1.satellite_elevation , packet1.satellite_azimuth , packet1.satellite_snr );
mavlink_msg_gps_status_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_scaled_imu(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_scaled_imu_t packet_in = {
963497464,
17443,
17547,
17651,
17755,
17859,
17963,
18067,
18171,
18275,
};
mavlink_scaled_imu_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
packet1.xmag = packet_in.xmag;
packet1.ymag = packet_in.ymag;
packet1.zmag = packet_in.zmag;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_scaled_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_imu_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_scaled_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_raw_imu(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_raw_imu_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
18067,
18171,
18275,
18379,
18483,
};
mavlink_raw_imu_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
packet1.xgyro = packet_in.xgyro;
packet1.ygyro = packet_in.ygyro;
packet1.zgyro = packet_in.zgyro;
packet1.xmag = packet_in.xmag;
packet1.ymag = packet_in.ymag;
packet1.zmag = packet_in.zmag;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_pack(system_id, component_id, &msg , packet1.time_usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_raw_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_imu_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.xacc , packet1.yacc , packet1.zacc , packet1.xgyro , packet1.ygyro , packet1.zgyro , packet1.xmag , packet1.ymag , packet1.zmag );
mavlink_msg_raw_imu_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_raw_pressure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_raw_pressure_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
};
mavlink_raw_pressure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.press_abs = packet_in.press_abs;
packet1.press_diff1 = packet_in.press_diff1;
packet1.press_diff2 = packet_in.press_diff2;
packet1.temperature = packet_in.temperature;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_pack(system_id, component_id, &msg , packet1.time_usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_raw_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_raw_pressure_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.press_abs , packet1.press_diff1 , packet1.press_diff2 , packet1.temperature );
mavlink_msg_raw_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_scaled_pressure(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_scaled_pressure_t packet_in = {
963497464,
45.0,
73.0,
17859,
};
mavlink_scaled_pressure_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.press_abs = packet_in.press_abs;
packet1.press_diff = packet_in.press_diff;
packet1.temperature = packet_in.temperature;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_scaled_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_scaled_pressure_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.press_abs , packet1.press_diff , packet1.temperature );
mavlink_msg_scaled_pressure_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_attitude(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_attitude_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
};
mavlink_attitude_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.rollspeed = packet_in.rollspeed;
packet1.pitchspeed = packet_in.pitchspeed;
packet1.yawspeed = packet_in.yawspeed;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_attitude_quaternion(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_attitude_quaternion_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_attitude_quaternion_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.q1 = packet_in.q1;
packet1.q2 = packet_in.q2;
packet1.q3 = packet_in.q3;
packet1.q4 = packet_in.q4;
packet1.rollspeed = packet_in.rollspeed;
packet1.pitchspeed = packet_in.pitchspeed;
packet1.yawspeed = packet_in.yawspeed;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_quaternion_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_attitude_quaternion_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_quaternion_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.q1 , packet1.q2 , packet1.q3 , packet1.q4 , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_quaternion_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_quaternion_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.q1 , packet1.q2 , packet1.q3 , packet1.q4 , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_quaternion_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_attitude_quaternion_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_attitude_quaternion_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.q1 , packet1.q2 , packet1.q3 , packet1.q4 , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed );
mavlink_msg_attitude_quaternion_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position_ned(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_ned_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
};
mavlink_local_position_ned_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_ned_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_ned_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_ned_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_ned_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.vx , packet1.vy , packet1.vz );
mavlink_msg_local_position_ned_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_global_position_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_global_position_int_t packet_in = {
963497464,
963497672,
963497880,
963498088,
963498296,
18275,
18379,
18483,
18587,
};
mavlink_global_position_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.relative_alt = packet_in.relative_alt;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
packet1.hdg = packet_in.hdg;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.lat , packet1.lon , packet1.alt , packet1.relative_alt , packet1.vx , packet1.vy , packet1.vz , packet1.hdg );
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.lat , packet1.lon , packet1.alt , packet1.relative_alt , packet1.vx , packet1.vy , packet1.vz , packet1.hdg );
mavlink_msg_global_position_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_global_position_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_int_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.lat , packet1.lon , packet1.alt , packet1.relative_alt , packet1.vx , packet1.vy , packet1.vz , packet1.hdg );
mavlink_msg_global_position_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_scaled(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_scaled_t packet_in = {
963497464,
17443,
17547,
17651,
17755,
17859,
17963,
18067,
18171,
65,
132,
};
mavlink_rc_channels_scaled_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.chan1_scaled = packet_in.chan1_scaled;
packet1.chan2_scaled = packet_in.chan2_scaled;
packet1.chan3_scaled = packet_in.chan3_scaled;
packet1.chan4_scaled = packet_in.chan4_scaled;
packet1.chan5_scaled = packet_in.chan5_scaled;
packet1.chan6_scaled = packet_in.chan6_scaled;
packet1.chan7_scaled = packet_in.chan7_scaled;
packet1.chan8_scaled = packet_in.chan8_scaled;
packet1.port = packet_in.port;
packet1.rssi = packet_in.rssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.port , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.port , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_scaled_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_scaled_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.port , packet1.chan1_scaled , packet1.chan2_scaled , packet1.chan3_scaled , packet1.chan4_scaled , packet1.chan5_scaled , packet1.chan6_scaled , packet1.chan7_scaled , packet1.chan8_scaled , packet1.rssi );
mavlink_msg_rc_channels_scaled_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_raw_t packet_in = {
963497464,
17443,
17547,
17651,
17755,
17859,
17963,
18067,
18171,
65,
132,
};
mavlink_rc_channels_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.chan1_raw = packet_in.chan1_raw;
packet1.chan2_raw = packet_in.chan2_raw;
packet1.chan3_raw = packet_in.chan3_raw;
packet1.chan4_raw = packet_in.chan4_raw;
packet1.chan5_raw = packet_in.chan5_raw;
packet1.chan6_raw = packet_in.chan6_raw;
packet1.chan7_raw = packet_in.chan7_raw;
packet1.chan8_raw = packet_in.chan8_raw;
packet1.port = packet_in.port;
packet1.rssi = packet_in.rssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.port , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.port , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_raw_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.port , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.rssi );
mavlink_msg_rc_channels_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_servo_output_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_servo_output_raw_t packet_in = {
963497464,
17443,
17547,
17651,
17755,
17859,
17963,
18067,
18171,
65,
};
mavlink_servo_output_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.servo1_raw = packet_in.servo1_raw;
packet1.servo2_raw = packet_in.servo2_raw;
packet1.servo3_raw = packet_in.servo3_raw;
packet1.servo4_raw = packet_in.servo4_raw;
packet1.servo5_raw = packet_in.servo5_raw;
packet1.servo6_raw = packet_in.servo6_raw;
packet1.servo7_raw = packet_in.servo7_raw;
packet1.servo8_raw = packet_in.servo8_raw;
packet1.port = packet_in.port;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_pack(system_id, component_id, &msg , packet1.time_usec , packet1.port , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.port , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_servo_output_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_servo_output_raw_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.port , packet1.servo1_raw , packet1.servo2_raw , packet1.servo3_raw , packet1.servo4_raw , packet1.servo5_raw , packet1.servo6_raw , packet1.servo7_raw , packet1.servo8_raw );
mavlink_msg_servo_output_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_request_partial_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_request_partial_list_t packet_in = {
17235,
17339,
17,
84,
};
mavlink_mission_request_partial_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.start_index = packet_in.start_index;
packet1.end_index = packet_in.end_index;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_partial_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_request_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_partial_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_request_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_partial_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_request_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_request_partial_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_partial_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_request_partial_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_write_partial_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_write_partial_list_t packet_in = {
17235,
17339,
17,
84,
};
mavlink_mission_write_partial_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.start_index = packet_in.start_index;
packet1.end_index = packet_in.end_index;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_write_partial_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_write_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_write_partial_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_write_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_write_partial_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_write_partial_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_write_partial_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_write_partial_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.start_index , packet1.end_index );
mavlink_msg_mission_write_partial_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_item(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_item_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
18691,
18795,
101,
168,
235,
46,
113,
};
mavlink_mission_item_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param1 = packet_in.param1;
packet1.param2 = packet_in.param2;
packet1.param3 = packet_in.param3;
packet1.param4 = packet_in.param4;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.seq = packet_in.seq;
packet1.command = packet_in.command;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.frame = packet_in.frame;
packet1.current = packet_in.current;
packet1.autocontinue = packet_in.autocontinue;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_item_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_mission_item_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_mission_item_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_item_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq , packet1.frame , packet1.command , packet1.current , packet1.autocontinue , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.x , packet1.y , packet1.z );
mavlink_msg_mission_item_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_request(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_request_t packet_in = {
17235,
139,
206,
};
mavlink_mission_request_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_request_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_request_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_request_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_set_current(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_set_current_t packet_in = {
17235,
139,
206,
};
mavlink_mission_set_current_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_set_current_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_set_current_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_set_current_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_set_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_set_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_set_current_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.seq );
mavlink_msg_mission_set_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_current(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_current_t packet_in = {
17235,
};
mavlink_mission_current_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_current_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_current_pack(system_id, component_id, &msg , packet1.seq );
mavlink_msg_mission_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_current_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.seq );
mavlink_msg_mission_current_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_current_send(MAVLINK_COMM_1 , packet1.seq );
mavlink_msg_mission_current_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_request_list(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_request_list_t packet_in = {
5,
72,
};
mavlink_mission_request_list_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_list_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_list_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_mission_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_list_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_mission_request_list_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_request_list_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_mission_request_list_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_count(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_count_t packet_in = {
17235,
139,
206,
};
mavlink_mission_count_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.count = packet_in.count;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_count_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_count_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_mission_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_count_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_mission_count_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_count_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_count_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.count );
mavlink_msg_mission_count_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_clear_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_clear_all_t packet_in = {
5,
72,
};
mavlink_mission_clear_all_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_clear_all_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_clear_all_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_mission_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_clear_all_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component );
mavlink_msg_mission_clear_all_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_clear_all_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_clear_all_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component );
mavlink_msg_mission_clear_all_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_item_reached(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_item_reached_t packet_in = {
17235,
};
mavlink_mission_item_reached_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.seq = packet_in.seq;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_reached_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_item_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_reached_pack(system_id, component_id, &msg , packet1.seq );
mavlink_msg_mission_item_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_reached_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.seq );
mavlink_msg_mission_item_reached_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_item_reached_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_item_reached_send(MAVLINK_COMM_1 , packet1.seq );
mavlink_msg_mission_item_reached_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_mission_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_mission_ack_t packet_in = {
5,
72,
139,
};
mavlink_mission_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.type = packet_in.type;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_mission_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_ack_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_mission_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_mission_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_mission_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_mission_ack_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.type );
mavlink_msg_mission_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_gps_global_origin(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_gps_global_origin_t packet_in = {
963497464,
963497672,
963497880,
41,
};
mavlink_set_gps_global_origin_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
packet1.target_system = packet_in.target_system;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_gps_global_origin_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_gps_global_origin_pack(system_id, component_id, &msg , packet1.target_system , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_set_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_gps_global_origin_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_set_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_gps_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_gps_global_origin_send(MAVLINK_COMM_1 , packet1.target_system , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_set_gps_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_gps_global_origin(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_gps_global_origin_t packet_in = {
963497464,
963497672,
963497880,
};
mavlink_gps_global_origin_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_global_origin_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_global_origin_pack(system_id, component_id, &msg , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_global_origin_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_global_origin_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_gps_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_gps_global_origin_send(MAVLINK_COMM_1 , packet1.latitude , packet1.longitude , packet1.altitude );
mavlink_msg_gps_global_origin_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_local_position_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_local_position_setpoint_t packet_in = {
17.0,
45.0,
73.0,
101.0,
53,
120,
187,
};
mavlink_set_local_position_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.yaw = packet_in.yaw;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.coordinate_frame = packet_in.coordinate_frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_local_position_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_local_position_setpoint_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_set_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_local_position_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_set_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_local_position_setpoint_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_set_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_setpoint_t packet_in = {
17.0,
45.0,
73.0,
101.0,
53,
};
mavlink_local_position_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.yaw = packet_in.yaw;
packet1.coordinate_frame = packet_in.coordinate_frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_pack(system_id, component_id, &msg , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_setpoint_send(MAVLINK_COMM_1 , packet1.coordinate_frame , packet1.x , packet1.y , packet1.z , packet1.yaw );
mavlink_msg_local_position_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_global_position_setpoint_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_global_position_setpoint_int_t packet_in = {
963497464,
963497672,
963497880,
17859,
175,
};
mavlink_global_position_setpoint_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
packet1.yaw = packet_in.yaw;
packet1.coordinate_frame = packet_in.coordinate_frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_setpoint_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_setpoint_int_pack(system_id, component_id, &msg , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_setpoint_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_global_position_setpoint_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_position_setpoint_int_send(MAVLINK_COMM_1 , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_global_position_setpoint_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_global_position_setpoint_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_global_position_setpoint_int_t packet_in = {
963497464,
963497672,
963497880,
17859,
175,
};
mavlink_set_global_position_setpoint_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.latitude = packet_in.latitude;
packet1.longitude = packet_in.longitude;
packet1.altitude = packet_in.altitude;
packet1.yaw = packet_in.yaw;
packet1.coordinate_frame = packet_in.coordinate_frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_global_position_setpoint_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_global_position_setpoint_int_pack(system_id, component_id, &msg , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_set_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_global_position_setpoint_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_set_global_position_setpoint_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_global_position_setpoint_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_global_position_setpoint_int_send(MAVLINK_COMM_1 , packet1.coordinate_frame , packet1.latitude , packet1.longitude , packet1.altitude , packet1.yaw );
mavlink_msg_set_global_position_setpoint_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_safety_set_allowed_area(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_safety_set_allowed_area_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
77,
144,
211,
};
mavlink_safety_set_allowed_area_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.p1x = packet_in.p1x;
packet1.p1y = packet_in.p1y;
packet1.p1z = packet_in.p1z;
packet1.p2x = packet_in.p2x;
packet1.p2y = packet_in.p2y;
packet1.p2z = packet_in.p2z;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.frame = packet_in.frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_safety_set_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_set_allowed_area_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_set_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_safety_allowed_area(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_safety_allowed_area_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
77,
};
mavlink_safety_allowed_area_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.p1x = packet_in.p1x;
packet1.p1y = packet_in.p1y;
packet1.p1z = packet_in.p1z;
packet1.p2x = packet_in.p2x;
packet1.p2y = packet_in.p2y;
packet1.p2z = packet_in.p2z;
packet1.frame = packet_in.frame;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_pack(system_id, component_id, &msg , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_safety_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_safety_allowed_area_send(MAVLINK_COMM_1 , packet1.frame , packet1.p1x , packet1.p1y , packet1.p1z , packet1.p2x , packet1.p2y , packet1.p2z );
mavlink_msg_safety_allowed_area_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_roll_pitch_yaw_thrust(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_roll_pitch_yaw_thrust_t packet_in = {
17.0,
45.0,
73.0,
101.0,
53,
120,
};
mavlink_set_roll_pitch_yaw_thrust_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_thrust_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_roll_pitch_yaw_speed_thrust(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_roll_pitch_yaw_speed_thrust_t packet_in = {
17.0,
45.0,
73.0,
101.0,
53,
120,
};
mavlink_set_roll_pitch_yaw_speed_thrust_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.roll_speed = packet_in.roll_speed;
packet1.pitch_speed = packet_in.pitch_speed;
packet1.yaw_speed = packet_in.yaw_speed;
packet1.thrust = packet_in.thrust;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_roll_pitch_yaw_speed_thrust_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_set_roll_pitch_yaw_speed_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_roll_pitch_yaw_thrust_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_roll_pitch_yaw_thrust_setpoint_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
};
mavlink_roll_pitch_yaw_thrust_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_thrust_setpoint_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_roll_pitch_yaw_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_roll_pitch_yaw_speed_thrust_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
};
mavlink_roll_pitch_yaw_speed_thrust_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.roll_speed = packet_in.roll_speed;
packet1.pitch_speed = packet_in.pitch_speed;
packet1.yaw_speed = packet_in.yaw_speed;
packet1.thrust = packet_in.thrust;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.roll_speed , packet1.pitch_speed , packet1.yaw_speed , packet1.thrust );
mavlink_msg_roll_pitch_yaw_speed_thrust_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_quad_motors_setpoint(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_quad_motors_setpoint_t packet_in = {
17235,
17339,
17443,
17547,
29,
};
mavlink_set_quad_motors_setpoint_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.motor_front_nw = packet_in.motor_front_nw;
packet1.motor_right_ne = packet_in.motor_right_ne;
packet1.motor_back_se = packet_in.motor_back_se;
packet1.motor_left_sw = packet_in.motor_left_sw;
packet1.target_system = packet_in.target_system;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_motors_setpoint_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_quad_motors_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_motors_setpoint_pack(system_id, component_id, &msg , packet1.target_system , packet1.motor_front_nw , packet1.motor_right_ne , packet1.motor_back_se , packet1.motor_left_sw );
mavlink_msg_set_quad_motors_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_motors_setpoint_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.motor_front_nw , packet1.motor_right_ne , packet1.motor_back_se , packet1.motor_left_sw );
mavlink_msg_set_quad_motors_setpoint_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_quad_motors_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_motors_setpoint_send(MAVLINK_COMM_1 , packet1.target_system , packet1.motor_front_nw , packet1.motor_right_ne , packet1.motor_back_se , packet1.motor_left_sw );
mavlink_msg_set_quad_motors_setpoint_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_set_quad_swarm_roll_pitch_yaw_thrust(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t packet_in = {
{ 17235, 17236, 17237, 17238, 17239, 17240 },
{ 17859, 17860, 17861, 17862, 17863, 17864 },
{ 18483, 18484, 18485, 18486, 18487, 18488 },
{ 19107, 19108, 19109, 19110, 19111, 19112 },
{ 149, 150, 151, 152, 153, 154 },
};
mavlink_set_quad_swarm_roll_pitch_yaw_thrust_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.roll, packet_in.roll, sizeof(int16_t)*6);
mav_array_memcpy(packet1.pitch, packet_in.pitch, sizeof(int16_t)*6);
mav_array_memcpy(packet1.yaw, packet_in.yaw, sizeof(int16_t)*6);
mav_array_memcpy(packet1.thrust, packet_in.thrust, sizeof(uint16_t)*6);
mav_array_memcpy(packet1.target_systems, packet_in.target_systems, sizeof(uint8_t)*6);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_pack(system_id, component_id, &msg , packet1.target_systems , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_systems , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_send(MAVLINK_COMM_1 , packet1.target_systems , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust );
mavlink_msg_set_quad_swarm_roll_pitch_yaw_thrust_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_nav_controller_output(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_nav_controller_output_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
18275,
18379,
18483,
};
mavlink_nav_controller_output_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.nav_roll = packet_in.nav_roll;
packet1.nav_pitch = packet_in.nav_pitch;
packet1.alt_error = packet_in.alt_error;
packet1.aspd_error = packet_in.aspd_error;
packet1.xtrack_error = packet_in.xtrack_error;
packet1.nav_bearing = packet_in.nav_bearing;
packet1.target_bearing = packet_in.target_bearing;
packet1.wp_dist = packet_in.wp_dist;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_pack(system_id, component_id, &msg , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_nav_controller_output_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_nav_controller_output_send(MAVLINK_COMM_1 , packet1.nav_roll , packet1.nav_pitch , packet1.nav_bearing , packet1.target_bearing , packet1.wp_dist , packet1.alt_error , packet1.aspd_error , packet1.xtrack_error );
mavlink_msg_nav_controller_output_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_state_correction(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_state_correction_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
};
mavlink_state_correction_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.xErr = packet_in.xErr;
packet1.yErr = packet_in.yErr;
packet1.zErr = packet_in.zErr;
packet1.rollErr = packet_in.rollErr;
packet1.pitchErr = packet_in.pitchErr;
packet1.yawErr = packet_in.yawErr;
packet1.vxErr = packet_in.vxErr;
packet1.vyErr = packet_in.vyErr;
packet1.vzErr = packet_in.vzErr;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_pack(system_id, component_id, &msg , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_state_correction_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_state_correction_send(MAVLINK_COMM_1 , packet1.xErr , packet1.yErr , packet1.zErr , packet1.rollErr , packet1.pitchErr , packet1.yawErr , packet1.vxErr , packet1.vyErr , packet1.vzErr );
mavlink_msg_state_correction_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_request_data_stream(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_request_data_stream_t packet_in = {
17235,
139,
206,
17,
84,
};
mavlink_request_data_stream_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.req_message_rate = packet_in.req_message_rate;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.req_stream_id = packet_in.req_stream_id;
packet1.start_stop = packet_in.start_stop;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_request_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_request_data_stream_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.req_stream_id , packet1.req_message_rate , packet1.start_stop );
mavlink_msg_request_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_data_stream(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_data_stream_t packet_in = {
17235,
139,
206,
};
mavlink_data_stream_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.message_rate = packet_in.message_rate;
packet1.stream_id = packet_in.stream_id;
packet1.on_off = packet_in.on_off;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_data_stream_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_data_stream_pack(system_id, component_id, &msg , packet1.stream_id , packet1.message_rate , packet1.on_off );
mavlink_msg_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_data_stream_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.stream_id , packet1.message_rate , packet1.on_off );
mavlink_msg_data_stream_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_data_stream_send(MAVLINK_COMM_1 , packet1.stream_id , packet1.message_rate , packet1.on_off );
mavlink_msg_data_stream_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_manual_control(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_manual_control_t packet_in = {
17.0,
45.0,
73.0,
101.0,
53,
120,
187,
254,
65,
};
mavlink_manual_control_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.thrust = packet_in.thrust;
packet1.target = packet_in.target;
packet1.roll_manual = packet_in.roll_manual;
packet1.pitch_manual = packet_in.pitch_manual;
packet1.yaw_manual = packet_in.yaw_manual;
packet1.thrust_manual = packet_in.thrust_manual;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_pack(system_id, component_id, &msg , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_manual_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_manual_control_send(MAVLINK_COMM_1 , packet1.target , packet1.roll , packet1.pitch , packet1.yaw , packet1.thrust , packet1.roll_manual , packet1.pitch_manual , packet1.yaw_manual , packet1.thrust_manual );
mavlink_msg_manual_control_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_rc_channels_override(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_rc_channels_override_t packet_in = {
17235,
17339,
17443,
17547,
17651,
17755,
17859,
17963,
53,
120,
};
mavlink_rc_channels_override_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.chan1_raw = packet_in.chan1_raw;
packet1.chan2_raw = packet_in.chan2_raw;
packet1.chan3_raw = packet_in.chan3_raw;
packet1.chan4_raw = packet_in.chan4_raw;
packet1.chan5_raw = packet_in.chan5_raw;
packet1.chan6_raw = packet_in.chan6_raw;
packet1.chan7_raw = packet_in.chan7_raw;
packet1.chan8_raw = packet_in.chan8_raw;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_rc_channels_override_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_rc_channels_override_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw );
mavlink_msg_rc_channels_override_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_vfr_hud(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_vfr_hud_t packet_in = {
17.0,
45.0,
73.0,
101.0,
18067,
18171,
};
mavlink_vfr_hud_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.airspeed = packet_in.airspeed;
packet1.groundspeed = packet_in.groundspeed;
packet1.alt = packet_in.alt;
packet1.climb = packet_in.climb;
packet1.heading = packet_in.heading;
packet1.throttle = packet_in.throttle;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_pack(system_id, component_id, &msg , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_vfr_hud_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vfr_hud_send(MAVLINK_COMM_1 , packet1.airspeed , packet1.groundspeed , packet1.heading , packet1.throttle , packet1.alt , packet1.climb );
mavlink_msg_vfr_hud_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_command_long(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_command_long_t packet_in = {
17.0,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
18691,
223,
34,
101,
};
mavlink_command_long_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.param1 = packet_in.param1;
packet1.param2 = packet_in.param2;
packet1.param3 = packet_in.param3;
packet1.param4 = packet_in.param4;
packet1.param5 = packet_in.param5;
packet1.param6 = packet_in.param6;
packet1.param7 = packet_in.param7;
packet1.command = packet_in.command;
packet1.target_system = packet_in.target_system;
packet1.target_component = packet_in.target_component;
packet1.confirmation = packet_in.confirmation;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_long_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_command_long_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_long_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.param5 , packet1.param6 , packet1.param7 );
mavlink_msg_command_long_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_long_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.param5 , packet1.param6 , packet1.param7 );
mavlink_msg_command_long_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_command_long_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_long_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_component , packet1.command , packet1.confirmation , packet1.param1 , packet1.param2 , packet1.param3 , packet1.param4 , packet1.param5 , packet1.param6 , packet1.param7 );
mavlink_msg_command_long_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_command_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_command_ack_t packet_in = {
17235,
139,
};
mavlink_command_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.command = packet_in.command;
packet1.result = packet_in.result;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_pack(system_id, component_id, &msg , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_command_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_command_ack_send(MAVLINK_COMM_1 , packet1.command , packet1.result );
mavlink_msg_command_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_local_position_ned_system_global_offset(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_local_position_ned_system_global_offset_t packet_in = {
963497464,
45.0,
73.0,
101.0,
129.0,
157.0,
185.0,
};
mavlink_local_position_ned_system_global_offset_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_system_global_offset_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_local_position_ned_system_global_offset_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_system_global_offset_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_local_position_ned_system_global_offset_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_system_global_offset_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_local_position_ned_system_global_offset_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_local_position_ned_system_global_offset_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_local_position_ned_system_global_offset_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_local_position_ned_system_global_offset_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hil_state(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hil_state_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
963499128,
963499336,
963499544,
19523,
19627,
19731,
19835,
19939,
20043,
};
mavlink_hil_state_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
packet1.rollspeed = packet_in.rollspeed;
packet1.pitchspeed = packet_in.pitchspeed;
packet1.yawspeed = packet_in.yawspeed;
packet1.lat = packet_in.lat;
packet1.lon = packet_in.lon;
packet1.alt = packet_in.alt;
packet1.vx = packet_in.vx;
packet1.vy = packet_in.vy;
packet1.vz = packet_in.vz;
packet1.xacc = packet_in.xacc;
packet1.yacc = packet_in.yacc;
packet1.zacc = packet_in.zacc;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_pack(system_id, component_id, &msg , packet1.time_usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hil_state_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_state_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.roll , packet1.pitch , packet1.yaw , packet1.rollspeed , packet1.pitchspeed , packet1.yawspeed , packet1.lat , packet1.lon , packet1.alt , packet1.vx , packet1.vy , packet1.vz , packet1.xacc , packet1.yacc , packet1.zacc );
mavlink_msg_hil_state_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hil_controls(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hil_controls_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
241.0,
269.0,
125,
192,
};
mavlink_hil_controls_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.roll_ailerons = packet_in.roll_ailerons;
packet1.pitch_elevator = packet_in.pitch_elevator;
packet1.yaw_rudder = packet_in.yaw_rudder;
packet1.throttle = packet_in.throttle;
packet1.aux1 = packet_in.aux1;
packet1.aux2 = packet_in.aux2;
packet1.aux3 = packet_in.aux3;
packet1.aux4 = packet_in.aux4;
packet1.mode = packet_in.mode;
packet1.nav_mode = packet_in.nav_mode;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_pack(system_id, component_id, &msg , packet1.time_usec , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.aux1 , packet1.aux2 , packet1.aux3 , packet1.aux4 , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.aux1 , packet1.aux2 , packet1.aux3 , packet1.aux4 , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hil_controls_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_controls_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.roll_ailerons , packet1.pitch_elevator , packet1.yaw_rudder , packet1.throttle , packet1.aux1 , packet1.aux2 , packet1.aux3 , packet1.aux4 , packet1.mode , packet1.nav_mode );
mavlink_msg_hil_controls_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_hil_rc_inputs_raw(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_hil_rc_inputs_raw_t packet_in = {
93372036854775807ULL,
17651,
17755,
17859,
17963,
18067,
18171,
18275,
18379,
18483,
18587,
18691,
18795,
101,
};
mavlink_hil_rc_inputs_raw_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.chan1_raw = packet_in.chan1_raw;
packet1.chan2_raw = packet_in.chan2_raw;
packet1.chan3_raw = packet_in.chan3_raw;
packet1.chan4_raw = packet_in.chan4_raw;
packet1.chan5_raw = packet_in.chan5_raw;
packet1.chan6_raw = packet_in.chan6_raw;
packet1.chan7_raw = packet_in.chan7_raw;
packet1.chan8_raw = packet_in.chan8_raw;
packet1.chan9_raw = packet_in.chan9_raw;
packet1.chan10_raw = packet_in.chan10_raw;
packet1.chan11_raw = packet_in.chan11_raw;
packet1.chan12_raw = packet_in.chan12_raw;
packet1.rssi = packet_in.rssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_rc_inputs_raw_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_hil_rc_inputs_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_rc_inputs_raw_pack(system_id, component_id, &msg , packet1.time_usec , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.chan9_raw , packet1.chan10_raw , packet1.chan11_raw , packet1.chan12_raw , packet1.rssi );
mavlink_msg_hil_rc_inputs_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_rc_inputs_raw_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.chan9_raw , packet1.chan10_raw , packet1.chan11_raw , packet1.chan12_raw , packet1.rssi );
mavlink_msg_hil_rc_inputs_raw_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_hil_rc_inputs_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_hil_rc_inputs_raw_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.chan1_raw , packet1.chan2_raw , packet1.chan3_raw , packet1.chan4_raw , packet1.chan5_raw , packet1.chan6_raw , packet1.chan7_raw , packet1.chan8_raw , packet1.chan9_raw , packet1.chan10_raw , packet1.chan11_raw , packet1.chan12_raw , packet1.rssi );
mavlink_msg_hil_rc_inputs_raw_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_optical_flow(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_optical_flow_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
18275,
18379,
77,
144,
};
mavlink_optical_flow_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.flow_comp_m_x = packet_in.flow_comp_m_x;
packet1.flow_comp_m_y = packet_in.flow_comp_m_y;
packet1.ground_distance = packet_in.ground_distance;
packet1.flow_x = packet_in.flow_x;
packet1.flow_y = packet_in.flow_y;
packet1.sensor_id = packet_in.sensor_id;
packet1.quality = packet_in.quality;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_pack(system_id, component_id, &msg , packet1.time_usec , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.flow_comp_m_x , packet1.flow_comp_m_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_usec , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.flow_comp_m_x , packet1.flow_comp_m_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_optical_flow_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_optical_flow_send(MAVLINK_COMM_1 , packet1.time_usec , packet1.sensor_id , packet1.flow_x , packet1.flow_y , packet1.flow_comp_m_x , packet1.flow_comp_m_y , packet1.quality , packet1.ground_distance );
mavlink_msg_optical_flow_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_global_vision_position_estimate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_global_vision_position_estimate_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_global_vision_position_estimate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_vision_position_estimate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_global_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_vision_position_estimate_pack(system_id, component_id, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_global_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_vision_position_estimate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_global_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_global_vision_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_global_vision_position_estimate_send(MAVLINK_COMM_1 , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_global_vision_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_vision_position_estimate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_vision_position_estimate_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_vision_position_estimate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_position_estimate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_position_estimate_pack(system_id, component_id, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_position_estimate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vision_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_vision_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_position_estimate_send(MAVLINK_COMM_1 , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vision_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_vision_speed_estimate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_vision_speed_estimate_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
};
mavlink_vision_speed_estimate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_speed_estimate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_vision_speed_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_speed_estimate_pack(system_id, component_id, &msg , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_vision_speed_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_speed_estimate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_vision_speed_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_vision_speed_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vision_speed_estimate_send(MAVLINK_COMM_1 , packet1.usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_vision_speed_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_vicon_position_estimate(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_vicon_position_estimate_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
157.0,
185.0,
213.0,
};
mavlink_vicon_position_estimate_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.usec = packet_in.usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
packet1.roll = packet_in.roll;
packet1.pitch = packet_in.pitch;
packet1.yaw = packet_in.yaw;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vicon_position_estimate_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_vicon_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vicon_position_estimate_pack(system_id, component_id, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vicon_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vicon_position_estimate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vicon_position_estimate_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_vicon_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_vicon_position_estimate_send(MAVLINK_COMM_1 , packet1.usec , packet1.x , packet1.y , packet1.z , packet1.roll , packet1.pitch , packet1.yaw );
mavlink_msg_vicon_position_estimate_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_memory_vect(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_memory_vect_t packet_in = {
17235,
139,
206,
{ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 },
};
mavlink_memory_vect_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.address = packet_in.address;
packet1.ver = packet_in.ver;
packet1.type = packet_in.type;
mav_array_memcpy(packet1.value, packet_in.value, sizeof(int8_t)*32);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_memory_vect_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_memory_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_memory_vect_pack(system_id, component_id, &msg , packet1.address , packet1.ver , packet1.type , packet1.value );
mavlink_msg_memory_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_memory_vect_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.address , packet1.ver , packet1.type , packet1.value );
mavlink_msg_memory_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_memory_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_memory_vect_send(MAVLINK_COMM_1 , packet1.address , packet1.ver , packet1.type , packet1.value );
mavlink_msg_memory_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_debug_vect(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_debug_vect_t packet_in = {
93372036854775807ULL,
73.0,
101.0,
129.0,
"UVWXYZABC",
};
mavlink_debug_vect_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_usec = packet_in.time_usec;
packet1.x = packet_in.x;
packet1.y = packet_in.y;
packet1.z = packet_in.z;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_pack(system_id, component_id, &msg , packet1.name , packet1.time_usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.name , packet1.time_usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_debug_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_vect_send(MAVLINK_COMM_1 , packet1.name , packet1.time_usec , packet1.x , packet1.y , packet1.z );
mavlink_msg_debug_vect_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_named_value_float(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_named_value_float_t packet_in = {
963497464,
45.0,
"IJKLMNOPQ",
};
mavlink_named_value_float_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.value = packet_in.value;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_named_value_float_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_float_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_float_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_named_value_int(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_named_value_int_t packet_in = {
963497464,
963497672,
"IJKLMNOPQ",
};
mavlink_named_value_int_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.value = packet_in.value;
mav_array_memcpy(packet1.name, packet_in.name, sizeof(char)*10);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_named_value_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_named_value_int_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.name , packet1.value );
mavlink_msg_named_value_int_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_statustext(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_statustext_t packet_in = {
5,
"BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX",
};
mavlink_statustext_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.severity = packet_in.severity;
mav_array_memcpy(packet1.text, packet_in.text, sizeof(char)*50);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_pack(system_id, component_id, &msg , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_statustext_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_statustext_send(MAVLINK_COMM_1 , packet1.severity , packet1.text );
mavlink_msg_statustext_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_debug(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_debug_t packet_in = {
963497464,
45.0,
29,
};
mavlink_debug_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.time_boot_ms = packet_in.time_boot_ms;
packet1.value = packet_in.value;
packet1.ind = packet_in.ind;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.ind , packet1.value );
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.ind , packet1.value );
mavlink_msg_debug_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_debug_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_debug_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.ind , packet1.value );
mavlink_msg_debug_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_common(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_heartbeat(system_id, component_id, last_msg);
mavlink_test_sys_status(system_id, component_id, last_msg);
mavlink_test_system_time(system_id, component_id, last_msg);
mavlink_test_ping(system_id, component_id, last_msg);
mavlink_test_change_operator_control(system_id, component_id, last_msg);
mavlink_test_change_operator_control_ack(system_id, component_id, last_msg);
mavlink_test_auth_key(system_id, component_id, last_msg);
mavlink_test_set_mode(system_id, component_id, last_msg);
mavlink_test_param_request_read(system_id, component_id, last_msg);
mavlink_test_param_request_list(system_id, component_id, last_msg);
mavlink_test_param_value(system_id, component_id, last_msg);
mavlink_test_param_set(system_id, component_id, last_msg);
mavlink_test_gps_raw_int(system_id, component_id, last_msg);
mavlink_test_gps_status(system_id, component_id, last_msg);
mavlink_test_scaled_imu(system_id, component_id, last_msg);
mavlink_test_raw_imu(system_id, component_id, last_msg);
mavlink_test_raw_pressure(system_id, component_id, last_msg);
mavlink_test_scaled_pressure(system_id, component_id, last_msg);
mavlink_test_attitude(system_id, component_id, last_msg);
mavlink_test_attitude_quaternion(system_id, component_id, last_msg);
mavlink_test_local_position_ned(system_id, component_id, last_msg);
mavlink_test_global_position_int(system_id, component_id, last_msg);
mavlink_test_rc_channels_scaled(system_id, component_id, last_msg);
mavlink_test_rc_channels_raw(system_id, component_id, last_msg);
mavlink_test_servo_output_raw(system_id, component_id, last_msg);
mavlink_test_mission_request_partial_list(system_id, component_id, last_msg);
mavlink_test_mission_write_partial_list(system_id, component_id, last_msg);
mavlink_test_mission_item(system_id, component_id, last_msg);
mavlink_test_mission_request(system_id, component_id, last_msg);
mavlink_test_mission_set_current(system_id, component_id, last_msg);
mavlink_test_mission_current(system_id, component_id, last_msg);
mavlink_test_mission_request_list(system_id, component_id, last_msg);
mavlink_test_mission_count(system_id, component_id, last_msg);
mavlink_test_mission_clear_all(system_id, component_id, last_msg);
mavlink_test_mission_item_reached(system_id, component_id, last_msg);
mavlink_test_mission_ack(system_id, component_id, last_msg);
mavlink_test_set_gps_global_origin(system_id, component_id, last_msg);
mavlink_test_gps_global_origin(system_id, component_id, last_msg);
mavlink_test_set_local_position_setpoint(system_id, component_id, last_msg);
mavlink_test_local_position_setpoint(system_id, component_id, last_msg);
mavlink_test_global_position_setpoint_int(system_id, component_id, last_msg);
mavlink_test_set_global_position_setpoint_int(system_id, component_id, last_msg);
mavlink_test_safety_set_allowed_area(system_id, component_id, last_msg);
mavlink_test_safety_allowed_area(system_id, component_id, last_msg);
mavlink_test_set_roll_pitch_yaw_thrust(system_id, component_id, last_msg);
mavlink_test_set_roll_pitch_yaw_speed_thrust(system_id, component_id, last_msg);
mavlink_test_roll_pitch_yaw_thrust_setpoint(system_id, component_id, last_msg);
mavlink_test_roll_pitch_yaw_speed_thrust_setpoint(system_id, component_id, last_msg);
mavlink_test_set_quad_motors_setpoint(system_id, component_id, last_msg);
mavlink_test_set_quad_swarm_roll_pitch_yaw_thrust(system_id, component_id, last_msg);
mavlink_test_nav_controller_output(system_id, component_id, last_msg);
mavlink_test_state_correction(system_id, component_id, last_msg);
mavlink_test_request_data_stream(system_id, component_id, last_msg);
mavlink_test_data_stream(system_id, component_id, last_msg);
mavlink_test_manual_control(system_id, component_id, last_msg);
mavlink_test_rc_channels_override(system_id, component_id, last_msg);
mavlink_test_vfr_hud(system_id, component_id, last_msg);
mavlink_test_command_long(system_id, component_id, last_msg);
mavlink_test_command_ack(system_id, component_id, last_msg);
mavlink_test_local_position_ned_system_global_offset(system_id, component_id, last_msg);
mavlink_test_hil_state(system_id, component_id, last_msg);
mavlink_test_hil_controls(system_id, component_id, last_msg);
mavlink_test_hil_rc_inputs_raw(system_id, component_id, last_msg);
mavlink_test_optical_flow(system_id, component_id, last_msg);
mavlink_test_global_vision_position_estimate(system_id, component_id, last_msg);
mavlink_test_vision_position_estimate(system_id, component_id, last_msg);
mavlink_test_vision_speed_estimate(system_id, component_id, last_msg);
mavlink_test_vicon_position_estimate(system_id, component_id, last_msg);
mavlink_test_memory_vect(system_id, component_id, last_msg);
mavlink_test_debug_vect(system_id, component_id, last_msg);
mavlink_test_named_value_float(system_id, component_id, last_msg);
mavlink_test_named_value_int(system_id, component_id, last_msg);
mavlink_test_statustext(system_id, component_id, last_msg);
mavlink_test_debug(system_id, component_id, last_msg);
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // COMMON_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/common/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from common.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Mon Apr 30 11:40:12 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "1.0"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/matrixpilot/matrixpilot.h
0,0 → 1,53
/** @file
* @brief MAVLink comm protocol generated from matrixpilot.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef MATRIXPILOT_H
#define MATRIXPILOT_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 54, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 200, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SET_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_WRITE_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_ITEM, MAVLINK_MESSAGE_INFO_MISSION_REQUEST, MAVLINK_MESSAGE_INFO_MISSION_SET_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_LIST, MAVLINK_MESSAGE_INFO_MISSION_COUNT, MAVLINK_MESSAGE_INFO_MISSION_CLEAR_ALL, MAVLINK_MESSAGE_INFO_MISSION_ITEM_REACHED, MAVLINK_MESSAGE_INFO_MISSION_ACK, MAVLINK_MESSAGE_INFO_SET_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_SET_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SET_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_MOTORS_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_DATA_STREAM, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_VFR_HUD, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_COMMAND_LONG, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_SPEED_ESTIMATE, MAVLINK_MESSAGE_INFO_VICON_POSITION_ESTIMATE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MEMORY_VECT, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_MATRIXPILOT
 
#include "../common/common.h"
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
// ENUM DEFINITIONS
 
 
 
// MESSAGE DEFINITIONS
 
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // MATRIXPILOT_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/matrixpilot/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from matrixpilot.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 254
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 1
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 1
#endif
 
#include "version.h"
#include "matrixpilot.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/matrixpilot/testsuite.h
0,0 → 1,36
/** @file
* @brief MAVLink comm protocol testsuite generated from matrixpilot.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef MATRIXPILOT_TESTSUITE_H
#define MATRIXPILOT_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
static void mavlink_test_matrixpilot(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_common(system_id, component_id, last_msg);
mavlink_test_matrixpilot(system_id, component_id, last_msg);
}
#endif
 
#include "../common/testsuite.h"
 
 
 
static void mavlink_test_matrixpilot(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
 
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // MATRIXPILOT_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/matrixpilot/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from matrixpilot.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Fri Apr 20 12:22:49 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "1.0"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/mavlink_helpers.h
0,0 → 1,507
#ifndef _MAVLINK_HELPERS_H_
#define _MAVLINK_HELPERS_H_
 
#include "string.h"
#include "checksum.h"
#include "mavlink_types.h"
 
#ifndef MAVLINK_HELPER
#define MAVLINK_HELPER
#endif
 
/*
internal function to give access to the channel status for each channel
*/
MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan)
{
static mavlink_status_t m_mavlink_status[MAVLINK_COMM_NUM_BUFFERS];
return &m_mavlink_status[chan];
}
 
/*
internal function to give access to the channel buffer for each channel
*/
MAVLINK_HELPER mavlink_message_t* mavlink_get_channel_buffer(uint8_t chan)
{
#if MAVLINK_EXTERNAL_RX_BUFFER
// No m_mavlink_message array defined in function,
// has to be defined externally
#ifndef m_mavlink_message
#error ERROR: IF #define MAVLINK_EXTERNAL_RX_BUFFER IS SET, THE BUFFER HAS TO BE ALLOCATED OUTSIDE OF THIS FUNCTION (mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS];)
#endif
#else
static mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS];
#endif
return &m_mavlink_buffer[chan];
}
 
/**
* @brief Finalize a MAVLink message with channel assignment
*
* This function calculates the checksum and sets length and aircraft id correctly.
* It assumes that the message id and the payload are already correctly set. This function
* can also be used if the message header has already been written before (as in mavlink_msg_xxx_pack
* instead of mavlink_msg_xxx_pack_headerless), it just introduces little extra overhead.
*
* @param msg Message to finalize
* @param system_id Id of the sending (this) system, 1-127
* @param length Message length
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length, uint8_t crc_extra)
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length)
#endif
{
// This code part is the same for all messages;
uint16_t checksum;
msg->magic = MAVLINK_STX;
msg->len = length;
msg->sysid = system_id;
msg->compid = component_id;
// One sequence number per component
msg->seq = mavlink_get_channel_status(chan)->current_tx_seq;
mavlink_get_channel_status(chan)->current_tx_seq = mavlink_get_channel_status(chan)->current_tx_seq+1;
checksum = crc_calculate((uint8_t*)&msg->len, length + MAVLINK_CORE_HEADER_LEN);
#if MAVLINK_CRC_EXTRA
crc_accumulate(crc_extra, &checksum);
#endif
mavlink_ck_a(msg) = (uint8_t)(checksum & 0xFF);
mavlink_ck_b(msg) = (uint8_t)(checksum >> 8);
 
return length + MAVLINK_NUM_NON_PAYLOAD_BYTES;
}
 
 
/**
* @brief Finalize a MAVLink message with MAVLINK_COMM_0 as default channel
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length, uint8_t crc_extra)
{
return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, length, crc_extra);
}
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length)
{
return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, length);
}
#endif
 
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len);
 
/**
* @brief Finalize a MAVLink message with channel assignment and send
*/
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet,
uint8_t length, uint8_t crc_extra)
#else
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length)
#endif
{
uint16_t checksum;
uint8_t buf[MAVLINK_NUM_HEADER_BYTES];
uint8_t ck[2];
mavlink_status_t *status = mavlink_get_channel_status(chan);
buf[0] = MAVLINK_STX;
buf[1] = length;
buf[2] = status->current_tx_seq;
buf[3] = mavlink_system.sysid;
buf[4] = mavlink_system.compid;
buf[5] = msgid;
status->current_tx_seq++;
checksum = crc_calculate((uint8_t*)&buf[1], MAVLINK_CORE_HEADER_LEN);
crc_accumulate_buffer(&checksum, packet, length);
#if MAVLINK_CRC_EXTRA
crc_accumulate(crc_extra, &checksum);
#endif
ck[0] = (uint8_t)(checksum & 0xFF);
ck[1] = (uint8_t)(checksum >> 8);
 
MAVLINK_START_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length);
_mavlink_send_uart(chan, (const char *)buf, MAVLINK_NUM_HEADER_BYTES);
_mavlink_send_uart(chan, packet, length);
_mavlink_send_uart(chan, (const char *)ck, 2);
MAVLINK_END_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length);
}
#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
/**
* @brief Pack a message to send it over a serial byte stream
*/
MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg)
{
memcpy(buffer, (const uint8_t *)&msg->magic, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len);
return MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len;
}
 
union __mavlink_bitfield {
uint8_t uint8;
int8_t int8;
uint16_t uint16;
int16_t int16;
uint32_t uint32;
int32_t int32;
};
 
 
MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg)
{
crc_init(&msg->checksum);
}
 
MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c)
{
crc_accumulate(c, &msg->checksum);
}
 
/**
* This is a convenience function which handles the complete MAVLink parsing.
* the function will parse one byte at a time and return the complete packet once
* it could be successfully decoded. Checksum and other failures will be silently
* ignored.
*
* @param chan ID of the current channel. This allows to parse different channels with this function.
* a channel is not a physical message channel like a serial port, but a logic partition of
* the communication streams in this case. COMM_NB is the limit for the number of channels
* on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows
* @param c The char to barse
*
* @param returnMsg NULL if no message could be decoded, the message data else
* @return 0 if no message could be decoded, 1 else
*
* A typical use scenario of this function call is:
*
* @code
* #include <inttypes.h> // For fixed-width uint8_t type
*
* mavlink_message_t msg;
* int chan = 0;
*
*
* while(serial.bytesAvailable > 0)
* {
* uint8_t byte = serial.getNextByte();
* if (mavlink_parse_char(chan, byte, &msg))
* {
* printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid);
* }
* }
*
*
* @endcode
*/
MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status)
{
/*
default message crc function. You can override this per-system to
put this data in a different memory segment
*/
#if MAVLINK_CRC_EXTRA
#ifndef MAVLINK_MESSAGE_CRC
static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS;
#define MAVLINK_MESSAGE_CRC(msgid) mavlink_message_crcs[msgid]
#endif
#endif
 
mavlink_message_t* rxmsg = mavlink_get_channel_buffer(chan); ///< The currently decoded message
mavlink_status_t* status = mavlink_get_channel_status(chan); ///< The current decode status
int bufferIndex = 0;
 
status->msg_received = 0;
 
switch (status->parse_state)
{
case MAVLINK_PARSE_STATE_UNINIT:
case MAVLINK_PARSE_STATE_IDLE:
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
rxmsg->magic = c;
mavlink_start_checksum(rxmsg);
}
break;
 
case MAVLINK_PARSE_STATE_GOT_STX:
if (status->msg_received
/* Support shorter buffers than the
default maximum packet size */
#if (MAVLINK_MAX_PAYLOAD_LEN < 255)
|| c > MAVLINK_MAX_PAYLOAD_LEN
#endif
)
{
status->buffer_overrun++;
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
}
else
{
// NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2
rxmsg->len = c;
status->packet_idx = 0;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_LENGTH:
rxmsg->seq = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ;
break;
 
case MAVLINK_PARSE_STATE_GOT_SEQ:
rxmsg->sysid = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID;
break;
 
case MAVLINK_PARSE_STATE_GOT_SYSID:
rxmsg->compid = c;
mavlink_update_checksum(rxmsg, c);
status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID;
break;
 
case MAVLINK_PARSE_STATE_GOT_COMPID:
rxmsg->msgid = c;
mavlink_update_checksum(rxmsg, c);
if (rxmsg->len == 0)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD;
}
else
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_MSGID:
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c;
mavlink_update_checksum(rxmsg, c);
if (status->packet_idx == rxmsg->len)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_PAYLOAD:
#if MAVLINK_CRC_EXTRA
mavlink_update_checksum(rxmsg, MAVLINK_MESSAGE_CRC(rxmsg->msgid));
#endif
if (c != (rxmsg->checksum & 0xFF)) {
// Check first checksum byte
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
mavlink_start_checksum(rxmsg);
}
}
else
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1;
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx] = (char)c;
}
break;
 
case MAVLINK_PARSE_STATE_GOT_CRC1:
if (c != (rxmsg->checksum >> 8)) {
// Check second checksum byte
status->parse_error++;
status->msg_received = 0;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
if (c == MAVLINK_STX)
{
status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
rxmsg->len = 0;
mavlink_start_checksum(rxmsg);
}
}
else
{
// Successfully got message
status->msg_received = 1;
status->parse_state = MAVLINK_PARSE_STATE_IDLE;
_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx+1] = (char)c;
memcpy(r_message, rxmsg, sizeof(mavlink_message_t));
}
break;
}
 
bufferIndex++;
// If a message has been sucessfully decoded, check index
if (status->msg_received == 1)
{
//while(status->current_seq != rxmsg->seq)
//{
// status->packet_rx_drop_count++;
// status->current_seq++;
//}
status->current_rx_seq = rxmsg->seq;
// Initial condition: If no packet has been received so far, drop count is undefined
if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0;
// Count this packet as received
status->packet_rx_success_count++;
}
 
r_mavlink_status->current_rx_seq = status->current_rx_seq+1;
r_mavlink_status->packet_rx_success_count = status->packet_rx_success_count;
r_mavlink_status->packet_rx_drop_count = status->parse_error;
status->parse_error = 0;
return status->msg_received;
}
 
/**
* @brief Put a bitfield of length 1-32 bit into the buffer
*
* @param b the value to add, will be encoded in the bitfield
* @param bits number of bits to use to encode b, e.g. 1 for boolean, 2, 3, etc.
* @param packet_index the position in the packet (the index of the first byte to use)
* @param bit_index the position in the byte (the index of the first bit to use)
* @param buffer packet buffer to write into
* @return new position of the last used byte in the buffer
*/
MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, uint8_t* r_bit_index, uint8_t* buffer)
{
uint16_t bits_remain = bits;
// Transform number into network order
int32_t v;
uint8_t i_bit_index, i_byte_index, curr_bits_n;
#if MAVLINK_NEED_BYTE_SWAP
union {
int32_t i;
uint8_t b[4];
} bin, bout;
bin.i = b;
bout.b[0] = bin.b[3];
bout.b[1] = bin.b[2];
bout.b[2] = bin.b[1];
bout.b[3] = bin.b[0];
v = bout.i;
#else
v = b;
#endif
 
// buffer in
// 01100000 01000000 00000000 11110001
// buffer out
// 11110001 00000000 01000000 01100000
 
// Existing partly filled byte (four free slots)
// 0111xxxx
 
// Mask n free bits
// 00001111 = 2^0 + 2^1 + 2^2 + 2^3 = 2^n - 1
// = ((uint32_t)(1 << n)) - 1; // = 2^n - 1
 
// Shift n bits into the right position
// out = in >> n;
 
// Mask and shift bytes
i_bit_index = bit_index;
i_byte_index = packet_index;
if (bit_index > 0)
{
// If bits were available at start, they were available
// in the byte before the current index
i_byte_index--;
}
 
// While bits have not been packed yet
while (bits_remain > 0)
{
// Bits still have to be packed
// there can be more than 8 bits, so
// we might have to pack them into more than one byte
 
// First pack everything we can into the current 'open' byte
//curr_bits_n = bits_remain << 3; // Equals bits_remain mod 8
//FIXME
if (bits_remain <= (uint8_t)(8 - i_bit_index))
{
// Enough space
curr_bits_n = (uint8_t)bits_remain;
}
else
{
curr_bits_n = (8 - i_bit_index);
}
// Pack these n bits into the current byte
// Mask out whatever was at that position with ones (xxx11111)
buffer[i_byte_index] &= (0xFF >> (8 - curr_bits_n));
// Put content to this position, by masking out the non-used part
buffer[i_byte_index] |= ((0x00 << curr_bits_n) & v);
// Increment the bit index
i_bit_index += curr_bits_n;
 
// Now proceed to the next byte, if necessary
bits_remain -= curr_bits_n;
if (bits_remain > 0)
{
// Offer another 8 bits / one byte
i_byte_index++;
i_bit_index = 0;
}
}
*r_bit_index = i_bit_index;
// If a partly filled byte is present, mark this as consumed
if (i_bit_index != 7) i_byte_index++;
return i_byte_index - packet_index;
}
 
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
// To make MAVLink work on your MCU, define comm_send_ch() if you wish
// to send 1 byte at a time, or MAVLINK_SEND_UART_BYTES() to send a
// whole packet at a time
 
/*
 
#include "mavlink_types.h"
 
void comm_send_ch(mavlink_channel_t chan, uint8_t ch)
{
if (chan == MAVLINK_COMM_0)
{
uart0_transmit(ch);
}
if (chan == MAVLINK_COMM_1)
{
uart1_transmit(ch);
}
}
*/
 
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len)
{
#ifdef MAVLINK_SEND_UART_BYTES
/* this is the more efficient approach, if the platform
defines it */
MAVLINK_SEND_UART_BYTES(chan, (uint8_t *)buf, len);
#else
/* fallback to one byte at a time */
uint16_t i;
for (i = 0; i < len; i++) {
comm_send_ch(chan, (uint8_t)buf[i]);
}
#endif
}
#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
#endif /* _MAVLINK_HELPERS_H_ */
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/mavlink_protobuf_manager.hpp
0,0 → 1,377
#ifndef MAVLINKPROTOBUFMANAGER_HPP
#define MAVLINKPROTOBUFMANAGER_HPP
 
#include <deque>
#include <google/protobuf/message.h>
#include <iostream>
#include <tr1/memory>
 
#include <checksum.h>
#include <common/mavlink.h>
#include <mavlink_types.h>
#include <pixhawk/pixhawk.pb.h>
 
namespace mavlink
{
 
class ProtobufManager
{
public:
ProtobufManager()
: mRegisteredTypeCount(0)
, mStreamID(0)
, mVerbose(false)
, kExtendedHeaderSize(MAVLINK_EXTENDED_HEADER_LEN)
, kExtendedPayloadMaxSize(MAVLINK_MAX_EXTENDED_PAYLOAD_LEN)
{
// register GLOverlay
{
std::tr1::shared_ptr<px::GLOverlay> msg(new px::GLOverlay);
registerType(msg);
}
 
// register ObstacleList
{
std::tr1::shared_ptr<px::ObstacleList> msg(new px::ObstacleList);
registerType(msg);
}
 
// register ObstacleMap
{
std::tr1::shared_ptr<px::ObstacleMap> msg(new px::ObstacleMap);
registerType(msg);
}
 
// register Path
{
std::tr1::shared_ptr<px::Path> msg(new px::Path);
registerType(msg);
}
 
// register PointCloudXYZI
{
std::tr1::shared_ptr<px::PointCloudXYZI> msg(new px::PointCloudXYZI);
registerType(msg);
}
 
// register PointCloudXYZRGB
{
std::tr1::shared_ptr<px::PointCloudXYZRGB> msg(new px::PointCloudXYZRGB);
registerType(msg);
}
 
// register RGBDImage
{
std::tr1::shared_ptr<px::RGBDImage> msg(new px::RGBDImage);
registerType(msg);
}
 
srand(time(NULL));
mStreamID = rand() + 1;
}
 
bool fragmentMessage(uint8_t system_id, uint8_t component_id,
uint8_t target_system, uint8_t target_component,
const google::protobuf::Message& protobuf_msg,
std::vector<mavlink_extended_message_t>& fragments) const
{
TypeMap::const_iterator it = mTypeMap.find(protobuf_msg.GetTypeName());
if (it == mTypeMap.end())
{
std::cout << "# WARNING: Protobuf message with type "
<< protobuf_msg.GetTypeName() << " is not registered."
<< std::endl;
return false;
}
 
uint8_t typecode = it->second;
 
std::string data = protobuf_msg.SerializeAsString();
 
int fragmentCount = (protobuf_msg.ByteSize() + kExtendedPayloadMaxSize - 1) / kExtendedPayloadMaxSize;
unsigned int offset = 0;
 
for (int i = 0; i < fragmentCount; ++i)
{
mavlink_extended_message_t fragment;
 
// write extended header data
uint8_t* payload = reinterpret_cast<uint8_t*>(fragment.base_msg.payload64);
unsigned int length = 0;
uint8_t flags = 0;
 
if (i < fragmentCount - 1)
{
length = kExtendedPayloadMaxSize;
flags |= 0x1;
}
else
{
length = protobuf_msg.ByteSize() - kExtendedPayloadMaxSize * (fragmentCount - 1);
}
 
memcpy(payload, &target_system, 1);
memcpy(payload + 1, &target_component, 1);
memcpy(payload + 2, &typecode, 1);
memcpy(payload + 3, &length, 4);
memcpy(payload + 7, &mStreamID, 2);
memcpy(payload + 9, &offset, 4);
memcpy(payload + 13, &flags, 1);
 
fragment.base_msg.msgid = MAVLINK_MSG_ID_EXTENDED_MESSAGE;
mavlink_finalize_message(&fragment.base_msg, system_id, component_id, kExtendedHeaderSize, 0);
// write extended payload data
fragment.extended_payload_len = length;
memcpy(fragment.extended_payload, &data[offset], length);
 
fragments.push_back(fragment);
offset += length;
}
 
if (mVerbose)
{
std::cerr << "# INFO: Split extended message with size "
<< protobuf_msg.ByteSize() << " into "
<< fragmentCount << " fragments." << std::endl;
}
 
return true;
}
 
bool cacheFragment(mavlink_extended_message_t& msg)
{
if (!validFragment(msg))
{
if (mVerbose)
{
std::cerr << "# WARNING: Message is not a valid fragment. "
<< "Dropping message..." << std::endl;
}
return false;
}
 
// read extended header
uint8_t* payload = reinterpret_cast<uint8_t*>(msg.base_msg.payload64);
uint8_t typecode = 0;
unsigned int length = 0;
unsigned short streamID = 0;
unsigned int offset = 0;
uint8_t flags = 0;
 
memcpy(&typecode, payload + 2, 1);
memcpy(&length, payload + 3, 4);
memcpy(&streamID, payload + 7, 2);
memcpy(&offset, payload + 9, 4);
memcpy(&flags, payload + 13, 1);
 
if (typecode >= mTypeMap.size())
{
std::cout << "# WARNING: Protobuf message with type code "
<< static_cast<int>(typecode) << " is not registered." << std::endl;
return false;
}
 
bool reassemble = false;
 
FragmentQueue::iterator it = mFragmentQueue.find(streamID);
if (it == mFragmentQueue.end())
{
if (offset == 0)
{
mFragmentQueue[streamID].push_back(msg);
 
if ((flags & 0x1) != 0x1)
{
reassemble = true;
}
 
if (mVerbose)
{
std::cerr << "# INFO: Added fragment to new queue."
<< std::endl;
}
}
else
{
if (mVerbose)
{
std::cerr << "# WARNING: Message is not a valid fragment. "
<< "Dropping message..." << std::endl;
}
}
}
else
{
std::deque<mavlink_extended_message_t>& queue = it->second;
 
if (queue.empty())
{
if (offset == 0)
{
queue.push_back(msg);
 
if ((flags & 0x1) != 0x1)
{
reassemble = true;
}
}
else
{
if (mVerbose)
{
std::cerr << "# WARNING: Message is not a valid fragment. "
<< "Dropping message..." << std::endl;
}
}
}
else
{
if (fragmentDataSize(queue.back()) + fragmentOffset(queue.back()) != offset)
{
if (mVerbose)
{
std::cerr << "# WARNING: Previous fragment(s) have been lost. "
<< "Dropping message and clearing queue..." << std::endl;
}
queue.clear();
}
else
{
queue.push_back(msg);
 
if ((flags & 0x1) != 0x1)
{
reassemble = true;
}
}
}
}
 
if (reassemble)
{
std::deque<mavlink_extended_message_t>& queue = mFragmentQueue[streamID];
 
std::string data;
for (size_t i = 0; i < queue.size(); ++i)
{
mavlink_extended_message_t& mavlink_msg = queue.at(i);
 
data.append(reinterpret_cast<char*>(&mavlink_msg.extended_payload[0]),
static_cast<size_t>(mavlink_msg.extended_payload_len));
}
 
mMessages.at(typecode)->ParseFromString(data);
 
mMessageAvailable.at(typecode) = true;
 
queue.clear();
 
if (mVerbose)
{
std::cerr << "# INFO: Reassembled fragments for message with typename "
<< mMessages.at(typecode)->GetTypeName() << " and size "
<< mMessages.at(typecode)->ByteSize()
<< "." << std::endl;
}
}
 
return true;
}
 
bool getMessage(std::tr1::shared_ptr<google::protobuf::Message>& msg)
{
for (size_t i = 0; i < mMessageAvailable.size(); ++i)
{
if (mMessageAvailable.at(i))
{
msg = mMessages.at(i);
mMessageAvailable.at(i) = false;
 
return true;
}
}
 
return false;
}
 
private:
void registerType(const std::tr1::shared_ptr<google::protobuf::Message>& msg)
{
mTypeMap[msg->GetTypeName()] = mRegisteredTypeCount;
++mRegisteredTypeCount;
mMessages.push_back(msg);
mMessageAvailable.push_back(false);
}
 
bool validFragment(const mavlink_extended_message_t& msg) const
{
if (msg.base_msg.magic != MAVLINK_STX ||
msg.base_msg.len != kExtendedHeaderSize ||
msg.base_msg.msgid != MAVLINK_MSG_ID_EXTENDED_MESSAGE)
{
return false;
}
 
uint16_t checksum;
checksum = crc_calculate(reinterpret_cast<const uint8_t*>(&msg.base_msg.len), MAVLINK_CORE_HEADER_LEN);
crc_accumulate_buffer(&checksum, reinterpret_cast<const char*>(&msg.base_msg.payload64), kExtendedHeaderSize);
#if MAVLINK_CRC_EXTRA
static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS;
crc_accumulate(mavlink_message_crcs[msg.base_msg.msgid], &checksum);
#endif
 
if (mavlink_ck_a(&(msg.base_msg)) != (uint8_t)(checksum & 0xFF) &&
mavlink_ck_b(&(msg.base_msg)) != (uint8_t)(checksum >> 8))
{
return false;
}
 
return true;
}
 
unsigned int fragmentDataSize(const mavlink_extended_message_t& msg) const
{
const uint8_t* payload = reinterpret_cast<const uint8_t*>(msg.base_msg.payload64);
 
return *(reinterpret_cast<const unsigned int*>(payload + 3));
}
 
unsigned int fragmentOffset(const mavlink_extended_message_t& msg) const
{
const uint8_t* payload = reinterpret_cast<const uint8_t*>(msg.base_msg.payload64);
 
return *(reinterpret_cast<const unsigned int*>(payload + 9));
}
 
int mRegisteredTypeCount;
unsigned short mStreamID;
bool mVerbose;
 
typedef std::map<std::string, uint8_t> TypeMap;
TypeMap mTypeMap;
std::vector< std::tr1::shared_ptr<google::protobuf::Message> > mMessages;
std::vector<bool> mMessageAvailable;
 
typedef std::map<unsigned short, std::deque<mavlink_extended_message_t> > FragmentQueue;
FragmentQueue mFragmentQueue;
 
const int kExtendedHeaderSize;
/**
* Extended header structure
* =========================
* byte 0 - target_system
* byte 1 - target_component
* byte 2 - extended message id (type code)
* bytes 3-6 - extended payload size in bytes
* byte 7-8 - stream ID
* byte 9-12 - fragment offset
* byte 13 - fragment flags (bit 0 - 1=more fragments, 0=last fragment)
*/
 
const int kExtendedPayloadMaxSize;
};
 
}
 
#endif
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/mavlink_types.h
0,0 → 1,158
#ifndef MAVLINK_TYPES_H_
#define MAVLINK_TYPES_H_
 
#include <inttypes.h>
 
#ifndef MAVLINK_MAX_PAYLOAD_LEN
// it is possible to override this, but be careful!
#define MAVLINK_MAX_PAYLOAD_LEN 255 ///< Maximum payload length
#endif
 
#define MAVLINK_CORE_HEADER_LEN 5 ///< Length of core header (of the comm. layer): message length (1 byte) + message sequence (1 byte) + message system id (1 byte) + message component id (1 byte) + message type id (1 byte)
#define MAVLINK_NUM_HEADER_BYTES (MAVLINK_CORE_HEADER_LEN + 1) ///< Length of all header bytes, including core and checksum
#define MAVLINK_NUM_CHECKSUM_BYTES 2
#define MAVLINK_NUM_NON_PAYLOAD_BYTES (MAVLINK_NUM_HEADER_BYTES + MAVLINK_NUM_CHECKSUM_BYTES)
 
#define MAVLINK_MAX_PACKET_LEN (MAVLINK_MAX_PAYLOAD_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES) ///< Maximum packet length
 
#define MAVLINK_MSG_ID_EXTENDED_MESSAGE 255
#define MAVLINK_EXTENDED_HEADER_LEN 14
 
#if (defined _MSC_VER) | ((defined __APPLE__) & (defined __MACH__)) | (defined __linux__)
/* full fledged 32bit++ OS */
#define MAVLINK_MAX_EXTENDED_PACKET_LEN 65507
#else
/* small microcontrollers */
#define MAVLINK_MAX_EXTENDED_PACKET_LEN 2048
#endif
 
#define MAVLINK_MAX_EXTENDED_PAYLOAD_LEN (MAVLINK_MAX_EXTENDED_PACKET_LEN - MAVLINK_EXTENDED_HEADER_LEN - MAVLINK_NUM_NON_PAYLOAD_BYTES)
 
typedef struct param_union {
union {
float param_float;
int32_t param_int32;
uint32_t param_uint32;
uint8_t param_uint8;
uint8_t bytes[4];
};
uint8_t type;
} mavlink_param_union_t;
 
typedef struct __mavlink_system {
uint8_t sysid; ///< Used by the MAVLink message_xx_send() convenience function
uint8_t compid; ///< Used by the MAVLink message_xx_send() convenience function
uint8_t type; ///< Unused, can be used by user to store the system's type
uint8_t state; ///< Unused, can be used by user to store the system's state
uint8_t mode; ///< Unused, can be used by user to store the system's mode
uint8_t nav_mode; ///< Unused, can be used by user to store the system's navigation mode
} mavlink_system_t;
 
typedef struct __mavlink_message {
uint16_t checksum; /// sent at end of packet
uint8_t magic; ///< protocol magic marker
uint8_t len; ///< Length of payload
uint8_t seq; ///< Sequence of packet
uint8_t sysid; ///< ID of message sender system/aircraft
uint8_t compid; ///< ID of the message sender component
uint8_t msgid; ///< ID of message in payload
uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8];
} mavlink_message_t;
 
 
typedef struct __mavlink_extended_message {
mavlink_message_t base_msg;
int32_t extended_payload_len; ///< Length of extended payload if any
uint8_t extended_payload[MAVLINK_MAX_EXTENDED_PAYLOAD_LEN];
} mavlink_extended_message_t;
 
 
typedef enum {
MAVLINK_TYPE_CHAR = 0,
MAVLINK_TYPE_UINT8_T = 1,
MAVLINK_TYPE_INT8_T = 2,
MAVLINK_TYPE_UINT16_T = 3,
MAVLINK_TYPE_INT16_T = 4,
MAVLINK_TYPE_UINT32_T = 5,
MAVLINK_TYPE_INT32_T = 6,
MAVLINK_TYPE_UINT64_T = 7,
MAVLINK_TYPE_INT64_T = 8,
MAVLINK_TYPE_FLOAT = 9,
MAVLINK_TYPE_DOUBLE = 10
} mavlink_message_type_t;
 
#define MAVLINK_MAX_FIELDS 64
 
typedef struct __mavlink_field_info {
const char *name; // name of this field
const char *print_format; // printing format hint, or NULL
mavlink_message_type_t type; // type of this field
unsigned int array_length; // if non-zero, field is an array
unsigned int wire_offset; // offset of each field in the payload
unsigned int structure_offset; // offset in a C structure
} mavlink_field_info_t;
 
// note that in this structure the order of fields is the order
// in the XML file, not necessary the wire order
typedef struct __mavlink_message_info {
const char *name; // name of the message
unsigned num_fields; // how many fields in this message
mavlink_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information
} mavlink_message_info_t;
 
#define _MAV_PAYLOAD(msg) ((const char *)(&((msg)->payload64[0])))
#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)(&((msg)->payload64[0])))
 
// checksum is immediately after the payload bytes
#define mavlink_ck_a(msg) *((msg)->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
#define mavlink_ck_b(msg) *(((msg)->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
 
typedef enum {
MAVLINK_COMM_0,
MAVLINK_COMM_1,
MAVLINK_COMM_2,
MAVLINK_COMM_3
} mavlink_channel_t;
 
/*
* applications can set MAVLINK_COMM_NUM_BUFFERS to the maximum number
* of buffers they will use. If more are used, then the result will be
* a stack overrun
*/
#ifndef MAVLINK_COMM_NUM_BUFFERS
#if (defined linux) | (defined __linux) | (defined __MACH__) | (defined _WIN32)
# define MAVLINK_COMM_NUM_BUFFERS 16
#else
# define MAVLINK_COMM_NUM_BUFFERS 4
#endif
#endif
 
typedef enum {
MAVLINK_PARSE_STATE_UNINIT=0,
MAVLINK_PARSE_STATE_IDLE,
MAVLINK_PARSE_STATE_GOT_STX,
MAVLINK_PARSE_STATE_GOT_SEQ,
MAVLINK_PARSE_STATE_GOT_LENGTH,
MAVLINK_PARSE_STATE_GOT_SYSID,
MAVLINK_PARSE_STATE_GOT_COMPID,
MAVLINK_PARSE_STATE_GOT_MSGID,
MAVLINK_PARSE_STATE_GOT_PAYLOAD,
MAVLINK_PARSE_STATE_GOT_CRC1
} mavlink_parse_state_t; ///< The state machine for the comm parser
 
typedef struct __mavlink_status {
uint8_t msg_received; ///< Number of received messages
uint8_t buffer_overrun; ///< Number of buffer overruns
uint8_t parse_error; ///< Number of parse errors
mavlink_parse_state_t parse_state; ///< Parsing state machine
uint8_t packet_idx; ///< Index in current packet
uint8_t current_rx_seq; ///< Sequence number of last packet received
uint8_t current_tx_seq; ///< Sequence number of last packet sent
uint16_t packet_rx_success_count; ///< Received packets
uint16_t packet_rx_drop_count; ///< Number of packet drops
} mavlink_status_t;
 
#define MAVLINK_BIG_ENDIAN 0
#define MAVLINK_LITTLE_ENDIAN 1
 
#endif /* MAVLINK_TYPES_H_ */
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/protocol.h
0,0 → 1,322
#ifndef _MAVLINK_PROTOCOL_H_
#define _MAVLINK_PROTOCOL_H_
 
#include "string.h"
#include "mavlink_types.h"
 
/*
If you want MAVLink on a system that is native big-endian,
you need to define NATIVE_BIG_ENDIAN
*/
#ifdef NATIVE_BIG_ENDIAN
# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN)
#else
# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN != MAVLINK_LITTLE_ENDIAN)
#endif
 
#ifndef MAVLINK_STACK_BUFFER
#define MAVLINK_STACK_BUFFER 0
#endif
 
#ifndef MAVLINK_AVOID_GCC_STACK_BUG
# define MAVLINK_AVOID_GCC_STACK_BUG defined(__GNUC__)
#endif
 
#ifndef MAVLINK_ASSERT
#define MAVLINK_ASSERT(x)
#endif
 
#ifndef MAVLINK_START_UART_SEND
#define MAVLINK_START_UART_SEND(chan, length)
#endif
 
#ifndef MAVLINK_END_UART_SEND
#define MAVLINK_END_UART_SEND(chan, length)
#endif
 
#ifdef MAVLINK_SEPARATE_HELPERS
#define MAVLINK_HELPER
#else
#define MAVLINK_HELPER static inline
#include "mavlink_helpers.h"
#endif // MAVLINK_SEPARATE_HELPERS
 
/* always include the prototypes to ensure we don't get out of sync */
MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan);
#if MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length, uint8_t crc_extra);
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length, uint8_t crc_extra);
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet,
uint8_t length, uint8_t crc_extra);
#endif
#else
MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t chan, uint8_t length);
MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id,
uint8_t length);
MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length);
#endif // MAVLINK_CRC_EXTRA
MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg);
MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg);
MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c);
MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status);
MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index,
uint8_t* r_bit_index, uint8_t* buffer);
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len);
#endif
 
/**
* @brief Get the required buffer size for this message
*/
static inline uint16_t mavlink_msg_get_send_buffer_length(const mavlink_message_t* msg)
{
return msg->len + MAVLINK_NUM_NON_PAYLOAD_BYTES;
}
 
#if MAVLINK_NEED_BYTE_SWAP
static inline void byte_swap_2(char *dst, const char *src)
{
dst[0] = src[1];
dst[1] = src[0];
}
static inline void byte_swap_4(char *dst, const char *src)
{
dst[0] = src[3];
dst[1] = src[2];
dst[2] = src[1];
dst[3] = src[0];
}
static inline void byte_swap_8(char *dst, const char *src)
{
dst[0] = src[7];
dst[1] = src[6];
dst[2] = src[5];
dst[3] = src[4];
dst[4] = src[3];
dst[5] = src[2];
dst[6] = src[1];
dst[7] = src[0];
}
#elif !MAVLINK_ALIGNED_FIELDS
static inline void byte_copy_2(char *dst, const char *src)
{
dst[0] = src[0];
dst[1] = src[1];
}
static inline void byte_copy_4(char *dst, const char *src)
{
dst[0] = src[0];
dst[1] = src[1];
dst[2] = src[2];
dst[3] = src[3];
}
static inline void byte_copy_8(char *dst, const char *src)
{
memcpy(dst, src, 8);
}
#endif
 
#define _mav_put_uint8_t(buf, wire_offset, b) buf[wire_offset] = (uint8_t)b
#define _mav_put_int8_t(buf, wire_offset, b) buf[wire_offset] = (int8_t)b
#define _mav_put_char(buf, wire_offset, b) buf[wire_offset] = b
 
#if MAVLINK_NEED_BYTE_SWAP
#define _mav_put_uint16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_int16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_int32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_int64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_float(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_double(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b)
#elif !MAVLINK_ALIGNED_FIELDS
#define _mav_put_uint16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_int16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_int32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_uint64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_int64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#define _mav_put_float(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b)
#define _mav_put_double(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b)
#else
#define _mav_put_uint16_t(buf, wire_offset, b) *(uint16_t *)&buf[wire_offset] = b
#define _mav_put_int16_t(buf, wire_offset, b) *(int16_t *)&buf[wire_offset] = b
#define _mav_put_uint32_t(buf, wire_offset, b) *(uint32_t *)&buf[wire_offset] = b
#define _mav_put_int32_t(buf, wire_offset, b) *(int32_t *)&buf[wire_offset] = b
#define _mav_put_uint64_t(buf, wire_offset, b) *(uint64_t *)&buf[wire_offset] = b
#define _mav_put_int64_t(buf, wire_offset, b) *(int64_t *)&buf[wire_offset] = b
#define _mav_put_float(buf, wire_offset, b) *(float *)&buf[wire_offset] = b
#define _mav_put_double(buf, wire_offset, b) *(double *)&buf[wire_offset] = b
#endif
 
/*
like memcpy(), but if src is NULL, do a memset to zero
*/
static void mav_array_memcpy(void *dest, const void *src, size_t n)
{
if (src == NULL) {
memset(dest, 0, n);
} else {
memcpy(dest, src, n);
}
}
 
/*
* Place a char array into a buffer
*/
static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
/*
* Place a uint8_t array into a buffer
*/
static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
/*
* Place a int8_t array into a buffer
*/
static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length)
{
mav_array_memcpy(&buf[wire_offset], b, array_length);
 
}
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_PUT_ARRAY(TYPE, V) \
static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \
{ \
if (b == NULL) { \
memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \
} else { \
uint16_t i; \
for (i=0; i<array_length; i++) { \
_mav_put_## TYPE (buf, wire_offset+(i*sizeof(TYPE)), b[i]); \
} \
} \
}
#else
#define _MAV_PUT_ARRAY(TYPE, V) \
static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \
{ \
mav_array_memcpy(&buf[wire_offset], b, array_length*sizeof(TYPE)); \
}
#endif
 
_MAV_PUT_ARRAY(uint16_t, u16)
_MAV_PUT_ARRAY(uint32_t, u32)
_MAV_PUT_ARRAY(uint64_t, u64)
_MAV_PUT_ARRAY(int16_t, i16)
_MAV_PUT_ARRAY(int32_t, i32)
_MAV_PUT_ARRAY(int64_t, i64)
_MAV_PUT_ARRAY(float, f)
_MAV_PUT_ARRAY(double, d)
 
#define _MAV_RETURN_char(msg, wire_offset) (const char)_MAV_PAYLOAD(msg)[wire_offset]
#define _MAV_RETURN_int8_t(msg, wire_offset) (const int8_t)_MAV_PAYLOAD(msg)[wire_offset]
#define _MAV_RETURN_uint8_t(msg, wire_offset) (const uint8_t)_MAV_PAYLOAD(msg)[wire_offset]
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_MSG_RETURN_TYPE(TYPE, SIZE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ TYPE r; byte_swap_## SIZE((char*)&r, &_MAV_PAYLOAD(msg)[ofs]); return r; }
 
_MAV_MSG_RETURN_TYPE(uint16_t, 2)
_MAV_MSG_RETURN_TYPE(int16_t, 2)
_MAV_MSG_RETURN_TYPE(uint32_t, 4)
_MAV_MSG_RETURN_TYPE(int32_t, 4)
_MAV_MSG_RETURN_TYPE(uint64_t, 8)
_MAV_MSG_RETURN_TYPE(int64_t, 8)
_MAV_MSG_RETURN_TYPE(float, 4)
_MAV_MSG_RETURN_TYPE(double, 8)
 
#elif !MAVLINK_ALIGNED_FIELDS
#define _MAV_MSG_RETURN_TYPE(TYPE, SIZE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ TYPE r; byte_copy_## SIZE((char*)&r, &_MAV_PAYLOAD(msg)[ofs]); return r; }
 
_MAV_MSG_RETURN_TYPE(uint16_t, 2)
_MAV_MSG_RETURN_TYPE(int16_t, 2)
_MAV_MSG_RETURN_TYPE(uint32_t, 4)
_MAV_MSG_RETURN_TYPE(int32_t, 4)
_MAV_MSG_RETURN_TYPE(uint64_t, 8)
_MAV_MSG_RETURN_TYPE(int64_t, 8)
_MAV_MSG_RETURN_TYPE(float, 4)
_MAV_MSG_RETURN_TYPE(double, 8)
#else // nicely aligned, no swap
#define _MAV_MSG_RETURN_TYPE(TYPE) \
static inline TYPE _MAV_RETURN_## TYPE(const mavlink_message_t *msg, uint8_t ofs) \
{ return *(const TYPE *)(&_MAV_PAYLOAD(msg)[ofs]);}
 
_MAV_MSG_RETURN_TYPE(uint16_t)
_MAV_MSG_RETURN_TYPE(int16_t)
_MAV_MSG_RETURN_TYPE(uint32_t)
_MAV_MSG_RETURN_TYPE(int32_t)
_MAV_MSG_RETURN_TYPE(uint64_t)
_MAV_MSG_RETURN_TYPE(int64_t)
_MAV_MSG_RETURN_TYPE(float)
_MAV_MSG_RETURN_TYPE(double)
#endif // MAVLINK_NEED_BYTE_SWAP
 
static inline uint16_t _MAV_RETURN_char_array(const mavlink_message_t *msg, char *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
static inline uint16_t _MAV_RETURN_uint8_t_array(const mavlink_message_t *msg, uint8_t *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
static inline uint16_t _MAV_RETURN_int8_t_array(const mavlink_message_t *msg, int8_t *value,
uint8_t array_length, uint8_t wire_offset)
{
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length);
return array_length;
}
 
#if MAVLINK_NEED_BYTE_SWAP
#define _MAV_RETURN_ARRAY(TYPE, V) \
static inline uint16_t _MAV_RETURN_## TYPE ##_array(const mavlink_message_t *msg, TYPE *value, \
uint8_t array_length, uint8_t wire_offset) \
{ \
uint16_t i; \
for (i=0; i<array_length; i++) { \
value[i] = _MAV_RETURN_## TYPE (msg, wire_offset+(i*sizeof(value[0]))); \
} \
return array_length*sizeof(value[0]); \
}
#else
#define _MAV_RETURN_ARRAY(TYPE, V) \
static inline uint16_t _MAV_RETURN_## TYPE ##_array(const mavlink_message_t *msg, TYPE *value, \
uint8_t array_length, uint8_t wire_offset) \
{ \
memcpy(value, &_MAV_PAYLOAD(msg)[wire_offset], array_length*sizeof(TYPE)); \
return array_length*sizeof(TYPE); \
}
#endif
 
_MAV_RETURN_ARRAY(uint16_t, u16)
_MAV_RETURN_ARRAY(uint32_t, u32)
_MAV_RETURN_ARRAY(uint64_t, u64)
_MAV_RETURN_ARRAY(int16_t, i16)
_MAV_RETURN_ARRAY(int32_t, i32)
_MAV_RETURN_ARRAY(int64_t, i64)
_MAV_RETURN_ARRAY(float, f)
_MAV_RETURN_ARRAY(double, d)
 
#endif // _MAVLINK_PROTOCOL_H_
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink.h
0,0 → 1,27
/** @file
* @brief MAVLink comm protocol built from sensesoar.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_H
#define MAVLINK_H
 
#ifndef MAVLINK_STX
#define MAVLINK_STX 254
#endif
 
#ifndef MAVLINK_ENDIAN
#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
#endif
 
#ifndef MAVLINK_ALIGNED_FIELDS
#define MAVLINK_ALIGNED_FIELDS 1
#endif
 
#ifndef MAVLINK_CRC_EXTRA
#define MAVLINK_CRC_EXTRA 1
#endif
 
#include "version.h"
#include "sensesoar.h"
 
#endif // MAVLINK_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_cmd_airspeed_ack.h
0,0 → 1,166
// MESSAGE CMD_AIRSPEED_ACK PACKING
 
#define MAVLINK_MSG_ID_CMD_AIRSPEED_ACK 194
 
typedef struct __mavlink_cmd_airspeed_ack_t
{
float spCmd; ///< commanded airspeed
uint8_t ack; ///< 0:ack, 1:nack
} mavlink_cmd_airspeed_ack_t;
 
#define MAVLINK_MSG_ID_CMD_AIRSPEED_ACK_LEN 5
#define MAVLINK_MSG_ID_194_LEN 5
 
 
 
#define MAVLINK_MESSAGE_INFO_CMD_AIRSPEED_ACK { \
"CMD_AIRSPEED_ACK", \
2, \
{ { "spCmd", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_cmd_airspeed_ack_t, spCmd) }, \
{ "ack", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_cmd_airspeed_ack_t, ack) }, \
} \
}
 
 
/**
* @brief Pack a cmd_airspeed_ack message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param spCmd commanded airspeed
* @param ack 0:ack, 1:nack
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_cmd_airspeed_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float spCmd, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_cmd_airspeed_ack_t packet;
packet.spCmd = spCmd;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CMD_AIRSPEED_ACK;
return mavlink_finalize_message(msg, system_id, component_id, 5, 243);
}
 
/**
* @brief Pack a cmd_airspeed_ack message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param spCmd commanded airspeed
* @param ack 0:ack, 1:nack
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_cmd_airspeed_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float spCmd,uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, ack);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_cmd_airspeed_ack_t packet;
packet.spCmd = spCmd;
packet.ack = ack;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CMD_AIRSPEED_ACK;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 5, 243);
}
 
/**
* @brief Encode a cmd_airspeed_ack struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param cmd_airspeed_ack C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_cmd_airspeed_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_cmd_airspeed_ack_t* cmd_airspeed_ack)
{
return mavlink_msg_cmd_airspeed_ack_pack(system_id, component_id, msg, cmd_airspeed_ack->spCmd, cmd_airspeed_ack->ack);
}
 
/**
* @brief Send a cmd_airspeed_ack message
* @param chan MAVLink channel to send the message
*
* @param spCmd commanded airspeed
* @param ack 0:ack, 1:nack
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_cmd_airspeed_ack_send(mavlink_channel_t chan, float spCmd, uint8_t ack)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, ack);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CMD_AIRSPEED_ACK, buf, 5, 243);
#else
mavlink_cmd_airspeed_ack_t packet;
packet.spCmd = spCmd;
packet.ack = ack;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CMD_AIRSPEED_ACK, (const char *)&packet, 5, 243);
#endif
}
 
#endif
 
// MESSAGE CMD_AIRSPEED_ACK UNPACKING
 
 
/**
* @brief Get field spCmd from cmd_airspeed_ack message
*
* @return commanded airspeed
*/
static inline float mavlink_msg_cmd_airspeed_ack_get_spCmd(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field ack from cmd_airspeed_ack message
*
* @return 0:ack, 1:nack
*/
static inline uint8_t mavlink_msg_cmd_airspeed_ack_get_ack(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Decode a cmd_airspeed_ack message into a struct
*
* @param msg The message to decode
* @param cmd_airspeed_ack C-struct to decode the message contents into
*/
static inline void mavlink_msg_cmd_airspeed_ack_decode(const mavlink_message_t* msg, mavlink_cmd_airspeed_ack_t* cmd_airspeed_ack)
{
#if MAVLINK_NEED_BYTE_SWAP
cmd_airspeed_ack->spCmd = mavlink_msg_cmd_airspeed_ack_get_spCmd(msg);
cmd_airspeed_ack->ack = mavlink_msg_cmd_airspeed_ack_get_ack(msg);
#else
memcpy(cmd_airspeed_ack, _MAV_PAYLOAD(msg), 5);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_cmd_airspeed_chng.h
0,0 → 1,166
// MESSAGE CMD_AIRSPEED_CHNG PACKING
 
#define MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG 192
 
typedef struct __mavlink_cmd_airspeed_chng_t
{
float spCmd; ///< commanded airspeed
uint8_t target; ///< Target ID
} mavlink_cmd_airspeed_chng_t;
 
#define MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG_LEN 5
#define MAVLINK_MSG_ID_192_LEN 5
 
 
 
#define MAVLINK_MESSAGE_INFO_CMD_AIRSPEED_CHNG { \
"CMD_AIRSPEED_CHNG", \
2, \
{ { "spCmd", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_cmd_airspeed_chng_t, spCmd) }, \
{ "target", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_cmd_airspeed_chng_t, target) }, \
} \
}
 
 
/**
* @brief Pack a cmd_airspeed_chng message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param target Target ID
* @param spCmd commanded airspeed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_cmd_airspeed_chng_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t target, float spCmd)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, target);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_cmd_airspeed_chng_t packet;
packet.spCmd = spCmd;
packet.target = target;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG;
return mavlink_finalize_message(msg, system_id, component_id, 5, 209);
}
 
/**
* @brief Pack a cmd_airspeed_chng message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param target Target ID
* @param spCmd commanded airspeed
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_cmd_airspeed_chng_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t target,float spCmd)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, target);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 5);
#else
mavlink_cmd_airspeed_chng_t packet;
packet.spCmd = spCmd;
packet.target = target;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 5);
#endif
 
msg->msgid = MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 5, 209);
}
 
/**
* @brief Encode a cmd_airspeed_chng struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param cmd_airspeed_chng C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_cmd_airspeed_chng_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_cmd_airspeed_chng_t* cmd_airspeed_chng)
{
return mavlink_msg_cmd_airspeed_chng_pack(system_id, component_id, msg, cmd_airspeed_chng->target, cmd_airspeed_chng->spCmd);
}
 
/**
* @brief Send a cmd_airspeed_chng message
* @param chan MAVLink channel to send the message
*
* @param target Target ID
* @param spCmd commanded airspeed
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_cmd_airspeed_chng_send(mavlink_channel_t chan, uint8_t target, float spCmd)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[5];
_mav_put_float(buf, 0, spCmd);
_mav_put_uint8_t(buf, 4, target);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG, buf, 5, 209);
#else
mavlink_cmd_airspeed_chng_t packet;
packet.spCmd = spCmd;
packet.target = target;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CMD_AIRSPEED_CHNG, (const char *)&packet, 5, 209);
#endif
}
 
#endif
 
// MESSAGE CMD_AIRSPEED_CHNG UNPACKING
 
 
/**
* @brief Get field target from cmd_airspeed_chng message
*
* @return Target ID
*/
static inline uint8_t mavlink_msg_cmd_airspeed_chng_get_target(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 4);
}
 
/**
* @brief Get field spCmd from cmd_airspeed_chng message
*
* @return commanded airspeed
*/
static inline float mavlink_msg_cmd_airspeed_chng_get_spCmd(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Decode a cmd_airspeed_chng message into a struct
*
* @param msg The message to decode
* @param cmd_airspeed_chng C-struct to decode the message contents into
*/
static inline void mavlink_msg_cmd_airspeed_chng_decode(const mavlink_message_t* msg, mavlink_cmd_airspeed_chng_t* cmd_airspeed_chng)
{
#if MAVLINK_NEED_BYTE_SWAP
cmd_airspeed_chng->spCmd = mavlink_msg_cmd_airspeed_chng_get_spCmd(msg);
cmd_airspeed_chng->target = mavlink_msg_cmd_airspeed_chng_get_target(msg);
#else
memcpy(cmd_airspeed_chng, _MAV_PAYLOAD(msg), 5);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_filt_rot_vel.h
0,0 → 1,144
// MESSAGE FILT_ROT_VEL PACKING
 
#define MAVLINK_MSG_ID_FILT_ROT_VEL 184
 
typedef struct __mavlink_filt_rot_vel_t
{
float rotVel[3]; ///< rotational velocity
} mavlink_filt_rot_vel_t;
 
#define MAVLINK_MSG_ID_FILT_ROT_VEL_LEN 12
#define MAVLINK_MSG_ID_184_LEN 12
 
#define MAVLINK_MSG_FILT_ROT_VEL_FIELD_ROTVEL_LEN 3
 
#define MAVLINK_MESSAGE_INFO_FILT_ROT_VEL { \
"FILT_ROT_VEL", \
1, \
{ { "rotVel", NULL, MAVLINK_TYPE_FLOAT, 3, 0, offsetof(mavlink_filt_rot_vel_t, rotVel) }, \
} \
}
 
 
/**
* @brief Pack a filt_rot_vel message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param rotVel rotational velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_filt_rot_vel_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const float *rotVel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, rotVel, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_filt_rot_vel_t packet;
 
mav_array_memcpy(packet.rotVel, rotVel, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FILT_ROT_VEL;
return mavlink_finalize_message(msg, system_id, component_id, 12, 79);
}
 
/**
* @brief Pack a filt_rot_vel message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param rotVel rotational velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_filt_rot_vel_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const float *rotVel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, rotVel, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_filt_rot_vel_t packet;
 
mav_array_memcpy(packet.rotVel, rotVel, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_FILT_ROT_VEL;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 79);
}
 
/**
* @brief Encode a filt_rot_vel struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param filt_rot_vel C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_filt_rot_vel_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_filt_rot_vel_t* filt_rot_vel)
{
return mavlink_msg_filt_rot_vel_pack(system_id, component_id, msg, filt_rot_vel->rotVel);
}
 
/**
* @brief Send a filt_rot_vel message
* @param chan MAVLink channel to send the message
*
* @param rotVel rotational velocity
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_filt_rot_vel_send(mavlink_channel_t chan, const float *rotVel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, rotVel, 3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILT_ROT_VEL, buf, 12, 79);
#else
mavlink_filt_rot_vel_t packet;
 
mav_array_memcpy(packet.rotVel, rotVel, sizeof(float)*3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILT_ROT_VEL, (const char *)&packet, 12, 79);
#endif
}
 
#endif
 
// MESSAGE FILT_ROT_VEL UNPACKING
 
 
/**
* @brief Get field rotVel from filt_rot_vel message
*
* @return rotational velocity
*/
static inline uint16_t mavlink_msg_filt_rot_vel_get_rotVel(const mavlink_message_t* msg, float *rotVel)
{
return _MAV_RETURN_float_array(msg, rotVel, 3, 0);
}
 
/**
* @brief Decode a filt_rot_vel message into a struct
*
* @param msg The message to decode
* @param filt_rot_vel C-struct to decode the message contents into
*/
static inline void mavlink_msg_filt_rot_vel_decode(const mavlink_message_t* msg, mavlink_filt_rot_vel_t* filt_rot_vel)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_filt_rot_vel_get_rotVel(msg, filt_rot_vel->rotVel);
#else
memcpy(filt_rot_vel, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_llc_out.h
0,0 → 1,167
// MESSAGE LLC_OUT PACKING
 
#define MAVLINK_MSG_ID_LLC_OUT 186
 
typedef struct __mavlink_llc_out_t
{
int16_t servoOut[4]; ///< Servo signal
int16_t MotorOut[2]; ///< motor signal
} mavlink_llc_out_t;
 
#define MAVLINK_MSG_ID_LLC_OUT_LEN 12
#define MAVLINK_MSG_ID_186_LEN 12
 
#define MAVLINK_MSG_LLC_OUT_FIELD_SERVOOUT_LEN 4
#define MAVLINK_MSG_LLC_OUT_FIELD_MOTOROUT_LEN 2
 
#define MAVLINK_MESSAGE_INFO_LLC_OUT { \
"LLC_OUT", \
2, \
{ { "servoOut", NULL, MAVLINK_TYPE_INT16_T, 4, 0, offsetof(mavlink_llc_out_t, servoOut) }, \
{ "MotorOut", NULL, MAVLINK_TYPE_INT16_T, 2, 8, offsetof(mavlink_llc_out_t, MotorOut) }, \
} \
}
 
 
/**
* @brief Pack a llc_out message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param servoOut Servo signal
* @param MotorOut motor signal
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_llc_out_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const int16_t *servoOut, const int16_t *MotorOut)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_int16_t_array(buf, 0, servoOut, 4);
_mav_put_int16_t_array(buf, 8, MotorOut, 2);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_llc_out_t packet;
 
mav_array_memcpy(packet.servoOut, servoOut, sizeof(int16_t)*4);
mav_array_memcpy(packet.MotorOut, MotorOut, sizeof(int16_t)*2);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LLC_OUT;
return mavlink_finalize_message(msg, system_id, component_id, 12, 5);
}
 
/**
* @brief Pack a llc_out message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param servoOut Servo signal
* @param MotorOut motor signal
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_llc_out_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const int16_t *servoOut,const int16_t *MotorOut)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_int16_t_array(buf, 0, servoOut, 4);
_mav_put_int16_t_array(buf, 8, MotorOut, 2);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_llc_out_t packet;
 
mav_array_memcpy(packet.servoOut, servoOut, sizeof(int16_t)*4);
mav_array_memcpy(packet.MotorOut, MotorOut, sizeof(int16_t)*2);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_LLC_OUT;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 5);
}
 
/**
* @brief Encode a llc_out struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param llc_out C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_llc_out_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_llc_out_t* llc_out)
{
return mavlink_msg_llc_out_pack(system_id, component_id, msg, llc_out->servoOut, llc_out->MotorOut);
}
 
/**
* @brief Send a llc_out message
* @param chan MAVLink channel to send the message
*
* @param servoOut Servo signal
* @param MotorOut motor signal
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_llc_out_send(mavlink_channel_t chan, const int16_t *servoOut, const int16_t *MotorOut)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_int16_t_array(buf, 0, servoOut, 4);
_mav_put_int16_t_array(buf, 8, MotorOut, 2);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LLC_OUT, buf, 12, 5);
#else
mavlink_llc_out_t packet;
 
mav_array_memcpy(packet.servoOut, servoOut, sizeof(int16_t)*4);
mav_array_memcpy(packet.MotorOut, MotorOut, sizeof(int16_t)*2);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_LLC_OUT, (const char *)&packet, 12, 5);
#endif
}
 
#endif
 
// MESSAGE LLC_OUT UNPACKING
 
 
/**
* @brief Get field servoOut from llc_out message
*
* @return Servo signal
*/
static inline uint16_t mavlink_msg_llc_out_get_servoOut(const mavlink_message_t* msg, int16_t *servoOut)
{
return _MAV_RETURN_int16_t_array(msg, servoOut, 4, 0);
}
 
/**
* @brief Get field MotorOut from llc_out message
*
* @return motor signal
*/
static inline uint16_t mavlink_msg_llc_out_get_MotorOut(const mavlink_message_t* msg, int16_t *MotorOut)
{
return _MAV_RETURN_int16_t_array(msg, MotorOut, 2, 8);
}
 
/**
* @brief Decode a llc_out message into a struct
*
* @param msg The message to decode
* @param llc_out C-struct to decode the message contents into
*/
static inline void mavlink_msg_llc_out_decode(const mavlink_message_t* msg, mavlink_llc_out_t* llc_out)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_llc_out_get_servoOut(msg, llc_out->servoOut);
mavlink_msg_llc_out_get_MotorOut(msg, llc_out->MotorOut);
#else
memcpy(llc_out, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_air_temp.h
0,0 → 1,144
// MESSAGE OBS_AIR_TEMP PACKING
 
#define MAVLINK_MSG_ID_OBS_AIR_TEMP 183
 
typedef struct __mavlink_obs_air_temp_t
{
float airT; ///< Air Temperatur
} mavlink_obs_air_temp_t;
 
#define MAVLINK_MSG_ID_OBS_AIR_TEMP_LEN 4
#define MAVLINK_MSG_ID_183_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_OBS_AIR_TEMP { \
"OBS_AIR_TEMP", \
1, \
{ { "airT", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_obs_air_temp_t, airT) }, \
} \
}
 
 
/**
* @brief Pack a obs_air_temp message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param airT Air Temperatur
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_air_temp_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float airT)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, airT);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_obs_air_temp_t packet;
packet.airT = airT;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_AIR_TEMP;
return mavlink_finalize_message(msg, system_id, component_id, 4, 248);
}
 
/**
* @brief Pack a obs_air_temp message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param airT Air Temperatur
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_air_temp_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float airT)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, airT);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_obs_air_temp_t packet;
packet.airT = airT;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_AIR_TEMP;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 248);
}
 
/**
* @brief Encode a obs_air_temp struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_air_temp C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_air_temp_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_air_temp_t* obs_air_temp)
{
return mavlink_msg_obs_air_temp_pack(system_id, component_id, msg, obs_air_temp->airT);
}
 
/**
* @brief Send a obs_air_temp message
* @param chan MAVLink channel to send the message
*
* @param airT Air Temperatur
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_air_temp_send(mavlink_channel_t chan, float airT)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, airT);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_AIR_TEMP, buf, 4, 248);
#else
mavlink_obs_air_temp_t packet;
packet.airT = airT;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_AIR_TEMP, (const char *)&packet, 4, 248);
#endif
}
 
#endif
 
// MESSAGE OBS_AIR_TEMP UNPACKING
 
 
/**
* @brief Get field airT from obs_air_temp message
*
* @return Air Temperatur
*/
static inline float mavlink_msg_obs_air_temp_get_airT(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Decode a obs_air_temp message into a struct
*
* @param msg The message to decode
* @param obs_air_temp C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_air_temp_decode(const mavlink_message_t* msg, mavlink_obs_air_temp_t* obs_air_temp)
{
#if MAVLINK_NEED_BYTE_SWAP
obs_air_temp->airT = mavlink_msg_obs_air_temp_get_airT(msg);
#else
memcpy(obs_air_temp, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_air_velocity.h
0,0 → 1,188
// MESSAGE OBS_AIR_VELOCITY PACKING
 
#define MAVLINK_MSG_ID_OBS_AIR_VELOCITY 178
 
typedef struct __mavlink_obs_air_velocity_t
{
float magnitude; ///< Air speed
float aoa; ///< angle of attack
float slip; ///< slip angle
} mavlink_obs_air_velocity_t;
 
#define MAVLINK_MSG_ID_OBS_AIR_VELOCITY_LEN 12
#define MAVLINK_MSG_ID_178_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_OBS_AIR_VELOCITY { \
"OBS_AIR_VELOCITY", \
3, \
{ { "magnitude", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_obs_air_velocity_t, magnitude) }, \
{ "aoa", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_obs_air_velocity_t, aoa) }, \
{ "slip", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_obs_air_velocity_t, slip) }, \
} \
}
 
 
/**
* @brief Pack a obs_air_velocity message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param magnitude Air speed
* @param aoa angle of attack
* @param slip slip angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_air_velocity_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float magnitude, float aoa, float slip)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, magnitude);
_mav_put_float(buf, 4, aoa);
_mav_put_float(buf, 8, slip);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_air_velocity_t packet;
packet.magnitude = magnitude;
packet.aoa = aoa;
packet.slip = slip;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_AIR_VELOCITY;
return mavlink_finalize_message(msg, system_id, component_id, 12, 32);
}
 
/**
* @brief Pack a obs_air_velocity message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param magnitude Air speed
* @param aoa angle of attack
* @param slip slip angle
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_air_velocity_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float magnitude,float aoa,float slip)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, magnitude);
_mav_put_float(buf, 4, aoa);
_mav_put_float(buf, 8, slip);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_air_velocity_t packet;
packet.magnitude = magnitude;
packet.aoa = aoa;
packet.slip = slip;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_AIR_VELOCITY;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 32);
}
 
/**
* @brief Encode a obs_air_velocity struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_air_velocity C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_air_velocity_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_air_velocity_t* obs_air_velocity)
{
return mavlink_msg_obs_air_velocity_pack(system_id, component_id, msg, obs_air_velocity->magnitude, obs_air_velocity->aoa, obs_air_velocity->slip);
}
 
/**
* @brief Send a obs_air_velocity message
* @param chan MAVLink channel to send the message
*
* @param magnitude Air speed
* @param aoa angle of attack
* @param slip slip angle
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_air_velocity_send(mavlink_channel_t chan, float magnitude, float aoa, float slip)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_float(buf, 0, magnitude);
_mav_put_float(buf, 4, aoa);
_mav_put_float(buf, 8, slip);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_AIR_VELOCITY, buf, 12, 32);
#else
mavlink_obs_air_velocity_t packet;
packet.magnitude = magnitude;
packet.aoa = aoa;
packet.slip = slip;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_AIR_VELOCITY, (const char *)&packet, 12, 32);
#endif
}
 
#endif
 
// MESSAGE OBS_AIR_VELOCITY UNPACKING
 
 
/**
* @brief Get field magnitude from obs_air_velocity message
*
* @return Air speed
*/
static inline float mavlink_msg_obs_air_velocity_get_magnitude(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field aoa from obs_air_velocity message
*
* @return angle of attack
*/
static inline float mavlink_msg_obs_air_velocity_get_aoa(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field slip from obs_air_velocity message
*
* @return slip angle
*/
static inline float mavlink_msg_obs_air_velocity_get_slip(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 8);
}
 
/**
* @brief Decode a obs_air_velocity message into a struct
*
* @param msg The message to decode
* @param obs_air_velocity C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_air_velocity_decode(const mavlink_message_t* msg, mavlink_obs_air_velocity_t* obs_air_velocity)
{
#if MAVLINK_NEED_BYTE_SWAP
obs_air_velocity->magnitude = mavlink_msg_obs_air_velocity_get_magnitude(msg);
obs_air_velocity->aoa = mavlink_msg_obs_air_velocity_get_aoa(msg);
obs_air_velocity->slip = mavlink_msg_obs_air_velocity_get_slip(msg);
#else
memcpy(obs_air_velocity, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_attitude.h
0,0 → 1,144
// MESSAGE OBS_ATTITUDE PACKING
 
#define MAVLINK_MSG_ID_OBS_ATTITUDE 174
 
typedef struct __mavlink_obs_attitude_t
{
double quat[4]; ///< Quaternion re;im
} mavlink_obs_attitude_t;
 
#define MAVLINK_MSG_ID_OBS_ATTITUDE_LEN 32
#define MAVLINK_MSG_ID_174_LEN 32
 
#define MAVLINK_MSG_OBS_ATTITUDE_FIELD_QUAT_LEN 4
 
#define MAVLINK_MESSAGE_INFO_OBS_ATTITUDE { \
"OBS_ATTITUDE", \
1, \
{ { "quat", NULL, MAVLINK_TYPE_DOUBLE, 4, 0, offsetof(mavlink_obs_attitude_t, quat) }, \
} \
}
 
 
/**
* @brief Pack a obs_attitude message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param quat Quaternion re;im
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const double *quat)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_double_array(buf, 0, quat, 4);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_obs_attitude_t packet;
 
mav_array_memcpy(packet.quat, quat, sizeof(double)*4);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_ATTITUDE;
return mavlink_finalize_message(msg, system_id, component_id, 32, 146);
}
 
/**
* @brief Pack a obs_attitude message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param quat Quaternion re;im
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const double *quat)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_double_array(buf, 0, quat, 4);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 32);
#else
mavlink_obs_attitude_t packet;
 
mav_array_memcpy(packet.quat, quat, sizeof(double)*4);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 32);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_ATTITUDE;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 32, 146);
}
 
/**
* @brief Encode a obs_attitude struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_attitude C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_attitude_t* obs_attitude)
{
return mavlink_msg_obs_attitude_pack(system_id, component_id, msg, obs_attitude->quat);
}
 
/**
* @brief Send a obs_attitude message
* @param chan MAVLink channel to send the message
*
* @param quat Quaternion re;im
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_attitude_send(mavlink_channel_t chan, const double *quat)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[32];
 
_mav_put_double_array(buf, 0, quat, 4);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_ATTITUDE, buf, 32, 146);
#else
mavlink_obs_attitude_t packet;
 
mav_array_memcpy(packet.quat, quat, sizeof(double)*4);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_ATTITUDE, (const char *)&packet, 32, 146);
#endif
}
 
#endif
 
// MESSAGE OBS_ATTITUDE UNPACKING
 
 
/**
* @brief Get field quat from obs_attitude message
*
* @return Quaternion re;im
*/
static inline uint16_t mavlink_msg_obs_attitude_get_quat(const mavlink_message_t* msg, double *quat)
{
return _MAV_RETURN_double_array(msg, quat, 4, 0);
}
 
/**
* @brief Decode a obs_attitude message into a struct
*
* @param msg The message to decode
* @param obs_attitude C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_attitude_decode(const mavlink_message_t* msg, mavlink_obs_attitude_t* obs_attitude)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_obs_attitude_get_quat(msg, obs_attitude->quat);
#else
memcpy(obs_attitude, _MAV_PAYLOAD(msg), 32);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_bias.h
0,0 → 1,167
// MESSAGE OBS_BIAS PACKING
 
#define MAVLINK_MSG_ID_OBS_BIAS 180
 
typedef struct __mavlink_obs_bias_t
{
float accBias[3]; ///< accelerometer bias
float gyroBias[3]; ///< gyroscope bias
} mavlink_obs_bias_t;
 
#define MAVLINK_MSG_ID_OBS_BIAS_LEN 24
#define MAVLINK_MSG_ID_180_LEN 24
 
#define MAVLINK_MSG_OBS_BIAS_FIELD_ACCBIAS_LEN 3
#define MAVLINK_MSG_OBS_BIAS_FIELD_GYROBIAS_LEN 3
 
#define MAVLINK_MESSAGE_INFO_OBS_BIAS { \
"OBS_BIAS", \
2, \
{ { "accBias", NULL, MAVLINK_TYPE_FLOAT, 3, 0, offsetof(mavlink_obs_bias_t, accBias) }, \
{ "gyroBias", NULL, MAVLINK_TYPE_FLOAT, 3, 12, offsetof(mavlink_obs_bias_t, gyroBias) }, \
} \
}
 
 
/**
* @brief Pack a obs_bias message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param accBias accelerometer bias
* @param gyroBias gyroscope bias
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_bias_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const float *accBias, const float *gyroBias)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
 
_mav_put_float_array(buf, 0, accBias, 3);
_mav_put_float_array(buf, 12, gyroBias, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_obs_bias_t packet;
 
mav_array_memcpy(packet.accBias, accBias, sizeof(float)*3);
mav_array_memcpy(packet.gyroBias, gyroBias, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_BIAS;
return mavlink_finalize_message(msg, system_id, component_id, 24, 159);
}
 
/**
* @brief Pack a obs_bias message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param accBias accelerometer bias
* @param gyroBias gyroscope bias
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_bias_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const float *accBias,const float *gyroBias)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
 
_mav_put_float_array(buf, 0, accBias, 3);
_mav_put_float_array(buf, 12, gyroBias, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 24);
#else
mavlink_obs_bias_t packet;
 
mav_array_memcpy(packet.accBias, accBias, sizeof(float)*3);
mav_array_memcpy(packet.gyroBias, gyroBias, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 24);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_BIAS;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 24, 159);
}
 
/**
* @brief Encode a obs_bias struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_bias C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_bias_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_bias_t* obs_bias)
{
return mavlink_msg_obs_bias_pack(system_id, component_id, msg, obs_bias->accBias, obs_bias->gyroBias);
}
 
/**
* @brief Send a obs_bias message
* @param chan MAVLink channel to send the message
*
* @param accBias accelerometer bias
* @param gyroBias gyroscope bias
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_bias_send(mavlink_channel_t chan, const float *accBias, const float *gyroBias)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[24];
 
_mav_put_float_array(buf, 0, accBias, 3);
_mav_put_float_array(buf, 12, gyroBias, 3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_BIAS, buf, 24, 159);
#else
mavlink_obs_bias_t packet;
 
mav_array_memcpy(packet.accBias, accBias, sizeof(float)*3);
mav_array_memcpy(packet.gyroBias, gyroBias, sizeof(float)*3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_BIAS, (const char *)&packet, 24, 159);
#endif
}
 
#endif
 
// MESSAGE OBS_BIAS UNPACKING
 
 
/**
* @brief Get field accBias from obs_bias message
*
* @return accelerometer bias
*/
static inline uint16_t mavlink_msg_obs_bias_get_accBias(const mavlink_message_t* msg, float *accBias)
{
return _MAV_RETURN_float_array(msg, accBias, 3, 0);
}
 
/**
* @brief Get field gyroBias from obs_bias message
*
* @return gyroscope bias
*/
static inline uint16_t mavlink_msg_obs_bias_get_gyroBias(const mavlink_message_t* msg, float *gyroBias)
{
return _MAV_RETURN_float_array(msg, gyroBias, 3, 12);
}
 
/**
* @brief Decode a obs_bias message into a struct
*
* @param msg The message to decode
* @param obs_bias C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_bias_decode(const mavlink_message_t* msg, mavlink_obs_bias_t* obs_bias)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_obs_bias_get_accBias(msg, obs_bias->accBias);
mavlink_msg_obs_bias_get_gyroBias(msg, obs_bias->gyroBias);
#else
memcpy(obs_bias, _MAV_PAYLOAD(msg), 24);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_position.h
0,0 → 1,188
// MESSAGE OBS_POSITION PACKING
 
#define MAVLINK_MSG_ID_OBS_POSITION 170
 
typedef struct __mavlink_obs_position_t
{
int32_t lon; ///< Longitude expressed in 1E7
int32_t lat; ///< Latitude expressed in 1E7
int32_t alt; ///< Altitude expressed in milimeters
} mavlink_obs_position_t;
 
#define MAVLINK_MSG_ID_OBS_POSITION_LEN 12
#define MAVLINK_MSG_ID_170_LEN 12
 
 
 
#define MAVLINK_MESSAGE_INFO_OBS_POSITION { \
"OBS_POSITION", \
3, \
{ { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_obs_position_t, lon) }, \
{ "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_obs_position_t, lat) }, \
{ "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_obs_position_t, alt) }, \
} \
}
 
 
/**
* @brief Pack a obs_position message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param lon Longitude expressed in 1E7
* @param lat Latitude expressed in 1E7
* @param alt Altitude expressed in milimeters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_position_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
int32_t lon, int32_t lat, int32_t alt)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, lon);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, alt);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_position_t packet;
packet.lon = lon;
packet.lat = lat;
packet.alt = alt;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_POSITION;
return mavlink_finalize_message(msg, system_id, component_id, 12, 15);
}
 
/**
* @brief Pack a obs_position message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param lon Longitude expressed in 1E7
* @param lat Latitude expressed in 1E7
* @param alt Altitude expressed in milimeters
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_position_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
int32_t lon,int32_t lat,int32_t alt)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, lon);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, alt);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_position_t packet;
packet.lon = lon;
packet.lat = lat;
packet.alt = alt;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_POSITION;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 15);
}
 
/**
* @brief Encode a obs_position struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_position C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_position_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_position_t* obs_position)
{
return mavlink_msg_obs_position_pack(system_id, component_id, msg, obs_position->lon, obs_position->lat, obs_position->alt);
}
 
/**
* @brief Send a obs_position message
* @param chan MAVLink channel to send the message
*
* @param lon Longitude expressed in 1E7
* @param lat Latitude expressed in 1E7
* @param alt Altitude expressed in milimeters
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_position_send(mavlink_channel_t chan, int32_t lon, int32_t lat, int32_t alt)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
_mav_put_int32_t(buf, 0, lon);
_mav_put_int32_t(buf, 4, lat);
_mav_put_int32_t(buf, 8, alt);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_POSITION, buf, 12, 15);
#else
mavlink_obs_position_t packet;
packet.lon = lon;
packet.lat = lat;
packet.alt = alt;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_POSITION, (const char *)&packet, 12, 15);
#endif
}
 
#endif
 
// MESSAGE OBS_POSITION UNPACKING
 
 
/**
* @brief Get field lon from obs_position message
*
* @return Longitude expressed in 1E7
*/
static inline int32_t mavlink_msg_obs_position_get_lon(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 0);
}
 
/**
* @brief Get field lat from obs_position message
*
* @return Latitude expressed in 1E7
*/
static inline int32_t mavlink_msg_obs_position_get_lat(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 4);
}
 
/**
* @brief Get field alt from obs_position message
*
* @return Altitude expressed in milimeters
*/
static inline int32_t mavlink_msg_obs_position_get_alt(const mavlink_message_t* msg)
{
return _MAV_RETURN_int32_t(msg, 8);
}
 
/**
* @brief Decode a obs_position message into a struct
*
* @param msg The message to decode
* @param obs_position C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_position_decode(const mavlink_message_t* msg, mavlink_obs_position_t* obs_position)
{
#if MAVLINK_NEED_BYTE_SWAP
obs_position->lon = mavlink_msg_obs_position_get_lon(msg);
obs_position->lat = mavlink_msg_obs_position_get_lat(msg);
obs_position->alt = mavlink_msg_obs_position_get_alt(msg);
#else
memcpy(obs_position, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_qff.h
0,0 → 1,144
// MESSAGE OBS_QFF PACKING
 
#define MAVLINK_MSG_ID_OBS_QFF 182
 
typedef struct __mavlink_obs_qff_t
{
float qff; ///< Wind
} mavlink_obs_qff_t;
 
#define MAVLINK_MSG_ID_OBS_QFF_LEN 4
#define MAVLINK_MSG_ID_182_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_OBS_QFF { \
"OBS_QFF", \
1, \
{ { "qff", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_obs_qff_t, qff) }, \
} \
}
 
 
/**
* @brief Pack a obs_qff message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param qff Wind
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_qff_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float qff)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, qff);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_obs_qff_t packet;
packet.qff = qff;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_QFF;
return mavlink_finalize_message(msg, system_id, component_id, 4, 24);
}
 
/**
* @brief Pack a obs_qff message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param qff Wind
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_qff_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float qff)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, qff);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_obs_qff_t packet;
packet.qff = qff;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_QFF;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 24);
}
 
/**
* @brief Encode a obs_qff struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_qff C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_qff_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_qff_t* obs_qff)
{
return mavlink_msg_obs_qff_pack(system_id, component_id, msg, obs_qff->qff);
}
 
/**
* @brief Send a obs_qff message
* @param chan MAVLink channel to send the message
*
* @param qff Wind
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_qff_send(mavlink_channel_t chan, float qff)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_float(buf, 0, qff);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_QFF, buf, 4, 24);
#else
mavlink_obs_qff_t packet;
packet.qff = qff;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_QFF, (const char *)&packet, 4, 24);
#endif
}
 
#endif
 
// MESSAGE OBS_QFF UNPACKING
 
 
/**
* @brief Get field qff from obs_qff message
*
* @return Wind
*/
static inline float mavlink_msg_obs_qff_get_qff(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Decode a obs_qff message into a struct
*
* @param msg The message to decode
* @param obs_qff C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_qff_decode(const mavlink_message_t* msg, mavlink_obs_qff_t* obs_qff)
{
#if MAVLINK_NEED_BYTE_SWAP
obs_qff->qff = mavlink_msg_obs_qff_get_qff(msg);
#else
memcpy(obs_qff, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_velocity.h
0,0 → 1,144
// MESSAGE OBS_VELOCITY PACKING
 
#define MAVLINK_MSG_ID_OBS_VELOCITY 172
 
typedef struct __mavlink_obs_velocity_t
{
float vel[3]; ///< Velocity
} mavlink_obs_velocity_t;
 
#define MAVLINK_MSG_ID_OBS_VELOCITY_LEN 12
#define MAVLINK_MSG_ID_172_LEN 12
 
#define MAVLINK_MSG_OBS_VELOCITY_FIELD_VEL_LEN 3
 
#define MAVLINK_MESSAGE_INFO_OBS_VELOCITY { \
"OBS_VELOCITY", \
1, \
{ { "vel", NULL, MAVLINK_TYPE_FLOAT, 3, 0, offsetof(mavlink_obs_velocity_t, vel) }, \
} \
}
 
 
/**
* @brief Pack a obs_velocity message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param vel Velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_velocity_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const float *vel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, vel, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_velocity_t packet;
 
mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_VELOCITY;
return mavlink_finalize_message(msg, system_id, component_id, 12, 108);
}
 
/**
* @brief Pack a obs_velocity message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param vel Velocity
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_velocity_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const float *vel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, vel, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_velocity_t packet;
 
mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_VELOCITY;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 108);
}
 
/**
* @brief Encode a obs_velocity struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_velocity C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_velocity_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_velocity_t* obs_velocity)
{
return mavlink_msg_obs_velocity_pack(system_id, component_id, msg, obs_velocity->vel);
}
 
/**
* @brief Send a obs_velocity message
* @param chan MAVLink channel to send the message
*
* @param vel Velocity
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_velocity_send(mavlink_channel_t chan, const float *vel)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, vel, 3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_VELOCITY, buf, 12, 108);
#else
mavlink_obs_velocity_t packet;
 
mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_VELOCITY, (const char *)&packet, 12, 108);
#endif
}
 
#endif
 
// MESSAGE OBS_VELOCITY UNPACKING
 
 
/**
* @brief Get field vel from obs_velocity message
*
* @return Velocity
*/
static inline uint16_t mavlink_msg_obs_velocity_get_vel(const mavlink_message_t* msg, float *vel)
{
return _MAV_RETURN_float_array(msg, vel, 3, 0);
}
 
/**
* @brief Decode a obs_velocity message into a struct
*
* @param msg The message to decode
* @param obs_velocity C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_velocity_decode(const mavlink_message_t* msg, mavlink_obs_velocity_t* obs_velocity)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_obs_velocity_get_vel(msg, obs_velocity->vel);
#else
memcpy(obs_velocity, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_obs_wind.h
0,0 → 1,144
// MESSAGE OBS_WIND PACKING
 
#define MAVLINK_MSG_ID_OBS_WIND 176
 
typedef struct __mavlink_obs_wind_t
{
float wind[3]; ///< Wind
} mavlink_obs_wind_t;
 
#define MAVLINK_MSG_ID_OBS_WIND_LEN 12
#define MAVLINK_MSG_ID_176_LEN 12
 
#define MAVLINK_MSG_OBS_WIND_FIELD_WIND_LEN 3
 
#define MAVLINK_MESSAGE_INFO_OBS_WIND { \
"OBS_WIND", \
1, \
{ { "wind", NULL, MAVLINK_TYPE_FLOAT, 3, 0, offsetof(mavlink_obs_wind_t, wind) }, \
} \
}
 
 
/**
* @brief Pack a obs_wind message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param wind Wind
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_wind_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
const float *wind)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, wind, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_wind_t packet;
 
mav_array_memcpy(packet.wind, wind, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_WIND;
return mavlink_finalize_message(msg, system_id, component_id, 12, 16);
}
 
/**
* @brief Pack a obs_wind message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param wind Wind
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_obs_wind_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
const float *wind)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, wind, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 12);
#else
mavlink_obs_wind_t packet;
 
mav_array_memcpy(packet.wind, wind, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 12);
#endif
 
msg->msgid = MAVLINK_MSG_ID_OBS_WIND;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 12, 16);
}
 
/**
* @brief Encode a obs_wind struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param obs_wind C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_obs_wind_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_obs_wind_t* obs_wind)
{
return mavlink_msg_obs_wind_pack(system_id, component_id, msg, obs_wind->wind);
}
 
/**
* @brief Send a obs_wind message
* @param chan MAVLink channel to send the message
*
* @param wind Wind
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_obs_wind_send(mavlink_channel_t chan, const float *wind)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[12];
 
_mav_put_float_array(buf, 0, wind, 3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_WIND, buf, 12, 16);
#else
mavlink_obs_wind_t packet;
 
mav_array_memcpy(packet.wind, wind, sizeof(float)*3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OBS_WIND, (const char *)&packet, 12, 16);
#endif
}
 
#endif
 
// MESSAGE OBS_WIND UNPACKING
 
 
/**
* @brief Get field wind from obs_wind message
*
* @return Wind
*/
static inline uint16_t mavlink_msg_obs_wind_get_wind(const mavlink_message_t* msg, float *wind)
{
return _MAV_RETURN_float_array(msg, wind, 3, 0);
}
 
/**
* @brief Decode a obs_wind message into a struct
*
* @param msg The message to decode
* @param obs_wind C-struct to decode the message contents into
*/
static inline void mavlink_msg_obs_wind_decode(const mavlink_message_t* msg, mavlink_obs_wind_t* obs_wind)
{
#if MAVLINK_NEED_BYTE_SWAP
mavlink_msg_obs_wind_get_wind(msg, obs_wind->wind);
#else
memcpy(obs_wind, _MAV_PAYLOAD(msg), 12);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_pm_elec.h
0,0 → 1,182
// MESSAGE PM_ELEC PACKING
 
#define MAVLINK_MSG_ID_PM_ELEC 188
 
typedef struct __mavlink_pm_elec_t
{
float PwCons; ///< current power consumption
float BatStat; ///< battery status
float PwGen[3]; ///< Power generation from each module
} mavlink_pm_elec_t;
 
#define MAVLINK_MSG_ID_PM_ELEC_LEN 20
#define MAVLINK_MSG_ID_188_LEN 20
 
#define MAVLINK_MSG_PM_ELEC_FIELD_PWGEN_LEN 3
 
#define MAVLINK_MESSAGE_INFO_PM_ELEC { \
"PM_ELEC", \
3, \
{ { "PwCons", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_pm_elec_t, PwCons) }, \
{ "BatStat", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_pm_elec_t, BatStat) }, \
{ "PwGen", NULL, MAVLINK_TYPE_FLOAT, 3, 8, offsetof(mavlink_pm_elec_t, PwGen) }, \
} \
}
 
 
/**
* @brief Pack a pm_elec message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param PwCons current power consumption
* @param BatStat battery status
* @param PwGen Power generation from each module
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_pm_elec_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
float PwCons, float BatStat, const float *PwGen)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, PwCons);
_mav_put_float(buf, 4, BatStat);
_mav_put_float_array(buf, 8, PwGen, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_pm_elec_t packet;
packet.PwCons = PwCons;
packet.BatStat = BatStat;
mav_array_memcpy(packet.PwGen, PwGen, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PM_ELEC;
return mavlink_finalize_message(msg, system_id, component_id, 20, 170);
}
 
/**
* @brief Pack a pm_elec message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param PwCons current power consumption
* @param BatStat battery status
* @param PwGen Power generation from each module
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_pm_elec_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
float PwCons,float BatStat,const float *PwGen)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, PwCons);
_mav_put_float(buf, 4, BatStat);
_mav_put_float_array(buf, 8, PwGen, 3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 20);
#else
mavlink_pm_elec_t packet;
packet.PwCons = PwCons;
packet.BatStat = BatStat;
mav_array_memcpy(packet.PwGen, PwGen, sizeof(float)*3);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 20);
#endif
 
msg->msgid = MAVLINK_MSG_ID_PM_ELEC;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 20, 170);
}
 
/**
* @brief Encode a pm_elec struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param pm_elec C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_pm_elec_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_pm_elec_t* pm_elec)
{
return mavlink_msg_pm_elec_pack(system_id, component_id, msg, pm_elec->PwCons, pm_elec->BatStat, pm_elec->PwGen);
}
 
/**
* @brief Send a pm_elec message
* @param chan MAVLink channel to send the message
*
* @param PwCons current power consumption
* @param BatStat battery status
* @param PwGen Power generation from each module
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_pm_elec_send(mavlink_channel_t chan, float PwCons, float BatStat, const float *PwGen)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[20];
_mav_put_float(buf, 0, PwCons);
_mav_put_float(buf, 4, BatStat);
_mav_put_float_array(buf, 8, PwGen, 3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PM_ELEC, buf, 20, 170);
#else
mavlink_pm_elec_t packet;
packet.PwCons = PwCons;
packet.BatStat = BatStat;
mav_array_memcpy(packet.PwGen, PwGen, sizeof(float)*3);
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_PM_ELEC, (const char *)&packet, 20, 170);
#endif
}
 
#endif
 
// MESSAGE PM_ELEC UNPACKING
 
 
/**
* @brief Get field PwCons from pm_elec message
*
* @return current power consumption
*/
static inline float mavlink_msg_pm_elec_get_PwCons(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 0);
}
 
/**
* @brief Get field BatStat from pm_elec message
*
* @return battery status
*/
static inline float mavlink_msg_pm_elec_get_BatStat(const mavlink_message_t* msg)
{
return _MAV_RETURN_float(msg, 4);
}
 
/**
* @brief Get field PwGen from pm_elec message
*
* @return Power generation from each module
*/
static inline uint16_t mavlink_msg_pm_elec_get_PwGen(const mavlink_message_t* msg, float *PwGen)
{
return _MAV_RETURN_float_array(msg, PwGen, 3, 8);
}
 
/**
* @brief Decode a pm_elec message into a struct
*
* @param msg The message to decode
* @param pm_elec C-struct to decode the message contents into
*/
static inline void mavlink_msg_pm_elec_decode(const mavlink_message_t* msg, mavlink_pm_elec_t* pm_elec)
{
#if MAVLINK_NEED_BYTE_SWAP
pm_elec->PwCons = mavlink_msg_pm_elec_get_PwCons(msg);
pm_elec->BatStat = mavlink_msg_pm_elec_get_BatStat(msg);
mavlink_msg_pm_elec_get_PwGen(msg, pm_elec->PwGen);
#else
memcpy(pm_elec, _MAV_PAYLOAD(msg), 20);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/mavlink_msg_sys_stat.h
0,0 → 1,210
// MESSAGE SYS_Stat PACKING
 
#define MAVLINK_MSG_ID_SYS_Stat 190
 
typedef struct __mavlink_sys_stat_t
{
uint8_t gps; ///< gps status
uint8_t act; ///< actuator status
uint8_t mod; ///< module status
uint8_t commRssi; ///< module status
} mavlink_sys_stat_t;
 
#define MAVLINK_MSG_ID_SYS_Stat_LEN 4
#define MAVLINK_MSG_ID_190_LEN 4
 
 
 
#define MAVLINK_MESSAGE_INFO_SYS_Stat { \
"SYS_Stat", \
4, \
{ { "gps", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_sys_stat_t, gps) }, \
{ "act", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_sys_stat_t, act) }, \
{ "mod", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_sys_stat_t, mod) }, \
{ "commRssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_sys_stat_t, commRssi) }, \
} \
}
 
 
/**
* @brief Pack a sys_stat message
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
*
* @param gps gps status
* @param act actuator status
* @param mod module status
* @param commRssi module status
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_stat_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t gps, uint8_t act, uint8_t mod, uint8_t commRssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, gps);
_mav_put_uint8_t(buf, 1, act);
_mav_put_uint8_t(buf, 2, mod);
_mav_put_uint8_t(buf, 3, commRssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_sys_stat_t packet;
packet.gps = gps;
packet.act = act;
packet.mod = mod;
packet.commRssi = commRssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_Stat;
return mavlink_finalize_message(msg, system_id, component_id, 4, 157);
}
 
/**
* @brief Pack a sys_stat message on a channel
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param chan The MAVLink channel this message was sent over
* @param msg The MAVLink message to compress the data into
* @param gps gps status
* @param act actuator status
* @param mod module status
* @param commRssi module status
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_sys_stat_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t gps,uint8_t act,uint8_t mod,uint8_t commRssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, gps);
_mav_put_uint8_t(buf, 1, act);
_mav_put_uint8_t(buf, 2, mod);
_mav_put_uint8_t(buf, 3, commRssi);
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, 4);
#else
mavlink_sys_stat_t packet;
packet.gps = gps;
packet.act = act;
packet.mod = mod;
packet.commRssi = commRssi;
 
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, 4);
#endif
 
msg->msgid = MAVLINK_MSG_ID_SYS_Stat;
return mavlink_finalize_message_chan(msg, system_id, component_id, chan, 4, 157);
}
 
/**
* @brief Encode a sys_stat struct into a message
*
* @param system_id ID of this system
* @param component_id ID of this component (e.g. 200 for IMU)
* @param msg The MAVLink message to compress the data into
* @param sys_stat C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_sys_stat_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_sys_stat_t* sys_stat)
{
return mavlink_msg_sys_stat_pack(system_id, component_id, msg, sys_stat->gps, sys_stat->act, sys_stat->mod, sys_stat->commRssi);
}
 
/**
* @brief Send a sys_stat message
* @param chan MAVLink channel to send the message
*
* @param gps gps status
* @param act actuator status
* @param mod module status
* @param commRssi module status
*/
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
 
static inline void mavlink_msg_sys_stat_send(mavlink_channel_t chan, uint8_t gps, uint8_t act, uint8_t mod, uint8_t commRssi)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[4];
_mav_put_uint8_t(buf, 0, gps);
_mav_put_uint8_t(buf, 1, act);
_mav_put_uint8_t(buf, 2, mod);
_mav_put_uint8_t(buf, 3, commRssi);
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_Stat, buf, 4, 157);
#else
mavlink_sys_stat_t packet;
packet.gps = gps;
packet.act = act;
packet.mod = mod;
packet.commRssi = commRssi;
 
_mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_SYS_Stat, (const char *)&packet, 4, 157);
#endif
}
 
#endif
 
// MESSAGE SYS_Stat UNPACKING
 
 
/**
* @brief Get field gps from sys_stat message
*
* @return gps status
*/
static inline uint8_t mavlink_msg_sys_stat_get_gps(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 0);
}
 
/**
* @brief Get field act from sys_stat message
*
* @return actuator status
*/
static inline uint8_t mavlink_msg_sys_stat_get_act(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 1);
}
 
/**
* @brief Get field mod from sys_stat message
*
* @return module status
*/
static inline uint8_t mavlink_msg_sys_stat_get_mod(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 2);
}
 
/**
* @brief Get field commRssi from sys_stat message
*
* @return module status
*/
static inline uint8_t mavlink_msg_sys_stat_get_commRssi(const mavlink_message_t* msg)
{
return _MAV_RETURN_uint8_t(msg, 3);
}
 
/**
* @brief Decode a sys_stat message into a struct
*
* @param msg The message to decode
* @param sys_stat C-struct to decode the message contents into
*/
static inline void mavlink_msg_sys_stat_decode(const mavlink_message_t* msg, mavlink_sys_stat_t* sys_stat)
{
#if MAVLINK_NEED_BYTE_SWAP
sys_stat->gps = mavlink_msg_sys_stat_get_gps(msg);
sys_stat->act = mavlink_msg_sys_stat_get_act(msg);
sys_stat->mod = mavlink_msg_sys_stat_get_mod(msg);
sys_stat->commRssi = mavlink_msg_sys_stat_get_commRssi(msg);
#else
memcpy(sys_stat, _MAV_PAYLOAD(msg), 4);
#endif
}
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/sensesoar.h
0,0 → 1,77
/** @file
* @brief MAVLink comm protocol generated from sensesoar.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef SENSESOAR_H
#define SENSESOAR_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
// MESSAGE LENGTHS AND CRCS
 
#ifndef MAVLINK_MESSAGE_LENGTHS
#define MAVLINK_MESSAGE_LENGTHS {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 9, 54, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 26, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 32, 0, 12, 0, 12, 0, 24, 0, 4, 4, 12, 0, 12, 0, 20, 0, 4, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_CRCS
#define MAVLINK_MESSAGE_CRCS {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 30, 200, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 175, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 108, 0, 146, 0, 16, 0, 32, 0, 159, 0, 24, 248, 79, 0, 5, 0, 170, 0, 157, 0, 209, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 0}
#endif
 
#ifndef MAVLINK_MESSAGE_INFO
#define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_HEARTBEAT, MAVLINK_MESSAGE_INFO_SYS_STATUS, MAVLINK_MESSAGE_INFO_SYSTEM_TIME, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PING, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL, MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK, MAVLINK_MESSAGE_INFO_AUTH_KEY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SET_MODE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_READ, MAVLINK_MESSAGE_INFO_PARAM_REQUEST_LIST, MAVLINK_MESSAGE_INFO_PARAM_VALUE, MAVLINK_MESSAGE_INFO_PARAM_SET, MAVLINK_MESSAGE_INFO_GPS_RAW_INT, MAVLINK_MESSAGE_INFO_GPS_STATUS, MAVLINK_MESSAGE_INFO_SCALED_IMU, MAVLINK_MESSAGE_INFO_RAW_IMU, MAVLINK_MESSAGE_INFO_RAW_PRESSURE, MAVLINK_MESSAGE_INFO_SCALED_PRESSURE, MAVLINK_MESSAGE_INFO_ATTITUDE, MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT, MAVLINK_MESSAGE_INFO_RC_CHANNELS_SCALED, MAVLINK_MESSAGE_INFO_RC_CHANNELS_RAW, MAVLINK_MESSAGE_INFO_SERVO_OUTPUT_RAW, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_WRITE_PARTIAL_LIST, MAVLINK_MESSAGE_INFO_MISSION_ITEM, MAVLINK_MESSAGE_INFO_MISSION_REQUEST, MAVLINK_MESSAGE_INFO_MISSION_SET_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_CURRENT, MAVLINK_MESSAGE_INFO_MISSION_REQUEST_LIST, MAVLINK_MESSAGE_INFO_MISSION_COUNT, MAVLINK_MESSAGE_INFO_MISSION_CLEAR_ALL, MAVLINK_MESSAGE_INFO_MISSION_ITEM_REACHED, MAVLINK_MESSAGE_INFO_MISSION_ACK, MAVLINK_MESSAGE_INFO_SET_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN, MAVLINK_MESSAGE_INFO_SET_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_SETPOINT, MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SET_GLOBAL_POSITION_SETPOINT_INT, MAVLINK_MESSAGE_INFO_SAFETY_SET_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SAFETY_ALLOWED_AREA, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_SET_ROLL_PITCH_YAW_SPEED_THRUST, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_MOTORS_SETPOINT, MAVLINK_MESSAGE_INFO_SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST, MAVLINK_MESSAGE_INFO_NAV_CONTROLLER_OUTPUT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_STATE_CORRECTION, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_REQUEST_DATA_STREAM, MAVLINK_MESSAGE_INFO_DATA_STREAM, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MANUAL_CONTROL, MAVLINK_MESSAGE_INFO_RC_CHANNELS_OVERRIDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_VFR_HUD, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_COMMAND_LONG, MAVLINK_MESSAGE_INFO_COMMAND_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET, MAVLINK_MESSAGE_INFO_HIL_STATE, MAVLINK_MESSAGE_INFO_HIL_CONTROLS, MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OPTICAL_FLOW, MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_POSITION_ESTIMATE, MAVLINK_MESSAGE_INFO_VISION_SPEED_ESTIMATE, MAVLINK_MESSAGE_INFO_VICON_POSITION_ESTIMATE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_POSITION, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_VELOCITY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_ATTITUDE, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_WIND, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_AIR_VELOCITY, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_BIAS, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_OBS_QFF, MAVLINK_MESSAGE_INFO_OBS_AIR_TEMP, MAVLINK_MESSAGE_INFO_FILT_ROT_VEL, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_LLC_OUT, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_PM_ELEC, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_SYS_Stat, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_CMD_AIRSPEED_CHNG, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_CMD_AIRSPEED_ACK, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, MAVLINK_MESSAGE_INFO_MEMORY_VECT, MAVLINK_MESSAGE_INFO_DEBUG_VECT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_FLOAT, MAVLINK_MESSAGE_INFO_NAMED_VALUE_INT, MAVLINK_MESSAGE_INFO_STATUSTEXT, MAVLINK_MESSAGE_INFO_DEBUG, {"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}}
#endif
 
#include "../protocol.h"
 
#define MAVLINK_ENABLED_SENSESOAR
 
#include "../common/common.h"
 
// MAVLINK VERSION
 
#ifndef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
#if (MAVLINK_VERSION == 0)
#undef MAVLINK_VERSION
#define MAVLINK_VERSION 2
#endif
 
// ENUM DEFINITIONS
 
 
/** @brief Different flight modes */
#ifndef HAVE_ENUM_SENSESOAR_MODE
#define HAVE_ENUM_SENSESOAR_MODE
enum SENSESOAR_MODE
{
SENSESOAR_MODE_GLIDING=1, /* | */
SENSESOAR_MODE_AUTONOMOUS=2, /* | */
SENSESOAR_MODE_MANUAL=3, /* | */
SENSESOAR_MODE_ENUM_END=4, /* | */
};
#endif
 
// MESSAGE DEFINITIONS
#include "./mavlink_msg_obs_position.h"
#include "./mavlink_msg_obs_velocity.h"
#include "./mavlink_msg_obs_attitude.h"
#include "./mavlink_msg_obs_wind.h"
#include "./mavlink_msg_obs_air_velocity.h"
#include "./mavlink_msg_obs_bias.h"
#include "./mavlink_msg_obs_qff.h"
#include "./mavlink_msg_obs_air_temp.h"
#include "./mavlink_msg_filt_rot_vel.h"
#include "./mavlink_msg_llc_out.h"
#include "./mavlink_msg_pm_elec.h"
#include "./mavlink_msg_sys_stat.h"
#include "./mavlink_msg_cmd_airspeed_chng.h"
#include "./mavlink_msg_cmd_airspeed_ack.h"
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // SENSESOAR_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/testsuite.h
0,0 → 1,676
/** @file
* @brief MAVLink comm protocol testsuite generated from sensesoar.xml
* @see http://qgroundcontrol.org/mavlink/
*/
#ifndef SENSESOAR_TESTSUITE_H
#define SENSESOAR_TESTSUITE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#ifndef MAVLINK_TEST_ALL
#define MAVLINK_TEST_ALL
static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
static void mavlink_test_sensesoar(uint8_t, uint8_t, mavlink_message_t *last_msg);
 
static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_common(system_id, component_id, last_msg);
mavlink_test_sensesoar(system_id, component_id, last_msg);
}
#endif
 
#include "../common/testsuite.h"
 
 
static void mavlink_test_obs_position(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_position_t packet_in = {
963497464,
963497672,
963497880,
};
mavlink_obs_position_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.lon = packet_in.lon;
packet1.lat = packet_in.lat;
packet1.alt = packet_in.alt;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_position_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_position_pack(system_id, component_id, &msg , packet1.lon , packet1.lat , packet1.alt );
mavlink_msg_obs_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_position_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.lon , packet1.lat , packet1.alt );
mavlink_msg_obs_position_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_position_send(MAVLINK_COMM_1 , packet1.lon , packet1.lat , packet1.alt );
mavlink_msg_obs_position_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_velocity(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_velocity_t packet_in = {
{ 17.0, 18.0, 19.0 },
};
mavlink_obs_velocity_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.vel, packet_in.vel, sizeof(float)*3);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_velocity_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_velocity_pack(system_id, component_id, &msg , packet1.vel );
mavlink_msg_obs_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_velocity_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.vel );
mavlink_msg_obs_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_velocity_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_velocity_send(MAVLINK_COMM_1 , packet1.vel );
mavlink_msg_obs_velocity_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_attitude(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_attitude_t packet_in = {
{ 123.0, 124.0, 125.0, 126.0 },
};
mavlink_obs_attitude_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.quat, packet_in.quat, sizeof(double)*4);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_attitude_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_attitude_pack(system_id, component_id, &msg , packet1.quat );
mavlink_msg_obs_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_attitude_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.quat );
mavlink_msg_obs_attitude_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_attitude_send(MAVLINK_COMM_1 , packet1.quat );
mavlink_msg_obs_attitude_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_wind(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_wind_t packet_in = {
{ 17.0, 18.0, 19.0 },
};
mavlink_obs_wind_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.wind, packet_in.wind, sizeof(float)*3);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_wind_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_wind_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_wind_pack(system_id, component_id, &msg , packet1.wind );
mavlink_msg_obs_wind_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_wind_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.wind );
mavlink_msg_obs_wind_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_wind_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_wind_send(MAVLINK_COMM_1 , packet1.wind );
mavlink_msg_obs_wind_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_air_velocity(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_air_velocity_t packet_in = {
17.0,
45.0,
73.0,
};
mavlink_obs_air_velocity_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.magnitude = packet_in.magnitude;
packet1.aoa = packet_in.aoa;
packet1.slip = packet_in.slip;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_velocity_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_air_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_velocity_pack(system_id, component_id, &msg , packet1.magnitude , packet1.aoa , packet1.slip );
mavlink_msg_obs_air_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_velocity_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.magnitude , packet1.aoa , packet1.slip );
mavlink_msg_obs_air_velocity_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_air_velocity_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_velocity_send(MAVLINK_COMM_1 , packet1.magnitude , packet1.aoa , packet1.slip );
mavlink_msg_obs_air_velocity_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_bias(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_bias_t packet_in = {
{ 17.0, 18.0, 19.0 },
{ 101.0, 102.0, 103.0 },
};
mavlink_obs_bias_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.accBias, packet_in.accBias, sizeof(float)*3);
mav_array_memcpy(packet1.gyroBias, packet_in.gyroBias, sizeof(float)*3);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_bias_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_bias_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_bias_pack(system_id, component_id, &msg , packet1.accBias , packet1.gyroBias );
mavlink_msg_obs_bias_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_bias_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.accBias , packet1.gyroBias );
mavlink_msg_obs_bias_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_bias_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_bias_send(MAVLINK_COMM_1 , packet1.accBias , packet1.gyroBias );
mavlink_msg_obs_bias_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_qff(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_qff_t packet_in = {
17.0,
};
mavlink_obs_qff_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.qff = packet_in.qff;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_qff_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_qff_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_qff_pack(system_id, component_id, &msg , packet1.qff );
mavlink_msg_obs_qff_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_qff_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.qff );
mavlink_msg_obs_qff_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_qff_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_qff_send(MAVLINK_COMM_1 , packet1.qff );
mavlink_msg_obs_qff_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_obs_air_temp(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_obs_air_temp_t packet_in = {
17.0,
};
mavlink_obs_air_temp_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.airT = packet_in.airT;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_temp_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_obs_air_temp_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_temp_pack(system_id, component_id, &msg , packet1.airT );
mavlink_msg_obs_air_temp_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_temp_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.airT );
mavlink_msg_obs_air_temp_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_obs_air_temp_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_obs_air_temp_send(MAVLINK_COMM_1 , packet1.airT );
mavlink_msg_obs_air_temp_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_filt_rot_vel(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_filt_rot_vel_t packet_in = {
{ 17.0, 18.0, 19.0 },
};
mavlink_filt_rot_vel_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.rotVel, packet_in.rotVel, sizeof(float)*3);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_filt_rot_vel_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_filt_rot_vel_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_filt_rot_vel_pack(system_id, component_id, &msg , packet1.rotVel );
mavlink_msg_filt_rot_vel_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_filt_rot_vel_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.rotVel );
mavlink_msg_filt_rot_vel_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_filt_rot_vel_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_filt_rot_vel_send(MAVLINK_COMM_1 , packet1.rotVel );
mavlink_msg_filt_rot_vel_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_llc_out(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_llc_out_t packet_in = {
{ 17235, 17236, 17237, 17238 },
{ 17651, 17652 },
};
mavlink_llc_out_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
mav_array_memcpy(packet1.servoOut, packet_in.servoOut, sizeof(int16_t)*4);
mav_array_memcpy(packet1.MotorOut, packet_in.MotorOut, sizeof(int16_t)*2);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_llc_out_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_llc_out_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_llc_out_pack(system_id, component_id, &msg , packet1.servoOut , packet1.MotorOut );
mavlink_msg_llc_out_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_llc_out_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.servoOut , packet1.MotorOut );
mavlink_msg_llc_out_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_llc_out_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_llc_out_send(MAVLINK_COMM_1 , packet1.servoOut , packet1.MotorOut );
mavlink_msg_llc_out_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_pm_elec(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_pm_elec_t packet_in = {
17.0,
45.0,
{ 73.0, 74.0, 75.0 },
};
mavlink_pm_elec_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.PwCons = packet_in.PwCons;
packet1.BatStat = packet_in.BatStat;
mav_array_memcpy(packet1.PwGen, packet_in.PwGen, sizeof(float)*3);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_pm_elec_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_pm_elec_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_pm_elec_pack(system_id, component_id, &msg , packet1.PwCons , packet1.BatStat , packet1.PwGen );
mavlink_msg_pm_elec_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_pm_elec_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.PwCons , packet1.BatStat , packet1.PwGen );
mavlink_msg_pm_elec_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_pm_elec_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_pm_elec_send(MAVLINK_COMM_1 , packet1.PwCons , packet1.BatStat , packet1.PwGen );
mavlink_msg_pm_elec_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_sys_stat(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_sys_stat_t packet_in = {
5,
72,
139,
206,
};
mavlink_sys_stat_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.gps = packet_in.gps;
packet1.act = packet_in.act;
packet1.mod = packet_in.mod;
packet1.commRssi = packet_in.commRssi;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_stat_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_sys_stat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_stat_pack(system_id, component_id, &msg , packet1.gps , packet1.act , packet1.mod , packet1.commRssi );
mavlink_msg_sys_stat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_stat_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.gps , packet1.act , packet1.mod , packet1.commRssi );
mavlink_msg_sys_stat_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_sys_stat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_sys_stat_send(MAVLINK_COMM_1 , packet1.gps , packet1.act , packet1.mod , packet1.commRssi );
mavlink_msg_sys_stat_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_cmd_airspeed_chng(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_cmd_airspeed_chng_t packet_in = {
17.0,
17,
};
mavlink_cmd_airspeed_chng_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.spCmd = packet_in.spCmd;
packet1.target = packet_in.target;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_chng_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_cmd_airspeed_chng_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_chng_pack(system_id, component_id, &msg , packet1.target , packet1.spCmd );
mavlink_msg_cmd_airspeed_chng_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_chng_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target , packet1.spCmd );
mavlink_msg_cmd_airspeed_chng_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_cmd_airspeed_chng_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_chng_send(MAVLINK_COMM_1 , packet1.target , packet1.spCmd );
mavlink_msg_cmd_airspeed_chng_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_cmd_airspeed_ack(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_message_t msg;
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
uint16_t i;
mavlink_cmd_airspeed_ack_t packet_in = {
17.0,
17,
};
mavlink_cmd_airspeed_ack_t packet1, packet2;
memset(&packet1, 0, sizeof(packet1));
packet1.spCmd = packet_in.spCmd;
packet1.ack = packet_in.ack;
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_ack_encode(system_id, component_id, &msg, &packet1);
mavlink_msg_cmd_airspeed_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_ack_pack(system_id, component_id, &msg , packet1.spCmd , packet1.ack );
mavlink_msg_cmd_airspeed_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.spCmd , packet1.ack );
mavlink_msg_cmd_airspeed_ack_decode(&msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
 
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_to_send_buffer(buffer, &msg);
for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
comm_send_ch(MAVLINK_COMM_0, buffer[i]);
}
mavlink_msg_cmd_airspeed_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
memset(&packet2, 0, sizeof(packet2));
mavlink_msg_cmd_airspeed_ack_send(MAVLINK_COMM_1 , packet1.spCmd , packet1.ack );
mavlink_msg_cmd_airspeed_ack_decode(last_msg, &packet2);
MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
}
 
static void mavlink_test_sensesoar(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
{
mavlink_test_obs_position(system_id, component_id, last_msg);
mavlink_test_obs_velocity(system_id, component_id, last_msg);
mavlink_test_obs_attitude(system_id, component_id, last_msg);
mavlink_test_obs_wind(system_id, component_id, last_msg);
mavlink_test_obs_air_velocity(system_id, component_id, last_msg);
mavlink_test_obs_bias(system_id, component_id, last_msg);
mavlink_test_obs_qff(system_id, component_id, last_msg);
mavlink_test_obs_air_temp(system_id, component_id, last_msg);
mavlink_test_filt_rot_vel(system_id, component_id, last_msg);
mavlink_test_llc_out(system_id, component_id, last_msg);
mavlink_test_pm_elec(system_id, component_id, last_msg);
mavlink_test_sys_stat(system_id, component_id, last_msg);
mavlink_test_cmd_airspeed_chng(system_id, component_id, last_msg);
mavlink_test_cmd_airspeed_ack(system_id, component_id, last_msg);
}
 
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // SENSESOAR_TESTSUITE_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/include/mavlink/v1.0/sensesoar/version.h
0,0 → 1,12
/** @file
* @brief MAVLink comm protocol built from sensesoar.xml
* @see http://pixhawk.ethz.ch/software/mavlink
*/
#ifndef MAVLINK_VERSION_H
#define MAVLINK_VERSION_H
 
#define MAVLINK_BUILD_DATE "Fri Apr 20 12:22:51 2012"
#define MAVLINK_WIRE_PROTOCOL_VERSION "1.0"
#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 101
#endif // MAVLINK_VERSION_H
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/ardupilotmega.xml
0,0 → 1,270
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<!-- note that APM specific messages should use the command id
range from 150 to 250, to leave plenty of room for growth
of common.xml
 
If you prototype a message here, then you should consider if it
is general enough to move into common.xml later
-->
 
 
<enums>
<!-- Camera Mount mode Enumeration -->
<enum name="MAV_MOUNT_MODE">
<description>Enumeration of possible mount operation modes</description>
<entry name="MAV_MOUNT_MODE_RETRACT" value="0"><description>Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_NEUTRAL" value="1"><description>Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM.</description></entry>
<entry name="MAV_MOUNT_MODE_MAVLINK_TARGETING" value="2"><description>Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_RC_TARGETING" value="3"><description>Load neutral position and start RC Roll,Pitch,Yaw control with stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_GPS_POINT" value="4"><description>Load neutral position and start to point to Lat,Lon,Alt</description></entry>
</enum>
 
<enum name="MAV_CMD" >
<!-- Camera Controller Mission Commands Enumeration -->
<entry name="MAV_CMD_DO_DIGICAM_CONFIGURE" value="202">
<description>Mission command to configure an on-board camera controller system.</description>
<param index="1">Modes: P, TV, AV, M, Etc</param>
<param index="2">Shutter speed: Divisor number for one second</param>
<param index="3">Aperture: F stop number</param>
<param index="4">ISO number e.g. 80, 100, 200, Etc</param>
<param index="5">Exposure type enumerator</param>
<param index="6">Command Identity</param>
<param index="7">Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)</param>
</entry>
 
<entry name="MAV_CMD_DO_DIGICAM_CONTROL" value="203">
<description>Mission command to control an on-board camera controller system.</description>
<param index="1">Session control e.g. show/hide lens</param>
<param index="2">Zoom's absolute position</param>
<param index="3">Zooming step value to offset zoom from the current position</param>
<param index="4">Focus Locking, Unlocking or Re-locking</param>
<param index="5">Shooting Command</param>
<param index="6">Command Identity</param>
<param index="7">Empty</param>
</entry>
 
<!-- Camera Mount Mission Commands Enumeration -->
<entry name="MAV_CMD_DO_MOUNT_CONFIGURE" value="204">
<description>Mission command to configure a camera or antenna mount</description>
<param index="1">Mount operation mode (see MAV_MOUNT_MODE enum)</param>
<param index="2">stabilize roll? (1 = yes, 0 = no)</param>
<param index="3">stabilize pitch? (1 = yes, 0 = no)</param>
<param index="4">stabilize yaw? (1 = yes, 0 = no)</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
 
<entry name="MAV_CMD_DO_MOUNT_CONTROL" value="205">
<description>Mission command to control a camera or antenna mount</description>
<param index="1">pitch(deg*100) or lat, depending on mount mode.</param>
<param index="2">roll(deg*100) or lon depending on mount mode</param>
<param index="3">yaw(deg*100) or alt (in cm) depending on mount mode</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
</enum>
 
<!-- fenced mode enums -->
<enum name="FENCE_ACTION">
<entry name="FENCE_ACTION_NONE" value="0">
<description>Disable fenced mode</description>
</entry>
<entry name="FENCE_ACTION_GUIDED" value="1">
<description>Switched to guided mode to return point (fence point 0)</description>
</entry>
</enum>
 
<enum name="FENCE_BREACH">
<entry name="FENCE_BREACH_NONE" value="0">
<description>No last fence breach</description>
</entry>
<entry name="FENCE_BREACH_MINALT" value="1">
<description>Breached minimum altitude</description>
</entry>
<entry name="FENCE_BREACH_MAXALT" value="2">
<description>Breached maximum altitude</description>
</entry>
<entry name="FENCE_BREACH_BOUNDARY" value="3">
<description>Breached fence boundary</description>
</entry>
</enum>
</enums>
 
<messages>
<message id="150" name="SENSOR_OFFSETS">
<description>Offsets and calibrations values for hardware
sensors. This makes it easier to debug the calibration process.</description>
<field type="int16_t" name="mag_ofs_x">magnetometer X offset</field>
<field type="int16_t" name="mag_ofs_y">magnetometer Y offset</field>
<field type="int16_t" name="mag_ofs_z">magnetometer Z offset</field>
<field type="float" name="mag_declination">magnetic declination (radians)</field>
<field type="int32_t" name="raw_press">raw pressure from barometer</field>
<field type="int32_t" name="raw_temp">raw temperature from barometer</field>
<field type="float" name="gyro_cal_x">gyro X calibration</field>
<field type="float" name="gyro_cal_y">gyro Y calibration</field>
<field type="float" name="gyro_cal_z">gyro Z calibration</field>
<field type="float" name="accel_cal_x">accel X calibration</field>
<field type="float" name="accel_cal_y">accel Y calibration</field>
<field type="float" name="accel_cal_z">accel Z calibration</field>
</message>
 
<message id="151" name="SET_MAG_OFFSETS">
<description>set the magnetometer offsets</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="int16_t" name="mag_ofs_x">magnetometer X offset</field>
<field type="int16_t" name="mag_ofs_y">magnetometer Y offset</field>
<field type="int16_t" name="mag_ofs_z">magnetometer Z offset</field>
</message>
 
<message id="152" name="MEMINFO">
<description>state of APM memory</description>
<field type="uint16_t" name="brkval">heap top</field>
<field type="uint16_t" name="freemem">free memory</field>
</message>
 
<message id="153" name="AP_ADC">
<description>raw ADC output</description>
<field type="uint16_t" name="adc1">ADC output 1</field>
<field type="uint16_t" name="adc2">ADC output 2</field>
<field type="uint16_t" name="adc3">ADC output 3</field>
<field type="uint16_t" name="adc4">ADC output 4</field>
<field type="uint16_t" name="adc5">ADC output 5</field>
<field type="uint16_t" name="adc6">ADC output 6</field>
</message>
 
<!-- Camera Controller Messages -->
<message name="DIGICAM_CONFIGURE" id="154">
<description>Configure on-board Camera Control System.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="mode" type="uint8_t">Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)</field>
<field name="shutter_speed" type="uint16_t">Divisor number //e.g. 1000 means 1/1000 (0 means ignore)</field>
<field name="aperture" type="uint8_t">F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)</field>
<field name="iso" type="uint8_t">ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)</field>
<field name="exposure_type" type="uint8_t">Exposure type enumeration from 1 to N (0 means ignore)</field>
<field name="command_id" type="uint8_t">Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once</field>
<field name="engine_cut_off" type="uint8_t">Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)</field>
<field name="extra_param" type="uint8_t">Extra parameters enumeration (0 means ignore)</field>
<field name="extra_value" type="float">Correspondent value to given extra_param</field>
</message>
 
<message name="DIGICAM_CONTROL" id="155">
<description>Control on-board Camera Control System to take shots.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="session" type="uint8_t">0: stop, 1: start or keep it up //Session control e.g. show/hide lens</field>
<field name="zoom_pos" type="uint8_t">1 to N //Zoom's absolute position (0 means ignore)</field>
<field name="zoom_step" type="int8_t">-100 to 100 //Zooming step value to offset zoom from the current position</field>
<field name="focus_lock" type="uint8_t">0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus</field>
<field name="shot" type="uint8_t">0: ignore, 1: shot or start filming</field>
<field name="command_id" type="uint8_t">Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once</field>
<field name="extra_param" type="uint8_t">Extra parameters enumeration (0 means ignore)</field>
<field name="extra_value" type="float">Correspondent value to given extra_param</field>
</message>
 
<!-- Camera Mount Messages -->
<message name="MOUNT_CONFIGURE" id="156">
<description>Message to configure a camera mount, directional antenna, etc.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="mount_mode" type="uint8_t">mount operating mode (see MAV_MOUNT_MODE enum)</field>
<field name="stab_roll" type="uint8_t">(1 = yes, 0 = no)</field>
<field name="stab_pitch" type="uint8_t">(1 = yes, 0 = no)</field>
<field name="stab_yaw" type="uint8_t">(1 = yes, 0 = no)</field>
</message>
 
<message name="MOUNT_CONTROL" id="157">
<description>Message to control a camera mount, directional antenna, etc.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="input_a" type="int32_t">pitch(deg*100) or lat, depending on mount mode</field>
<field name="input_b" type="int32_t">roll(deg*100) or lon depending on mount mode</field>
<field name="input_c" type="int32_t">yaw(deg*100) or alt (in cm) depending on mount mode</field>
<field name="save_position" type="uint8_t">if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)</field>
</message>
 
<message name="MOUNT_STATUS" id="158">
<description>Message with some status from APM to GCS about camera or antenna mount</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="pointing_a" type="int32_t">pitch(deg*100) or lat, depending on mount mode</field>
<field name="pointing_b" type="int32_t">roll(deg*100) or lon depending on mount mode</field>
<field name="pointing_c" type="int32_t">yaw(deg*100) or alt (in cm) depending on mount mode</field>
</message>
 
<!-- geo-fence messages -->
<message name="FENCE_POINT" id="160">
<description>A fence point. Used to set a point when from
GCS -> MAV. Also used to return a point from MAV -> GCS</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="idx" type="uint8_t">point index (first point is 1, 0 is for return point)</field>
<field name="count" type="uint8_t">total number of points (for sanity checking)</field>
<field name="lat" type="float">Latitude of point</field>
<field name="lng" type="float">Longitude of point</field>
</message>
 
<message name="FENCE_FETCH_POINT" id="161">
<description>Request a current fence point from MAV</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="idx" type="uint8_t">point index (first point is 1, 0 is for return point)</field>
</message>
 
<message name="FENCE_STATUS" id="162">
<description>Status of geo-fencing. Sent in extended
status stream when fencing enabled</description>
<field name="breach_status" type="uint8_t">0 if currently inside fence, 1 if outside</field>
<field name="breach_count" type="uint16_t">number of fence breaches</field>
<field name="breach_type" type="uint8_t">last breach type (see FENCE_BREACH_* enum)</field>
<field name="breach_time" type="uint32_t">time of last breach in milliseconds since boot</field>
</message>
 
<message name="AHRS" id="163">
<description>Status of DCM attitude estimator</description>
<field type="float" name="omegaIx">X gyro drift estimate rad/s</field>
<field type="float" name="omegaIy">Y gyro drift estimate rad/s</field>
<field type="float" name="omegaIz">Z gyro drift estimate rad/s</field>
<field type="float" name="accel_weight">average accel_weight</field>
<field type="float" name="renorm_val">average renormalisation value</field>
<field type="float" name="error_rp">average error_roll_pitch value</field>
<field type="float" name="error_yaw">average error_yaw value</field>
</message>
 
<message name="SIMSTATE" id="164">
<description>Status of simulation environment, if used</description>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="xacc">X acceleration m/s/s</field>
<field type="float" name="yacc">Y acceleration m/s/s</field>
<field type="float" name="zacc">Z acceleration m/s/s</field>
<field type="float" name="xgyro">Angular speed around X axis rad/s</field>
<field type="float" name="ygyro">Angular speed around Y axis rad/s</field>
<field type="float" name="zgyro">Angular speed around Z axis rad/s</field>
</message>
 
<message name="HWSTATUS" id="165">
<description>Status of key hardware</description>
<field type="uint16_t" name="Vcc">board voltage (mV)</field>
<field type="uint8_t" name="I2Cerr">I2C error count</field>
</message>
 
<message name="RADIO" id="166">
<description>Status generated by radio</description>
<field type="uint8_t" name="rssi">local signal strength</field>
<field type="uint8_t" name="remrssi">remote signal strength</field>
<field type="uint8_t" name="txbuf">how full the tx buffer is as a percentage</field>
<field type="uint8_t" name="noise">background noise level</field>
<field type="uint8_t" name="remnoise">remote background noise level</field>
<field type="uint16_t" name="rxerrors">receive errors</field>
<field type="uint16_t" name="fixed">count of error corrected packets</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/common.xml
0,0 → 1,941
<?xml version='1.0'?>
<mavlink>
<version>2</version>
<enums>
<enum name="MAV_CMD">
<description>Commands to be executed by the MAV. They can be executed on user request,
or as part of a mission script. If the action is used in a mission, the parameter mapping
to the waypoint/mission message is as follows:
Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what
ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data.</description>
<entry value="16" name="MAV_CMD_NAV_WAYPOINT">
<description>Navigate to waypoint.</description>
<param index="1">Hold time in decimal seconds. (ignored by fixed wing, time to stay at waypoint for rotary wing)</param>
<param index="2">Acceptance radius in meters (if the sphere with this radius is hit, the waypoint counts as reached)</param>
<param index="3">0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.</param>
<param index="4">Desired yaw angle at waypoint (rotary wing)</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="17" name="MAV_CMD_NAV_LOITER_UNLIM">
<description>Loiter around this waypoint an unlimited amount of time</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="18" name="MAV_CMD_NAV_LOITER_TURNS">
<description>Loiter around this waypoint for X turns</description>
<param index="1">Turns</param>
<param index="2">Empty</param>
<param index="3">Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="19" name="MAV_CMD_NAV_LOITER_TIME">
<description>Loiter around this waypoint for X seconds</description>
<param index="1">Seconds (decimal)</param>
<param index="2">Empty</param>
<param index="3">Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="20" name="MAV_CMD_NAV_RETURN_TO_LAUNCH">
<description>Return to launch location</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="21" name="MAV_CMD_NAV_LAND">
<description>Land at location</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="22" name="MAV_CMD_NAV_TAKEOFF">
<description>Takeoff from ground / hand</description>
<param index="1">Minimum pitch (if airspeed sensor present), desired pitch without sensor</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Yaw angle (if magnetometer present), ignored without magnetometer</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="80" name="MAV_CMD_NAV_ROI">
<description>Sets the region of interest (ROI) for a sensor set or the
vehicle itself. This can then be used by the vehicles control
system to control the vehicle attitude and the attitude of various
sensors such as cameras.</description>
<param index="1">Region of intereset mode. (see MAV_ROI enum)</param>
<param index="2">Waypoint index/ target ID. (see MAV_ROI enum)</param>
<param index="3">ROI index (allows a vehicle to manage multiple ROI's)</param>
<param index="4">Empty</param>
<param index="5">x the location of the fixed ROI (see MAV_FRAME)</param>
<param index="6">y</param>
<param index="7">z</param>
</entry>
<entry value="81" name="MAV_CMD_NAV_PATHPLANNING">
<description>Control autonomous path planning on the MAV.</description>
<param index="1">0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning</param>
<param index="2">0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid</param>
<param index="3">Empty</param>
<param index="4">Yaw angle at goal, in compass degrees, [0..360]</param>
<param index="5">Latitude/X of goal</param>
<param index="6">Longitude/Y of goal</param>
<param index="7">Altitude/Z of goal</param>
</entry>
<entry value="95" name="MAV_CMD_NAV_LAST">
<description>NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="112" name="MAV_CMD_CONDITION_DELAY">
<description>Delay mission state machine.</description>
<param index="1">Delay in seconds (decimal)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="113" name="MAV_CMD_CONDITION_CHANGE_ALT">
<description>Ascend/descend at rate. Delay mission state machine until desired altitude reached.</description>
<param index="1">Descent / Ascend rate (m/s)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Finish Altitude</param>
</entry>
<entry value="114" name="MAV_CMD_CONDITION_DISTANCE">
<description>Delay mission state machine until within desired distance of next NAV point.</description>
<param index="1">Distance (meters)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="115" name="MAV_CMD_CONDITION_YAW">
<description>Reach a certain target angle.</description>
<param index="1">target angle: [0-360], 0 is north</param>
<param index="2">speed during yaw change:[deg per second]</param>
<param index="3">direction: negative: counter clockwise, positive: clockwise [-1,1]</param>
<param index="4">relative offset or absolute angle: [ 1,0]</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="159" name="MAV_CMD_CONDITION_LAST">
<description>NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="176" name="MAV_CMD_DO_SET_MODE">
<description>Set system mode.</description>
<param index="1">Mode, as defined by ENUM MAV_MODE</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="177" name="MAV_CMD_DO_JUMP">
<description>Jump to the desired command in the mission list. Repeat this action only the specified number of times</description>
<param index="1">Sequence number</param>
<param index="2">Repeat count</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="178" name="MAV_CMD_DO_CHANGE_SPEED">
<description>Change speed and/or throttle set points.</description>
<param index="1">Speed type (0=Airspeed, 1=Ground Speed)</param>
<param index="2">Speed (m/s, -1 indicates no change)</param>
<param index="3">Throttle ( Percent, -1 indicates no change)</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="179" name="MAV_CMD_DO_SET_HOME">
<description>Changes the home location either to the current location or a specified location.</description>
<param index="1">Use current (1=use current location, 0=use specified location)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="180" name="MAV_CMD_DO_SET_PARAMETER">
<description>Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.</description>
<param index="1">Parameter number</param>
<param index="2">Parameter value</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="181" name="MAV_CMD_DO_SET_RELAY">
<description>Set a relay to a condition.</description>
<param index="1">Relay number</param>
<param index="2">Setting (1=on, 0=off, others possible depending on system hardware)</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="182" name="MAV_CMD_DO_REPEAT_RELAY">
<description>Cycle a relay on and off for a desired number of cyles with a desired period.</description>
<param index="1">Relay number</param>
<param index="2">Cycle count</param>
<param index="3">Cycle time (seconds, decimal)</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="183" name="MAV_CMD_DO_SET_SERVO">
<description>Set a servo to a desired PWM value.</description>
<param index="1">Servo number</param>
<param index="2">PWM (microseconds, 1000 to 2000 typical)</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="184" name="MAV_CMD_DO_REPEAT_SERVO">
<description>Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.</description>
<param index="1">Servo number</param>
<param index="2">PWM (microseconds, 1000 to 2000 typical)</param>
<param index="3">Cycle count</param>
<param index="4">Cycle time (seconds)</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="200" name="MAV_CMD_DO_CONTROL_VIDEO">
<description>Control onboard camera capturing.</description>
<param index="1">Camera ID (-1 for all)</param>
<param index="2">Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
<param index="3">Transmission mode: 0: video stream, >0: single images every n seconds (decimal)</param>
<param index="4">Recording: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="201" name="MAV_CMD_DO_SET_ROI">
<description>Sets the region of interest (ROI) for a sensor set or the
vehicle itself. This can then be used by the vehicles control
system to control the vehicle attitude and the attitude of various
devices such as cameras.
</description>
<param index="1">Region of interest mode. (see MAV_ROI enum)</param>
<param index="2">Waypoint index/ target ID. (see MAV_ROI enum)</param>
<param index="3">ROI index (allows a vehicle to manage multiple cameras etc.)</param>
<param index="4">Empty</param>
<param index="5">x the location of the fixed ROI (see MAV_FRAME)</param>
<param index="6">y</param>
<param index="7">z</param>
</entry>
<entry value="240" name="MAV_CMD_DO_LAST">
<description>NOP - This command is only used to mark the upper limit of the DO commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="241" name="MAV_CMD_PREFLIGHT_CALIBRATION">
<description>Trigger calibration. This command will be only accepted if in pre-flight mode.</description>
<param index="1">Gyro calibration: 0: no, 1: yes</param>
<param index="2">Magnetometer calibration: 0: no, 1: yes</param>
<param index="3">Ground pressure: 0: no, 1: yes</param>
<param index="4">Radio calibration: 0: no, 1: yes</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="245" name="MAV_CMD_PREFLIGHT_STORAGE">
<description>Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.</description>
<param index="1">Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM</param>
<param index="2">Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM</param>
<param index="3">Reserved</param>
<param index="4">Reserved</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
</enum>
<enum name="MAV_DATA_STREAM">
<description>Data stream IDs. A data stream is not a fixed set of messages, but rather a
recommendation to the autopilot software. Individual autopilots may or may not obey
the recommended messages.
</description>
<entry value="0" name="MAV_DATA_STREAM_ALL">
<description>Enable all data streams</description>
</entry>
<entry value="1" name="MAV_DATA_STREAM_RAW_SENSORS">
<description>Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.</description>
</entry>
<entry value="2" name="MAV_DATA_STREAM_EXTENDED_STATUS">
<description>Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS</description>
</entry>
<entry value="3" name="MAV_DATA_STREAM_RC_CHANNELS">
<description>Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW</description>
</entry>
<entry value="4" name="MAV_DATA_STREAM_RAW_CONTROLLER">
<description>Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.</description>
</entry>
<entry value="6" name="MAV_DATA_STREAM_POSITION">
<description>Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.</description>
</entry>
<entry value="10" name="MAV_DATA_STREAM_EXTRA1">
<description>Dependent on the autopilot</description>
</entry>
<entry value="11" name="MAV_DATA_STREAM_EXTRA2">
<description>Dependent on the autopilot</description>
</entry>
<entry value="12" name="MAV_DATA_STREAM_EXTRA3">
<description>Dependent on the autopilot</description>
</entry>
</enum>
<enum name="MAV_ROI">
<description> The ROI (region of interest) for the vehicle. This can be
be used by the vehicle for camera/vehicle attitude alignment (see
MAV_CMD_NAV_ROI).
</description>
<entry value="0" name="MAV_ROI_NONE">
<description>No region of interest.</description>
</entry>
<entry value="1" name="MAV_ROI_WPNEXT">
<description>Point toward next waypoint.</description>
</entry>
<entry value="2" name="MAV_ROI_WPINDEX">
<description>Point toward given waypoint.</description>
</entry>
<entry value="3" name="MAV_ROI_LOCATION">
<description>Point toward fixed location.</description>
</entry>
<entry value="4" name="MAV_ROI_TARGET">
<description>Point toward of given id.</description>
</entry>
</enum>
</enums>
<messages>
<message id="0" name="HEARTBEAT">
<description>The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot).</description>
<field type="uint8_t" name="type">Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)</field>
<field type="uint8_t" name="autopilot">Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM</field>
<field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version</field>
</message>
<message id="1" name="BOOT">
<description>The boot message indicates that a system is starting. The onboard software version allows to keep track of onboard soft/firmware revisions.</description>
<field type="uint32_t" name="version">The onboard software version</field>
</message>
<message id="2" name="SYSTEM_TIME">
<description>The system time is the time of the master clock, typically the computer clock of the main onboard computer.</description>
<field type="uint64_t" name="time_usec">Timestamp of the master clock in microseconds since UNIX epoch.</field>
</message>
<message id="3" name="PING">
<description>A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections.</description>
<field type="uint32_t" name="seq">PING sequence</field>
<field type="uint8_t" name="target_system">0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system</field>
<field type="uint8_t" name="target_component">0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system</field>
<field type="uint64_t" name="time">Unix timestamp in microseconds</field>
</message>
<message id="4" name="SYSTEM_TIME_UTC">
<description>UTC date and time from GPS module</description>
<field type="uint32_t" name="utc_date">GPS UTC date ddmmyy</field>
<field type="uint32_t" name="utc_time">GPS UTC time hhmmss</field>
</message>
<message id="5" name="CHANGE_OPERATOR_CONTROL">
<description>Request to control this MAV</description>
<field type="uint8_t" name="target_system">System the GCS requests control for</field>
<field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
<field type="uint8_t" name="version">0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.</field>
<field type="char[25]" name="passkey">Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"</field>
</message>
<message id="6" name="CHANGE_OPERATOR_CONTROL_ACK">
<description>Accept / deny control of this MAV</description>
<field type="uint8_t" name="gcs_system_id">ID of the GCS this message </field>
<field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
<field type="uint8_t" name="ack">0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control</field>
</message>
<message id="7" name="AUTH_KEY">
<description>Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety.</description>
<field type="char[32]" name="key">key</field>
</message>
<message id="9" name="ACTION_ACK">
<description>This message acknowledges an action. IMPORTANT: The acknowledgement can be also negative, e.g. the MAV rejects a reset message because it is in-flight. The action ids are defined in ENUM MAV_ACTION in mavlink/include/mavlink_types.h</description>
<field type="uint8_t" name="action">The action id</field>
<field type="uint8_t" name="result">0: Action DENIED, 1: Action executed</field>
</message>
<message id="10" name="ACTION">
<description>An action message allows to execute a certain onboard action. These include liftoff, land, storing parameters too EEPROM, shutddown, etc. The action ids are defined in ENUM MAV_ACTION in mavlink/include/mavlink_types.h</description>
<field type="uint8_t" name="target">The system executing the action</field>
<field type="uint8_t" name="target_component">The component executing the action</field>
<field type="uint8_t" name="action">The action id</field>
</message>
<message id="11" name="SET_MODE">
<description>Set the system mode, as defined by enum MAV_MODE in mavlink/include/mavlink_types.h. There is no target component id as the mode is by definition for the overall aircraft, not only for one component.</description>
<field type="uint8_t" name="target">The system setting the mode</field>
<field type="uint8_t" name="mode">The new mode</field>
</message>
<message id="12" name="SET_NAV_MODE">
<description>Set the system navigation mode, as defined by enum MAV_NAV_MODE in mavlink/include/mavlink_types.h. The navigation mode applies to the whole aircraft and thus all components.</description>
<field type="uint8_t" name="target">The system setting the mode</field>
<field type="uint8_t" name="nav_mode">The new navigation mode</field>
</message>
<message id="20" name="PARAM_REQUEST_READ">
<description>Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="array[15]" name="param_id">Onboard parameter id</field>
<field type="int16_t" name="param_index">Parameter index. Send -1 to use the param ID field as identifier</field>
</message>
<message id="21" name="PARAM_REQUEST_LIST">
<description>Request all parameters of this component. After his request, all parameters are emitted.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="22" name="PARAM_VALUE">
<description>Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout.</description>
<field type="array[15]" name="param_id">Onboard parameter id</field>
<field type="float" name="param_value">Onboard parameter value</field>
<field type="uint16_t" name="param_count">Total number of onboard parameters</field>
<field type="uint16_t" name="param_index">Index of this onboard parameter</field>
</message>
<message id="23" name="PARAM_SET">
<description>Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="array[15]" name="param_id">Onboard parameter id</field>
<field type="float" name="param_value">Onboard parameter value</field>
</message>
<message id="25" name="GPS_RAW_INT">
<description>The global position, as returned by the Global Positioning System (GPS). This is
NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame)</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field>
<field type="int32_t" name="lat">Latitude in 1E7 degrees</field>
<field type="int32_t" name="lon">Longitude in 1E7 degrees</field>
<field type="int32_t" name="alt">Altitude in 1E3 meters (millimeters)</field>
<field type="float" name="eph">GPS HDOP</field>
<field type="float" name="epv">GPS VDOP</field>
<field type="float" name="v">GPS ground speed (m/s)</field>
<field type="float" name="hdg">Compass heading in degrees, 0..360 degrees</field>
</message>
<message id="26" name="SCALED_IMU">
<description>The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="int16_t" name="xacc">X acceleration (mg)</field>
<field type="int16_t" name="yacc">Y acceleration (mg)</field>
<field type="int16_t" name="zacc">Z acceleration (mg)</field>
<field type="int16_t" name="xgyro">Angular speed around X axis (millirad /sec)</field>
<field type="int16_t" name="ygyro">Angular speed around Y axis (millirad /sec)</field>
<field type="int16_t" name="zgyro">Angular speed around Z axis (millirad /sec)</field>
<field type="int16_t" name="xmag">X Magnetic field (milli tesla)</field>
<field type="int16_t" name="ymag">Y Magnetic field (milli tesla)</field>
<field type="int16_t" name="zmag">Z Magnetic field (milli tesla)</field>
</message>
<message id="27" name="GPS_STATUS">
<description>The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites.</description>
<field type="uint8_t" name="satellites_visible">Number of satellites visible</field>
<field type="array[20]" name="satellite_prn">Global satellite ID</field>
<field type="array[20]" name="satellite_used">0: Satellite not used, 1: used for localization</field>
<field type="array[20]" name="satellite_elevation">Elevation (0: right on top of receiver, 90: on the horizon) of satellite</field>
<field type="array[20]" name="satellite_azimuth">Direction of satellite, 0: 0 deg, 255: 360 deg.</field>
<field type="array[20]" name="satellite_snr">Signal to noise ratio of satellite</field>
</message>
<message id="28" name="RAW_IMU">
<description>The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging.</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="int16_t" name="xacc">X acceleration (raw)</field>
<field type="int16_t" name="yacc">Y acceleration (raw)</field>
<field type="int16_t" name="zacc">Z acceleration (raw)</field>
<field type="int16_t" name="xgyro">Angular speed around X axis (raw)</field>
<field type="int16_t" name="ygyro">Angular speed around Y axis (raw)</field>
<field type="int16_t" name="zgyro">Angular speed around Z axis (raw)</field>
<field type="int16_t" name="xmag">X Magnetic field (raw)</field>
<field type="int16_t" name="ymag">Y Magnetic field (raw)</field>
<field type="int16_t" name="zmag">Z Magnetic field (raw)</field>
</message>
<message id="29" name="RAW_PRESSURE">
<description>The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values.</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="int16_t" name="press_abs">Absolute pressure (raw)</field>
<field type="int16_t" name="press_diff1">Differential pressure 1 (raw)</field>
<field type="int16_t" name="press_diff2">Differential pressure 2 (raw)</field>
<field type="int16_t" name="temperature">Raw Temperature measurement (raw)</field>
</message>
<message id="38" name="SCALED_PRESSURE">
<description>The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field.</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="press_abs">Absolute pressure (hectopascal)</field>
<field type="float" name="press_diff">Differential pressure 1 (hectopascal)</field>
<field type="int16_t" name="temperature">Temperature measurement (0.01 degrees celsius)</field>
</message>
<message id="30" name="ATTITUDE">
<description>The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right).</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="rollspeed">Roll angular speed (rad/s)</field>
<field type="float" name="pitchspeed">Pitch angular speed (rad/s)</field>
<field type="float" name="yawspeed">Yaw angular speed (rad/s)</field>
</message>
<message id="31" name="LOCAL_POSITION">
<description>The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame)</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="x">X Position</field>
<field type="float" name="y">Y Position</field>
<field type="float" name="z">Z Position</field>
<field type="float" name="vx">X Speed</field>
<field type="float" name="vy">Y Speed</field>
<field type="float" name="vz">Z Speed</field>
</message>
<message id="33" name="GLOBAL_POSITION">
<description>The filtered global position (e.g. fused GPS and accelerometers). Coordinate frame is right-handed, Z-axis up (GPS frame)</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since unix epoch)</field>
<field type="float" name="lat">Latitude, in degrees</field>
<field type="float" name="lon">Longitude, in degrees</field>
<field type="float" name="alt">Absolute altitude, in meters</field>
<field type="float" name="vx">X Speed (in Latitude direction, positive: going north)</field>
<field type="float" name="vy">Y Speed (in Longitude direction, positive: going east)</field>
<field type="float" name="vz">Z Speed (in Altitude direction, positive: going up)</field>
</message>
<message id="32" name="GPS_RAW">
<description>The global position, as returned by the Global Positioning System (GPS). This is
NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame)</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field>
<field type="float" name="lat">Latitude in degrees</field>
<field type="float" name="lon">Longitude in degrees</field>
<field type="float" name="alt">Altitude in meters</field>
<field type="float" name="eph">GPS HDOP</field>
<field type="float" name="epv">GPS VDOP</field>
<field type="float" name="v">GPS ground speed</field>
<field type="float" name="hdg">Compass heading in degrees, 0..360 degrees</field>
</message>
<message id="34" name="SYS_STATUS">
<description>The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout.</description>
<field type="uint8_t" name="mode">System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h</field>
<field type="uint8_t" name="nav_mode">Navigation mode, see MAV_NAV_MODE ENUM</field>
<field type="uint8_t" name="status">System status flag, see MAV_STATUS ENUM</field>
<field type="uint16_t" name="load">Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000</field>
<field type="uint16_t" name="vbat">Battery voltage, in millivolts (1 = 1 millivolt)</field>
<field type="uint16_t" name="battery_remaining">Remaining battery energy: (0%: 0, 100%: 1000)</field>
<field type="uint16_t" name="packet_drop">Dropped packets (packets that were corrupted on reception on the MAV)</field>
</message>
<message id="35" name="RC_CHANNELS_RAW">
<description>The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
<field type="uint16_t" name="chan1_raw">RC channel 1 value, in microseconds</field>
<field type="uint16_t" name="chan2_raw">RC channel 2 value, in microseconds</field>
<field type="uint16_t" name="chan3_raw">RC channel 3 value, in microseconds</field>
<field type="uint16_t" name="chan4_raw">RC channel 4 value, in microseconds</field>
<field type="uint16_t" name="chan5_raw">RC channel 5 value, in microseconds</field>
<field type="uint16_t" name="chan6_raw">RC channel 6 value, in microseconds</field>
<field type="uint16_t" name="chan7_raw">RC channel 7 value, in microseconds</field>
<field type="uint16_t" name="chan8_raw">RC channel 8 value, in microseconds</field>
<field type="uint8_t" name="rssi">Receive signal strength indicator, 0: 0%, 255: 100%</field>
</message>
<message id="36" name="RC_CHANNELS_SCALED">
<description>The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000</description>
<field type="int16_t" name="chan1_scaled">RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan2_scaled">RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan3_scaled">RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan4_scaled">RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan5_scaled">RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan6_scaled">RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan7_scaled">RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan8_scaled">RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="uint8_t" name="rssi">Receive signal strength indicator, 0: 0%, 255: 100%</field>
</message>
<message id="37" name="SERVO_OUTPUT_RAW">
<description>The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%.</description>
<field type="uint16_t" name="servo1_raw">Servo output 1 value, in microseconds</field>
<field type="uint16_t" name="servo2_raw">Servo output 2 value, in microseconds</field>
<field type="uint16_t" name="servo3_raw">Servo output 3 value, in microseconds</field>
<field type="uint16_t" name="servo4_raw">Servo output 4 value, in microseconds</field>
<field type="uint16_t" name="servo5_raw">Servo output 5 value, in microseconds</field>
<field type="uint16_t" name="servo6_raw">Servo output 6 value, in microseconds</field>
<field type="uint16_t" name="servo7_raw">Servo output 7 value, in microseconds</field>
<field type="uint16_t" name="servo8_raw">Servo output 8 value, in microseconds</field>
</message>
<message id="39" name="WAYPOINT">
<description>Message encoding a waypoint. This message is emitted to announce
the presence of a waypoint and to set a waypoint on the system. The waypoint can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed, global frame is Z-up, right handed</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
<field type="uint8_t" name="frame">The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h</field>
<field type="uint8_t" name="command">The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs</field>
<field type="uint8_t" name="current">false:0, true:1</field>
<field type="uint8_t" name="autocontinue">autocontinue to next wp</field>
<field type="float" name="param1">PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters</field>
<field type="float" name="param2">PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds</field>
<field type="float" name="param3">PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.</field>
<field type="float" name="param4">PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH</field>
<field type="float" name="x">PARAM5 / local: x position, global: latitude</field>
<field type="float" name="y">PARAM6 / y position: global: longitude</field>
<field type="float" name="z">PARAM7 / z position: global: altitude</field>
</message>
<message id="40" name="WAYPOINT_REQUEST">
<description>Request the information of the waypoint with the sequence number seq. The response of the system to this message should be a WAYPOINT message.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="41" name="WAYPOINT_SET_CURRENT">
<description>Set the waypoint with sequence number seq as current waypoint. This means that the MAV will continue to this waypoint on the shortest path (not following the waypoints in-between).</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="42" name="WAYPOINT_CURRENT">
<description>Message that announces the sequence number of the current active waypoint. The MAV will fly towards this waypoint.</description>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="43" name="WAYPOINT_REQUEST_LIST">
<description>Request the overall list of waypoints from the system/component.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="44" name="WAYPOINT_COUNT">
<description>This message is emitted as response to WAYPOINT_REQUEST_LIST by the MAV. The GCS can then request the individual waypoints based on the knowledge of the total number of waypoints.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="count">Number of Waypoints in the Sequence</field>
</message>
<message id="45" name="WAYPOINT_CLEAR_ALL">
<description>Delete all waypoints at once.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="46" name="WAYPOINT_REACHED">
<description>A certain waypoint has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next waypoint.</description>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="47" name="WAYPOINT_ACK">
<description>Ack message during waypoint handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero).</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint8_t" name="type">0: OK, 1: Error</field>
</message>
<message id="48" name="GPS_SET_GLOBAL_ORIGIN">
<description>As local waypoints exist, the global waypoint reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="int32_t" name="latitude">global position * 1E7</field>
<field type="int32_t" name="longitude">global position * 1E7</field>
<field type="int32_t" name="altitude">global position * 1000</field>
</message>
<message id="49" name="GPS_LOCAL_ORIGIN_SET">
<description>Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position</description>
<field type="int32_t" name="latitude">Latitude (WGS84), expressed as * 1E7</field>
<field type="int32_t" name="longitude">Longitude (WGS84), expressed as * 1E7</field>
<field type="int32_t" name="altitude">Altitude(WGS84), expressed as * 1000</field>
</message>
<message id="50" name="LOCAL_POSITION_SETPOINT_SET">
<description>Set the setpoint for a local position controller. This is the position in local coordinates the MAV should fly to. This message is sent by the path/waypoint planner to the onboard position controller. As some MAVs have a degree of freedom in yaw (e.g. all helicopters/quadrotors), the desired yaw angle is part of the message.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">Desired yaw angle</field>
</message>
<message id="51" name="LOCAL_POSITION_SETPOINT">
<description>Transmit the current local setpoint of the controller to other MAVs (collision avoidance) and to the GCS.</description>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">Desired yaw angle</field>
</message>
<message id="52" name="CONTROL_STATUS">
<field type="uint8_t" name="position_fix">Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix </field>
<field type="uint8_t" name="vision_fix">Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix </field>
<field type="uint8_t" name="gps_fix">GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix </field>
<field type="uint8_t" name="ahrs_health">Attitude estimation health: 0: poor, 255: excellent</field>
<field type="uint8_t" name="control_att">0: Attitude control disabled, 1: enabled</field>
<field type="uint8_t" name="control_pos_xy">0: X, Y position control disabled, 1: enabled</field>
<field type="uint8_t" name="control_pos_z">0: Z position control disabled, 1: enabled</field>
<field type="uint8_t" name="control_pos_yaw">0: Yaw angle control disabled, 1: enabled</field>
</message>
<message id="53" name="SAFETY_SET_ALLOWED_AREA">
<description>Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/waypoints to accept and which to reject. Safety areas are often enforced by national or competition regulations.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint8_t" name="frame">Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
<field type="float" name="p1x">x position 1 / Latitude 1</field>
<field type="float" name="p1y">y position 1 / Longitude 1</field>
<field type="float" name="p1z">z position 1 / Altitude 1</field>
<field type="float" name="p2x">x position 2 / Latitude 2</field>
<field type="float" name="p2y">y position 2 / Longitude 2</field>
<field type="float" name="p2z">z position 2 / Altitude 2</field>
</message>
<message id="54" name="SAFETY_ALLOWED_AREA">
<description>Read out the safety zone the MAV currently assumes.</description>
<field type="uint8_t" name="frame">Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
<field type="float" name="p1x">x position 1 / Latitude 1</field>
<field type="float" name="p1y">y position 1 / Longitude 1</field>
<field type="float" name="p1z">z position 1 / Altitude 1</field>
<field type="float" name="p2x">x position 2 / Latitude 2</field>
<field type="float" name="p2y">y position 2 / Longitude 2</field>
<field type="float" name="p2z">z position 2 / Altitude 2</field>
</message>
<message id="55" name="SET_ROLL_PITCH_YAW_THRUST">
<description>Set roll, pitch and yaw.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="roll">Desired roll angle in radians</field>
<field type="float" name="pitch">Desired pitch angle in radians</field>
<field type="float" name="yaw">Desired yaw angle in radians</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="56" name="SET_ROLL_PITCH_YAW_SPEED_THRUST">
<description>Set roll, pitch and yaw.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="roll_speed">Desired roll angular speed in rad/s</field>
<field type="float" name="pitch_speed">Desired pitch angular speed in rad/s</field>
<field type="float" name="yaw_speed">Desired yaw angular speed in rad/s</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="57" name="ROLL_PITCH_YAW_THRUST_SETPOINT">
<description>Setpoint in roll, pitch, yaw currently active on the system.</description>
<field type="uint64_t" name="time_us">Timestamp in micro seconds since unix epoch</field>
<field type="float" name="roll">Desired roll angle in radians</field>
<field type="float" name="pitch">Desired pitch angle in radians</field>
<field type="float" name="yaw">Desired yaw angle in radians</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="58" name="ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT">
<description>Setpoint in rollspeed, pitchspeed, yawspeed currently active on the system.</description>
<field type="uint64_t" name="time_us">Timestamp in micro seconds since unix epoch</field>
<field type="float" name="roll_speed">Desired roll angular speed in rad/s</field>
<field type="float" name="pitch_speed">Desired pitch angular speed in rad/s</field>
<field type="float" name="yaw_speed">Desired yaw angular speed in rad/s</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="62" name="NAV_CONTROLLER_OUTPUT">
<description>Outputs of the APM navigation controller. The primary use of this message is to check the response and signs
of the controller before actual flight and to assist with tuning controller parameters </description>
<field type="float" name="nav_roll">Current desired roll in degrees</field>
<field type="float" name="nav_pitch">Current desired pitch in degrees</field>
<field type="int16_t" name="nav_bearing">Current desired heading in degrees</field>
<field type="int16_t" name="target_bearing">Bearing to current waypoint/target in degrees</field>
<field type="uint16_t" name="wp_dist">Distance to active waypoint in meters</field>
<field type="float" name="alt_error">Current altitude error in meters</field>
<field type="float" name="aspd_error">Current airspeed error in meters/second</field>
<field type="float" name="xtrack_error">Current crosstrack error on x-y plane in meters</field>
</message>
<message id="63" name="POSITION_TARGET">
<description>The goal position of the system. This position is the input to any navigation or path planning algorithm and does NOT represent the current controller setpoint.</description>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">yaw orientation in radians, 0 = NORTH</field>
</message>
<message id="64" name="STATE_CORRECTION">
<description>Corrects the systems state by adding an error correction term to the position and velocity, and by rotating the attitude by a correction angle.</description>
<field type="float" name="xErr">x position error</field>
<field type="float" name="yErr">y position error</field>
<field type="float" name="zErr">z position error</field>
<field type="float" name="rollErr">roll error (radians)</field>
<field type="float" name="pitchErr">pitch error (radians)</field>
<field type="float" name="yawErr">yaw error (radians)</field>
<field type="float" name="vxErr">x velocity</field>
<field type="float" name="vyErr">y velocity</field>
<field type="float" name="vzErr">z velocity</field>
</message>
<message id="65" name="SET_ALTITUDE">
<field type="uint8_t" name="target">The system setting the altitude</field>
<field type="uint32_t" name="mode">The new altitude in meters</field>
</message>
<message id="66" name="REQUEST_DATA_STREAM">
<field type="uint8_t" name="target_system">The target requested to send the message stream.</field>
<field type="uint8_t" name="target_component">The target requested to send the message stream.</field>
<field type="uint8_t" name="req_stream_id">The ID of the requested message type</field>
<field type="uint16_t" name="req_message_rate">Update rate in Hertz</field>
<field type="uint8_t" name="start_stop">1 to start sending, 0 to stop sending.</field>
</message>
<message id="67" name="HIL_STATE">
<description>This packet is useful for high throughput
applications such as hardware in the loop simulations.
</description>
<field type="uint64_t" name="usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="rollspeed">Roll angular speed (rad/s)</field>
<field type="float" name="pitchspeed">Pitch angular speed (rad/s)</field>
<field type="float" name="yawspeed">Yaw angular speed (rad/s)</field>
<field type="int32_t" name="lat">Latitude, expressed as * 1E7</field>
<field type="int32_t" name="lon">Longitude, expressed as * 1E7</field>
<field type="int32_t" name="alt">Altitude in meters, expressed as * 1000 (millimeters)</field>
<field type="int16_t" name="vx">Ground X Speed (Latitude), expressed as m/s * 100</field>
<field type="int16_t" name="vy">Ground Y Speed (Longitude), expressed as m/s * 100</field>
<field type="int16_t" name="vz">Ground Z Speed (Altitude), expressed as m/s * 100</field>
<field type="int16_t" name="xacc">X acceleration (mg)</field>
<field type="int16_t" name="yacc">Y acceleration (mg)</field>
<field type="int16_t" name="zacc">Z acceleration (mg)</field>
</message>
<message id="68" name="HIL_CONTROLS">
<description>Hardware in the loop control outputs</description>
<field type="uint64_t" name="time_us">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="roll_ailerons">Control output -3 .. 1</field>
<field type="float" name="pitch_elevator">Control output -1 .. 1</field>
<field type="float" name="yaw_rudder">Control output -1 .. 1</field>
<field type="float" name="throttle">Throttle 0 .. 1</field>
<field type="uint8_t" name="mode">System mode (MAV_MODE)</field>
<field type="uint8_t" name="nav_mode">Navigation mode (MAV_NAV_MODE)</field>
</message>
<message id="69" name="MANUAL_CONTROL">
<field type="uint8_t" name="target">The system to be controlled</field>
<field type="float" name="roll">roll</field>
<field type="float" name="pitch">pitch</field>
<field type="float" name="yaw">yaw</field>
<field type="float" name="thrust">thrust</field>
<field type="uint8_t" name="roll_manual">roll control enabled auto:0, manual:1</field>
<field type="uint8_t" name="pitch_manual">pitch auto:0, manual:1</field>
<field type="uint8_t" name="yaw_manual">yaw auto:0, manual:1</field>
<field type="uint8_t" name="thrust_manual">thrust auto:0, manual:1</field>
</message>
<message id="70" name="RC_CHANNELS_OVERRIDE">
<description>The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of -1 means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="chan1_raw">RC channel 1 value, in microseconds</field>
<field type="uint16_t" name="chan2_raw">RC channel 2 value, in microseconds</field>
<field type="uint16_t" name="chan3_raw">RC channel 3 value, in microseconds</field>
<field type="uint16_t" name="chan4_raw">RC channel 4 value, in microseconds</field>
<field type="uint16_t" name="chan5_raw">RC channel 5 value, in microseconds</field>
<field type="uint16_t" name="chan6_raw">RC channel 6 value, in microseconds</field>
<field type="uint16_t" name="chan7_raw">RC channel 7 value, in microseconds</field>
<field type="uint16_t" name="chan8_raw">RC channel 8 value, in microseconds</field>
</message>
<message id="73" name="GLOBAL_POSITION_INT">
<description>The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up)</description>
<field type="int32_t" name="lat">Latitude, expressed as * 1E7</field>
<field type="int32_t" name="lon">Longitude, expressed as * 1E7</field>
<field type="int32_t" name="alt">Altitude in meters, expressed as * 1000 (millimeters)</field>
<field type="int16_t" name="vx">Ground X Speed (Latitude), expressed as m/s * 100</field>
<field type="int16_t" name="vy">Ground Y Speed (Longitude), expressed as m/s * 100</field>
<field type="int16_t" name="vz">Ground Z Speed (Altitude), expressed as m/s * 100</field>
</message>
<message id="74" name="VFR_HUD">
<description>Metrics typically displayed on a HUD for fixed wing aircraft</description>
<field type="float" name="airspeed">Current airspeed in m/s</field>
<field type="float" name="groundspeed">Current ground speed in m/s</field>
<field type="int16_t" name="heading">Current heading in degrees, in compass units (0..360, 0=north)</field>
<field type="uint16_t" name="throttle">Current throttle setting in integer percent, 0 to 100</field>
<field type="float" name="alt">Current altitude (MSL), in meters</field>
<field type="float" name="climb">Current climb rate in meters/second</field>
</message>
<message id="75" name="COMMAND">
<description>Send a command with up to four parameters to the MAV</description>
<field type="uint8_t" name="target_system">System which should execute the command</field>
<field type="uint8_t" name="target_component">Component which should execute the command, 0 for all components</field>
<field type="uint8_t" name="command">Command ID, as defined by MAV_CMD enum.</field>
<field type="uint8_t" name="confirmation">0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)</field>
<field type="float" name="param1">Parameter 1, as defined by MAV_CMD enum.</field>
<field type="float" name="param2">Parameter 2, as defined by MAV_CMD enum.</field>
<field type="float" name="param3">Parameter 3, as defined by MAV_CMD enum.</field>
<field type="float" name="param4">Parameter 4, as defined by MAV_CMD enum.</field>
</message>
<message id="76" name="COMMAND_ACK">
<description>Report status of a command. Includes feedback wether the command was executed</description>
<field type="float" name="command">Current airspeed in m/s</field>
<field type="float" name="result">1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION</field>
</message>
<message id="100" name="OPTICAL_FLOW">
<description>Optical flow from a flow sensor (e.g. optical mouse sensor)</description>
<field type="uint64_t" name="time">Timestamp (UNIX)</field>
<field type="uint8_t" name="sensor_id">Sensor ID</field>
<field type="int16_t" name="flow_x">Flow in pixels in x-sensor direction</field>
<field type="int16_t" name="flow_y">Flow in pixels in y-sensor direction</field>
<field type="uint8_t" name="quality">Optical flow quality / confidence. 0: bad, 255: maximum quality</field>
<field type="float" name="ground_distance">Ground distance in meters</field>
</message>
<message id="140" name="OBJECT_DETECTION_EVENT">
<description>Object has been detected</description>
<field type="uint32_t" name="time">Timestamp in milliseconds since system boot</field>
<field type="uint16_t" name="object_id">Object ID</field>
<field type="uint8_t" name="type">Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal</field>
<field type="char[20]" name="name">Name of the object as defined by the detector</field>
<field type="uint8_t" name="quality">Detection quality / confidence. 0: bad, 255: maximum confidence</field>
<field type="float" name="bearing">Angle of the object with respect to the body frame in NED coordinates in radians. 0: front</field>
<field type="float" name="distance">Ground distance in meters</field>
</message>
<!-- MESSAGE IDs 80 - 250: Space for custom messages in individual projectname_messages.xml files -->
<message id="251" name="DEBUG_VECT">
<field type="char[10]" name="name">Name</field>
<field type="uint64_t" name="usec">Timestamp</field>
<field type="float" name="x">x</field>
<field type="float" name="y">y</field>
<field type="float" name="z">z</field>
</message>
<message id="252" name="NAMED_VALUE_FLOAT">
<description>Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
<field type="char[10]" name="name">Name of the debug variable</field>
<field type="float" name="value">Floating point value</field>
</message>
<message id="253" name="NAMED_VALUE_INT">
<description>Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
<field type="char[10]" name="name">Name of the debug variable</field>
<field type="int32_t" name="value">Signed integer value</field>
</message>
<message id="254" name="STATUSTEXT">
<description>Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz).</description>
<field type="uint8_t" name="severity">Severity of status, 0 = info message, 255 = critical fault</field>
<field type="int8_t[50]" name="text">Status text message, without null termination character</field>
</message>
<message id="255" name="DEBUG">
<description>Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N.</description>
<field type="uint8_t" name="ind">index of debug variable</field>
<field type="float" name="value">DEBUG value</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/minimal.xml
0,0 → 1,13
<?xml version='1.0'?>
<mavlink>
<version>2</version>
<enums/>
<messages>
<message id="0" name="HEARTBEAT">
<description>The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot).</description>
<field type="uint8_t" name="type">Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)</field>
<field type="uint8_t" name="autopilot">Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM</field>
<field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/pixhawk.xml
0,0 → 1,227
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<enums>
<enum name="DATA_TYPES">
<description>Content Types for data transmission handshake</description>
<entry value="1" name="DATA_TYPE_JPEG_IMAGE"/>
<entry value="2" name="DATA_TYPE_RAW_IMAGE"/>
<entry value="3" name="DATA_TYPE_KINECT"/>
</enum>
</enums>
<messages>
<message id="151" name="SET_CAM_SHUTTER">
<field type="uint8_t" name="cam_no">Camera id</field>
<field type="uint8_t" name="cam_mode">Camera mode: 0 = auto, 1 = manual</field>
<field type="uint8_t" name="trigger_pin">Trigger pin, 0-3 for PtGrey FireFly</field>
<field type="uint16_t" name="interval">Shutter interval, in microseconds</field>
<field type="uint16_t" name="exposure">Exposure time, in microseconds</field>
<field type="float" name="gain">Camera gain</field>
</message>
<message id="152" name="IMAGE_TRIGGERED">
<field type="uint64_t" name="timestamp">Timestamp</field>
<field type="uint32_t" name="seq">IMU seq</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
<field type="float" name="local_z">Local frame Z coordinate (height over ground)</field>
<field type="float" name="lat">GPS X coordinate</field>
<field type="float" name="lon">GPS Y coordinate</field>
<field type="float" name="alt">Global frame altitude</field>
<field type="float" name="ground_x">Ground truth X</field>
<field type="float" name="ground_y">Ground truth Y</field>
<field type="float" name="ground_z">Ground truth Z</field>
</message>
<message id="153" name="IMAGE_TRIGGER_CONTROL">
<field type="uint8_t" name="enable">0 to disable, 1 to enable</field>
</message>
<message id="154" name="IMAGE_AVAILABLE">
<field type="uint64_t" name="cam_id">Camera id</field>
<field type="uint8_t" name="cam_no">Camera # (starts with 0)</field>
<field type="uint64_t" name="timestamp">Timestamp</field>
<field type="uint64_t" name="valid_until">Until which timestamp this buffer will stay valid</field>
<field type="uint32_t" name="img_seq">The image sequence number</field>
<field type="uint32_t" name="img_buf_index">Position of the image in the buffer, starts with 0</field>
<field type="uint16_t" name="width">Image width</field>
<field type="uint16_t" name="height">Image height</field>
<field type="uint16_t" name="depth">Image depth</field>
<field type="uint8_t" name="channels">Image channels</field>
<field type="uint32_t" name="key">Shared memory area key</field>
<field type="uint32_t" name="exposure">Exposure time, in microseconds</field>
<field type="float" name="gain">Camera gain</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
<field type="float" name="local_z">Local frame Z coordinate (height over ground)</field>
<field type="float" name="lat">GPS X coordinate</field>
<field type="float" name="lon">GPS Y coordinate</field>
<field type="float" name="alt">Global frame altitude</field>
<field type="float" name="ground_x">Ground truth X</field>
<field type="float" name="ground_y">Ground truth Y</field>
<field type="float" name="ground_z">Ground truth Z</field>
</message>
<message id="156" name="VISION_POSITION_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X position</field>
<field type="float" name="y">Global Y position</field>
<field type="float" name="z">Global Z position</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
</message>
<message id="157" name="VICON_POSITION_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X position</field>
<field type="float" name="y">Global Y position</field>
<field type="float" name="z">Global Z position</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
</message>
<message id="158" name="VISION_SPEED_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X speed</field>
<field type="float" name="y">Global Y speed</field>
<field type="float" name="z">Global Z speed</field>
</message>
<message id="159" name="POSITION_CONTROL_SETPOINT_SET">
<description>Message sent to the MAV to set a new position as reference for the controller</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="id">ID of waypoint, 0 for plain position</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">yaw orientation in radians, 0 = NORTH</field>
</message>
<message id="160" name="POSITION_CONTROL_OFFSET_SET">
<description>Message sent to the MAV to set a new offset from the currently controlled position</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="x">x position offset</field>
<field type="float" name="y">y position offset</field>
<field type="float" name="z">z position offset</field>
<field type="float" name="yaw">yaw orientation offset in radians, 0 = NORTH</field>
</message>
<!-- Message sent by the MAV once it sets a new position as reference in the controller -->
<message id="170" name="POSITION_CONTROL_SETPOINT">
<field type="uint16_t" name="id">ID of waypoint, 0 for plain position</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">yaw orientation in radians, 0 = NORTH</field>
</message>
<message id="171" name="MARKER">
<field type="uint16_t" name="id">ID</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="roll">roll orientation</field>
<field type="float" name="pitch">pitch orientation</field>
<field type="float" name="yaw">yaw orientation</field>
</message>
<message id="172" name="RAW_AUX">
<field type="uint16_t" name="adc1">ADC1 (J405 ADC3, LPC2148 AD0.6)</field>
<field type="uint16_t" name="adc2">ADC2 (J405 ADC5, LPC2148 AD0.2)</field>
<field type="uint16_t" name="adc3">ADC3 (J405 ADC6, LPC2148 AD0.1)</field>
<field type="uint16_t" name="adc4">ADC4 (J405 ADC7, LPC2148 AD1.3)</field>
<field type="uint16_t" name="vbat">Battery voltage</field>
<field type="int16_t" name="temp">Temperature (degrees celcius)</field>
<field type="int32_t" name="baro">Barometric pressure (hecto Pascal)</field>
</message>
<message id="180" name="WATCHDOG_HEARTBEAT">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_count">Number of processes</field>
</message>
<message id="181" name="WATCHDOG_PROCESS_INFO">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="char[100]" name="name">Process name</field>
<field type="char[147]" name="arguments">Process arguments</field>
<field type="int32_t" name="timeout">Timeout (seconds)</field>
</message>
<message id="182" name="WATCHDOG_PROCESS_STATUS">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="uint8_t" name="state">Is running / finished / suspended / crashed</field>
<field type="uint8_t" name="muted">Is muted</field>
<field type="int32_t" name="pid">PID</field>
<field type="uint16_t" name="crashes">Number of crashes</field>
</message>
<message id="183" name="WATCHDOG_COMMAND">
<field type="uint8_t" name="target_system_id">Target system ID</field>
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="uint8_t" name="command_id">Command ID</field>
</message>
<message id="190" name="PATTERN_DETECTED">
<field type="uint8_t" name="type">0: Pattern, 1: Letter</field>
<field type="float" name="confidence">Confidence of detection</field>
<field type="char[100]" name="file">Pattern file name</field>
<field type="uint8_t" name="detected">Accepted as true detection, 0 no, 1 yes</field>
</message>
<message id="191" name="POINT_OF_INTEREST">
<description>Notifies the operator about a point of interest (POI). This can be anything detected by the
system. This generic message is intented to help interfacing to generic visualizations and to display
the POI on a map.
</description>
<field type="uint8_t" name="type">0: Notice, 1: Warning, 2: Critical, 3: Emergency, 4: Debug</field>
<field type="uint8_t" name="color">0: blue, 1: yellow, 2: red, 3: orange, 4: green, 5: magenta</field>
<field type="uint8_t" name="coordinate_system">0: global, 1:local</field>
<field type="uint16_t" name="timeout">0: no timeout, >1: timeout in seconds</field>
<field type="float" name="x">X Position</field>
<field type="float" name="y">Y Position</field>
<field type="float" name="z">Z Position</field>
<field type="char[26]" name="name">POI name</field>
</message>
<message id="192" name="POINT_OF_INTEREST_CONNECTION">
<description>Notifies the operator about the connection of two point of interests (POI). This can be anything detected by the
system. This generic message is intented to help interfacing to generic visualizations and to display
the POI on a map.
</description>
<field type="uint8_t" name="type">0: Notice, 1: Warning, 2: Critical, 3: Emergency, 4: Debug</field>
<field type="uint8_t" name="color">0: blue, 1: yellow, 2: red, 3: orange, 4: green, 5: magenta</field>
<field type="uint8_t" name="coordinate_system">0: global, 1:local</field>
<field type="uint16_t" name="timeout">0: no timeout, >1: timeout in seconds</field>
<field type="float" name="xp1">X1 Position</field>
<field type="float" name="yp1">Y1 Position</field>
<field type="float" name="zp1">Z1 Position</field>
<field type="float" name="xp2">X2 Position</field>
<field type="float" name="yp2">Y2 Position</field>
<field type="float" name="zp2">Z2 Position</field>
<field type="char[26]" name="name">POI connection name</field>
</message>
<message id="193" name="DATA_TRANSMISSION_HANDSHAKE">
<field type="uint8_t" name="type">type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h)</field>
<field type="uint32_t" name="size">total data size in bytes (set on ACK only)</field>
<field type="uint8_t" name="packets">number of packets beeing sent (set on ACK only)</field>
<field type="uint8_t" name="payload">payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only)</field>
<field type="uint8_t" name="jpg_quality">JPEG quality out of [1,100]</field>
</message>
<message id="194" name="ENCAPSULATED_DATA">
<field type="uint16_t" name="seqnr">sequence number (starting with 0 on every transmission)</field>
<field type="uint8_t[253]" name="data">image data bytes</field>
</message>
<message id="195" name="BRIEF_FEATURE">
<field type="float" name="x">x position in m</field>
<field type="float" name="y">y position in m</field>
<field type="float" name="z">z position in m</field>
<field type="uint8_t" name="orientation_assignment">Orientation assignment 0: false, 1:true</field>
<field type="uint16_t" name="size">Size in pixels</field>
<field type="uint16_t" name="orientation">Orientation</field>
<field type="uint8_t[32]" name="descriptor">Descriptor</field>
<field type="float" name="response">Harris operator response at this location</field>
</message>
<message id="200" name="ATTITUDE_CONTROL">
<field type="uint8_t" name="target">The system to be controlled</field>
<field type="float" name="roll">roll</field>
<field type="float" name="pitch">pitch</field>
<field type="float" name="yaw">yaw</field>
<field type="float" name="thrust">thrust</field>
<field type="uint8_t" name="roll_manual">roll control enabled auto:0, manual:1</field>
<field type="uint8_t" name="pitch_manual">pitch auto:0, manual:1</field>
<field type="uint8_t" name="yaw_manual">yaw auto:0, manual:1</field>
<field type="uint8_t" name="thrust_manual">thrust auto:0, manual:1</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/slugs.xml
0,0 → 1,144
<?xml version="1.0"?>
<mavlink>
<include>common.xml</include>
 
<!-- <enums>
<enum name="SLUGS_ACTION" >
<description> Slugs Actions </description>
<entry name = "SLUGS_ACTION_NONE">
<entry name = "SLUGS_ACTION_SUCCESS">
<entry name = "SLUGS_ACTION_FAIL">
<entry name = "SLUGS_ACTION_EEPROM">
<entry name = "SLUGS_ACTION_MODE_CHANGE">
<entry name = "SLUGS_ACTION_MODE_REPORT">
<entry name = "SLUGS_ACTION_PT_CHANGE">
<entry name = "SLUGS_ACTION_PT_REPORT">
<entry name = "SLUGS_ACTION_PID_CHANGE">
<entry name = "SLUGS_ACTION_PID_REPORT">
<entry name = "SLUGS_ACTION_WP_CHANGE">
<entry name = "SLUGS_ACTION_WP_REPORT">
<entry name = "SLUGS_ACTION_MLC_CHANGE">
<entry name = "SLUGS_ACTION_MLC_REPORT">
</enum>
 
<enum name="WP_PROTOCOL_STATE" >
<description> Waypoint Protocol States </description>
<entry name = "WP_PROT_IDLE">
<entry name = "WP_PROT_LIST_REQUESTED">
<entry name = "WP_PROT_NUM_SENT">
<entry name = "WP_PROT_TX_WP">
<entry name = "WP_PROT_RX_WP">
<entry name = "WP_PROT_SENDING_WP_IDLE">
<entry name = "WP_PROT_GETTING_WP_IDLE">
</enum>
 
</enums> -->
 
<messages>
 
<message name="CPU_LOAD" id="170">
Sensor and DSC control loads.
<field name="sensLoad" type="uint8_t">Sensor DSC Load</field>
<field name="ctrlLoad" type="uint8_t">Control DSC Load</field>
<field name="batVolt" type="uint16_t">Battery Voltage in millivolts</field>
</message>
 
<message name="AIR_DATA" id="171">
Air data for altitude and airspeed computation.
<field name="dynamicPressure" type="float">Dynamic pressure (Pa)</field>
<field name="staticPressure" type="float">Static pressure (Pa)</field>
<field name="temperature" type="uint16_t">Board temperature</field>
</message>
 
<message name="SENSOR_BIAS" id="172">
Accelerometer and gyro biases.
<field name="axBias" type="float">Accelerometer X bias (m/s)</field>
<field name="ayBias" type="float">Accelerometer Y bias (m/s)</field>
<field name="azBias" type="float">Accelerometer Z bias (m/s)</field>
<field name="gxBias" type="float">Gyro X bias (rad/s)</field>
<field name="gyBias" type="float">Gyro Y bias (rad/s)</field>
<field name="gzBias" type="float">Gyro Z bias (rad/s)</field>
</message>
 
<message name="DIAGNOSTIC" id="173">
Configurable diagnostic messages.
<field name="diagFl1" type="float">Diagnostic float 1</field>
<field name="diagFl2" type="float">Diagnostic float 2</field>
<field name="diagFl3" type="float">Diagnostic float 3</field>
<field name="diagSh1" type="int16_t">Diagnostic short 1</field>
<field name="diagSh2" type="int16_t">Diagnostic short 2</field>
<field name="diagSh3" type="int16_t">Diagnostic short 3</field>
</message>
 
<message name="SLUGS_NAVIGATION" id="176">
Data used in the navigation algorithm.
<field name="u_m" type="float">Measured Airspeed prior to the Nav Filter</field>
<field name="phi_c" type="float">Commanded Roll</field>
<field name="theta_c" type="float">Commanded Pitch</field>
<field name="psiDot_c" type="float">Commanded Turn rate</field>
<field name="ay_body" type="float">Y component of the body acceleration</field>
<field name="totalDist" type="float">Total Distance to Run on this leg of Navigation</field>
<field name="dist2Go" type="float">Remaining distance to Run on this leg of Navigation</field>
<field name="fromWP" type="uint8_t">Origin WP</field>
<field name="toWP" type="uint8_t">Destination WP</field>
</message>
 
<message name="DATA_LOG" id="177">
Configurable data log probes to be used inside Simulink
<field name="fl_1" type="float">Log value 1 </field>
<field name="fl_2" type="float">Log value 2 </field>
<field name="fl_3" type="float">Log value 3 </field>
<field name="fl_4" type="float">Log value 4 </field>
<field name="fl_5" type="float">Log value 5 </field>
<field name="fl_6" type="float">Log value 6 </field>
</message>
 
<message name="GPS_DATE_TIME" id="179">
Pilot console PWM messges.
<field name="year" type="uint8_t">Year reported by Gps </field>
<field name="month" type="uint8_t">Month reported by Gps </field>
<field name="day" type="uint8_t">Day reported by Gps </field>
<field name="hour" type="uint8_t">Hour reported by Gps </field>
<field name="min" type="uint8_t">Min reported by Gps </field>
<field name="sec" type="uint8_t">Sec reported by Gps </field>
<field name="visSat" type="uint8_t">Visible sattelites reported by Gps </field>
</message>
 
<message name="MID_LVL_CMDS" id="180">
Mid Level commands sent from the GS to the autopilot. These are only sent when being opperated in mid-level commands mode from the ground; for periodic report of these commands generated from the autopilot see message XXXX.
<field name="target" type="uint8_t">The system setting the commands</field>
<field name="hCommand" type="float">Commanded Airspeed</field>
<field name="uCommand" type="float">Log value 2 </field>
<field name="rCommand" type="float">Log value 3 </field>
</message>
 
 
<message name="CTRL_SRFC_PT" id="181">
This message configures the Selective Passthrough mode. it allows to select which control surfaces the Pilot can control from his console. It is implemented as a bitfield as follows:
Position Bit Code
=================================
15-8 Reserved
7 dt_pass 128
6 dla_pass 64
5 dra_pass 32
4 dr_pass 16
3 dle_pass 8
2 dre_pass 4
1 dlf_pass 2
0 drf_pass 1
Where Bit 15 is the MSb. 0 = AP has control of the surface; 1 = Pilot Console has control of the surface.
<field name="target" type="uint8_t">The system setting the commands</field>
<field name="bitfieldPt" type="uint16_t">Bitfield containing the PT configuration</field>
</message>
 
 
 
<message name="SLUGS_ACTION" id="183">
Action messages focused on the SLUGS AP.
<field name="target" type="uint8_t">The system reporting the action</field>
<field name="actionId" type="uint8_t">Action ID. See apDefinitions.h in the SLUGS /clib directory for the ID names</field>
<field name="actionVal" type="uint16_t">Value associated with the action</field>
</message>
 
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/test.xml
0,0 → 1,31
<?xml version='1.0'?>
<mavlink>
<version>3</version>
<messages>
<message id="0" name="TEST_TYPES">
<description>Test all field types</description>
<field type="char" name="c">char</field>
<field type="char[10]" name="s">string</field>
<field type="uint8_t" name="u8">uint8_t</field>
<field type="uint16_t" name="u16">uint16_t</field>
<field type="uint32_t" name="u32" print_format="0x%08x">uint32_t</field>
<field type="uint64_t" name="u64">uint64_t</field>
<field type="int8_t" name="s8">int8_t</field>
<field type="int16_t" name="s16">int16_t</field>
<field type="int32_t" name="s32">int32_t</field>
<field type="int64_t" name="s64">int64_t</field>
<field type="float" name="f">float</field>
<field type="double" name="d">double</field>
<field type="uint8_t[3]" name="u8_array">uint8_t_array</field>
<field type="uint16_t[3]" name="u16_array">uint16_t_array</field>
<field type="uint32_t[3]" name="u32_array">uint32_t_array</field>
<field type="uint64_t[3]" name="u64_array">uint64_t_array</field>
<field type="int8_t[3]" name="s8_array">int8_t_array</field>
<field type="int16_t[3]" name="s16_array">int16_t_array</field>
<field type="int32_t[3]" name="s32_array">int32_t_array</field>
<field type="int64_t[3]" name="s64_array">int64_t_array</field>
<field type="float[3]" name="f_array">float_array</field>
<field type="double[3]" name="d_array">double_array</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions/ualberta.xml
0,0 → 1,54
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<enums>
<enum name="UALBERTA_AUTOPILOT_MODE">
<description>Available autopilot modes for ualberta uav</description>
<entry name="MODE_MANUAL_DIRECT">Raw input pulse widts sent to output</entry>
<entry name="MODE_MANUAL_SCALED">Inputs are normalized using calibration, the converted back to raw pulse widths for output</entry>
<entry name="MODE_AUTO_PID_ATT"> dfsdfs</entry>
<entry name="MODE_AUTO_PID_VEL"> dfsfds</entry>
<entry name="MODE_AUTO_PID_POS"> dfsdfsdfs</entry>
</enum>
<enum name="UALBERTA_NAV_MODE">
<description>Navigation filter mode</description>
<entry name="NAV_AHRS_INIT" />
<entry name="NAV_AHRS">AHRS mode</entry>
<entry name="NAV_INS_GPS_INIT">INS/GPS initialization mode</entry>
<entry name="NAV_INS_GPS">INS/GPS mode</entry>
</enum>
<enum name="UALBERTA_PILOT_MODE">
<description>Mode currently commanded by pilot</description>
<entry name="PILOT_MANUAL"> sdf</entry>
<entry name="PILOT_AUTO"> dfs</entry>
<entry name="PILOT_ROTO"> Rotomotion mode </entry>
</enum>
</enums>
<messages>
<message id="220" name="NAV_FILTER_BIAS">
<description>Accelerometer and Gyro biases from the navigation filter</description>
<field type="uint64_t" name="usec">Timestamp (microseconds)</field>
<field type="float" name="accel_0">b_f[0]</field>
<field type="float" name="accel_1">b_f[1]</field>
<field type="float" name="accel_2">b_f[2]</field>
<field type="float" name="gyro_0">b_f[0]</field>
<field type="float" name="gyro_1">b_f[1]</field>
<field type="float" name="gyro_2">b_f[2]</field>
</message>
<message id="221" name="RADIO_CALIBRATION">
<description>Complete set of calibration parameters for the radio</description>
<field type="uint16_t[3]" name="aileron">Aileron setpoints: left, center, right</field>
<field type="uint16_t[3]" name="elevator">Elevator setpoints: nose down, center, nose up</field>
<field type="uint16_t[3]" name="rudder">Rudder setpoints: nose left, center, nose right</field>
<field type="uint16_t[2]" name="gyro">Tail gyro mode/gain setpoints: heading hold, rate mode</field>
<field type="uint16_t[5]" name="pitch">Pitch curve setpoints (every 25%)</field>
<field type="uint16_t[5]" name="throttle">Throttle curve setpoints (every 25%)</field>
</message>
<message id="222" name="UALBERTA_SYS_STATUS">
<description>System status specific to ualberta uav</description>
<field type="uint8_t" name="mode">System mode, see UALBERTA_AUTOPILOT_MODE ENUM</field>
<field type="uint8_t" name="nav_mode">Navigation mode, see UALBERTA_NAV_MODE ENUM</field>
<field type="uint8_t" name="pilot">Pilot mode, see UALBERTA_PILOT_MODE</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/ardupilotmega.xml
0,0 → 1,270
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<!-- note that APM specific messages should use the command id
range from 150 to 250, to leave plenty of room for growth
of common.xml
 
If you prototype a message here, then you should consider if it
is general enough to move into common.xml later
-->
 
 
<enums>
<!-- Camera Mount mode Enumeration -->
<enum name="MAV_MOUNT_MODE">
<description>Enumeration of possible mount operation modes</description>
<entry name="MAV_MOUNT_MODE_RETRACT" value="0"><description>Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_NEUTRAL" value="1"><description>Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM.</description></entry>
<entry name="MAV_MOUNT_MODE_MAVLINK_TARGETING" value="2"><description>Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_RC_TARGETING" value="3"><description>Load neutral position and start RC Roll,Pitch,Yaw control with stabilization</description></entry>
<entry name="MAV_MOUNT_MODE_GPS_POINT" value="4"><description>Load neutral position and start to point to Lat,Lon,Alt</description></entry>
</enum>
 
<enum name="MAV_CMD" >
<!-- Camera Controller Mission Commands Enumeration -->
<entry name="MAV_CMD_DO_DIGICAM_CONFIGURE" value="202">
<description>Mission command to configure an on-board camera controller system.</description>
<param index="1">Modes: P, TV, AV, M, Etc</param>
<param index="2">Shutter speed: Divisor number for one second</param>
<param index="3">Aperture: F stop number</param>
<param index="4">ISO number e.g. 80, 100, 200, Etc</param>
<param index="5">Exposure type enumerator</param>
<param index="6">Command Identity</param>
<param index="7">Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)</param>
</entry>
 
<entry name="MAV_CMD_DO_DIGICAM_CONTROL" value="203">
<description>Mission command to control an on-board camera controller system.</description>
<param index="1">Session control e.g. show/hide lens</param>
<param index="2">Zoom's absolute position</param>
<param index="3">Zooming step value to offset zoom from the current position</param>
<param index="4">Focus Locking, Unlocking or Re-locking</param>
<param index="5">Shooting Command</param>
<param index="6">Command Identity</param>
<param index="7">Empty</param>
</entry>
 
<!-- Camera Mount Mission Commands Enumeration -->
<entry name="MAV_CMD_DO_MOUNT_CONFIGURE" value="204">
<description>Mission command to configure a camera or antenna mount</description>
<param index="1">Mount operation mode (see MAV_MOUNT_MODE enum)</param>
<param index="2">stabilize roll? (1 = yes, 0 = no)</param>
<param index="3">stabilize pitch? (1 = yes, 0 = no)</param>
<param index="4">stabilize yaw? (1 = yes, 0 = no)</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
 
<entry name="MAV_CMD_DO_MOUNT_CONTROL" value="205">
<description>Mission command to control a camera or antenna mount</description>
<param index="1">pitch(deg*100) or lat, depending on mount mode.</param>
<param index="2">roll(deg*100) or lon depending on mount mode</param>
<param index="3">yaw(deg*100) or alt (in cm) depending on mount mode</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
</enum>
 
<!-- fenced mode enums -->
<enum name="FENCE_ACTION">
<entry name="FENCE_ACTION_NONE" value="0">
<description>Disable fenced mode</description>
</entry>
<entry name="FENCE_ACTION_GUIDED" value="1">
<description>Switched to guided mode to return point (fence point 0)</description>
</entry>
</enum>
 
<enum name="FENCE_BREACH">
<entry name="FENCE_BREACH_NONE" value="0">
<description>No last fence breach</description>
</entry>
<entry name="FENCE_BREACH_MINALT" value="1">
<description>Breached minimum altitude</description>
</entry>
<entry name="FENCE_BREACH_MAXALT" value="2">
<description>Breached minimum altitude</description>
</entry>
<entry name="FENCE_BREACH_BOUNDARY" value="3">
<description>Breached fence boundary</description>
</entry>
</enum>
</enums>
 
<messages>
<message id="150" name="SENSOR_OFFSETS">
<description>Offsets and calibrations values for hardware
sensors. This makes it easier to debug the calibration process.</description>
<field type="int16_t" name="mag_ofs_x">magnetometer X offset</field>
<field type="int16_t" name="mag_ofs_y">magnetometer Y offset</field>
<field type="int16_t" name="mag_ofs_z">magnetometer Z offset</field>
<field type="float" name="mag_declination">magnetic declination (radians)</field>
<field type="int32_t" name="raw_press">raw pressure from barometer</field>
<field type="int32_t" name="raw_temp">raw temperature from barometer</field>
<field type="float" name="gyro_cal_x">gyro X calibration</field>
<field type="float" name="gyro_cal_y">gyro Y calibration</field>
<field type="float" name="gyro_cal_z">gyro Z calibration</field>
<field type="float" name="accel_cal_x">accel X calibration</field>
<field type="float" name="accel_cal_y">accel Y calibration</field>
<field type="float" name="accel_cal_z">accel Z calibration</field>
</message>
 
<message id="151" name="SET_MAG_OFFSETS">
<description>set the magnetometer offsets</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="int16_t" name="mag_ofs_x">magnetometer X offset</field>
<field type="int16_t" name="mag_ofs_y">magnetometer Y offset</field>
<field type="int16_t" name="mag_ofs_z">magnetometer Z offset</field>
</message>
 
<message id="152" name="MEMINFO">
<description>state of APM memory</description>
<field type="uint16_t" name="brkval">heap top</field>
<field type="uint16_t" name="freemem">free memory</field>
</message>
 
<message id="153" name="AP_ADC">
<description>raw ADC output</description>
<field type="uint16_t" name="adc1">ADC output 1</field>
<field type="uint16_t" name="adc2">ADC output 2</field>
<field type="uint16_t" name="adc3">ADC output 3</field>
<field type="uint16_t" name="adc4">ADC output 4</field>
<field type="uint16_t" name="adc5">ADC output 5</field>
<field type="uint16_t" name="adc6">ADC output 6</field>
</message>
 
<!-- Camera Controller Messages -->
<message name="DIGICAM_CONFIGURE" id="154">
<description>Configure on-board Camera Control System.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="mode" type="uint8_t">Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore)</field>
<field name="shutter_speed" type="uint16_t">Divisor number //e.g. 1000 means 1/1000 (0 means ignore)</field>
<field name="aperture" type="uint8_t">F stop number x 10 //e.g. 28 means 2.8 (0 means ignore)</field>
<field name="iso" type="uint8_t">ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore)</field>
<field name="exposure_type" type="uint8_t">Exposure type enumeration from 1 to N (0 means ignore)</field>
<field name="command_id" type="uint8_t">Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once</field>
<field name="engine_cut_off" type="uint8_t">Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)</field>
<field name="extra_param" type="uint8_t">Extra parameters enumeration (0 means ignore)</field>
<field name="extra_value" type="float">Correspondent value to given extra_param</field>
</message>
 
<message name="DIGICAM_CONTROL" id="155">
<description>Control on-board Camera Control System to take shots.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="session" type="uint8_t">0: stop, 1: start or keep it up //Session control e.g. show/hide lens</field>
<field name="zoom_pos" type="uint8_t">1 to N //Zoom's absolute position (0 means ignore)</field>
<field name="zoom_step" type="int8_t">-100 to 100 //Zooming step value to offset zoom from the current position</field>
<field name="focus_lock" type="uint8_t">0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus</field>
<field name="shot" type="uint8_t">0: ignore, 1: shot or start filming</field>
<field name="command_id" type="uint8_t">Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once</field>
<field name="extra_param" type="uint8_t">Extra parameters enumeration (0 means ignore)</field>
<field name="extra_value" type="float">Correspondent value to given extra_param</field>
</message>
 
<!-- Camera Mount Messages -->
<message name="MOUNT_CONFIGURE" id="156">
<description>Message to configure a camera mount, directional antenna, etc.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="mount_mode" type="uint8_t">mount operating mode (see MAV_MOUNT_MODE enum)</field>
<field name="stab_roll" type="uint8_t">(1 = yes, 0 = no)</field>
<field name="stab_pitch" type="uint8_t">(1 = yes, 0 = no)</field>
<field name="stab_yaw" type="uint8_t">(1 = yes, 0 = no)</field>
</message>
 
<message name="MOUNT_CONTROL" id="157">
<description>Message to control a camera mount, directional antenna, etc.</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="input_a" type="int32_t">pitch(deg*100) or lat, depending on mount mode</field>
<field name="input_b" type="int32_t">roll(deg*100) or lon depending on mount mode</field>
<field name="input_c" type="int32_t">yaw(deg*100) or alt (in cm) depending on mount mode</field>
<field name="save_position" type="uint8_t">if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING)</field>
</message>
 
<message name="MOUNT_STATUS" id="158">
<description>Message with some status from APM to GCS about camera or antenna mount</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="pointing_a" type="int32_t">pitch(deg*100) or lat, depending on mount mode</field>
<field name="pointing_b" type="int32_t">roll(deg*100) or lon depending on mount mode</field>
<field name="pointing_c" type="int32_t">yaw(deg*100) or alt (in cm) depending on mount mode</field>
</message>
 
<!-- geo-fence messages -->
<message name="FENCE_POINT" id="160">
<description>A fence point. Used to set a point when from
GCS -> MAV. Also used to return a point from MAV -> GCS</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="idx" type="uint8_t">point index (first point is 1, 0 is for return point)</field>
<field name="count" type="uint8_t">total number of points (for sanity checking)</field>
<field name="lat" type="float">Latitude of point</field>
<field name="lng" type="float">Longitude of point</field>
</message>
 
<message name="FENCE_FETCH_POINT" id="161">
<description>Request a current fence point from MAV</description>
<field name="target_system" type="uint8_t">System ID</field>
<field name="target_component" type="uint8_t">Component ID</field>
<field name="idx" type="uint8_t">point index (first point is 1, 0 is for return point)</field>
</message>
 
<message name="FENCE_STATUS" id="162">
<description>Status of geo-fencing. Sent in extended
status stream when fencing enabled</description>
<field name="breach_status" type="uint8_t">0 if currently inside fence, 1 if outside</field>
<field name="breach_count" type="uint16_t">number of fence breaches</field>
<field name="breach_type" type="uint8_t">last breach type (see FENCE_BREACH_* enum)</field>
<field name="breach_time" type="uint32_t">time of last breach in milliseconds since boot</field>
</message>
 
<message name="AHRS" id="163">
<description>Status of DCM attitude estimator</description>
<field type="float" name="omegaIx">X gyro drift estimate rad/s</field>
<field type="float" name="omegaIy">Y gyro drift estimate rad/s</field>
<field type="float" name="omegaIz">Z gyro drift estimate rad/s</field>
<field type="float" name="accel_weight">average accel_weight</field>
<field type="float" name="renorm_val">average renormalisation value</field>
<field type="float" name="error_rp">average error_roll_pitch value</field>
<field type="float" name="error_yaw">average error_yaw value</field>
</message>
 
<message name="SIMSTATE" id="164">
<description>Status of simulation environment, if used</description>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="xacc">X acceleration m/s/s</field>
<field type="float" name="yacc">Y acceleration m/s/s</field>
<field type="float" name="zacc">Z acceleration m/s/s</field>
<field type="float" name="xgyro">Angular speed around X axis rad/s</field>
<field type="float" name="ygyro">Angular speed around Y axis rad/s</field>
<field type="float" name="zgyro">Angular speed around Z axis rad/s</field>
</message>
 
<message name="HWSTATUS" id="165">
<description>Status of key hardware</description>
<field type="uint16_t" name="Vcc">board voltage (mV)</field>
<field type="uint8_t" name="I2Cerr">I2C error count</field>
</message>
 
<message name="RADIO" id="166">
<description>Status generated by radio</description>
<field type="uint8_t" name="rssi">local signal strength</field>
<field type="uint8_t" name="remrssi">remote signal strength</field>
<field type="uint8_t" name="txbuf">how full the tx buffer is as a percentage</field>
<field type="uint8_t" name="noise">background noise level</field>
<field type="uint8_t" name="remnoise">remote background noise level</field>
<field type="uint16_t" name="rxerrors">receive errors</field>
<field type="uint16_t" name="fixed">count of error corrected packets</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/common.xml
0,0 → 1,1531
<?xml version='1.0'?>
<mavlink>
<version>3</version>
<enums>
<enum name="MAV_AUTOPILOT">
<description>Micro air vehicle / autopilot classes. This identifies the individual model.</description>
<entry value="0" name="MAV_AUTOPILOT_GENERIC">
<description>Generic autopilot, full support for everything</description>
</entry>
<entry value="1" name="MAV_AUTOPILOT_PIXHAWK">
<description>PIXHAWK autopilot, http://pixhawk.ethz.ch</description>
</entry>
<entry value="2" name="MAV_AUTOPILOT_SLUGS">
<description>SLUGS autopilot, http://slugsuav.soe.ucsc.edu</description>
</entry>
<entry value="3" name="MAV_AUTOPILOT_ARDUPILOTMEGA">
<description>ArduPilotMega / ArduCopter, http://diydrones.com</description>
</entry>
<entry value="4" name="MAV_AUTOPILOT_OPENPILOT">
<description>OpenPilot, http://openpilot.org</description>
</entry>
<entry value="5" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY">
<description>Generic autopilot only supporting simple waypoints</description>
</entry>
<entry value="6" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY">
<description>Generic autopilot supporting waypoints and other simple navigation commands</description>
</entry>
<entry value="7" name="MAV_AUTOPILOT_GENERIC_MISSION_FULL">
<description>Generic autopilot supporting the full mission command set</description>
</entry>
<entry value="8" name="MAV_AUTOPILOT_INVALID">
<description>No valid autopilot, e.g. a GCS or other MAVLink component</description>
</entry>
<entry value="9" name="MAV_AUTOPILOT_PPZ">
<description>PPZ UAV - http://nongnu.org/paparazzi</description>
</entry>
<entry value="10" name="MAV_AUTOPILOT_UDB">
<description>UAV Dev Board</description>
</entry>
<entry value="11" name="MAV_AUTOPILOT_FP">
<description>FlexiPilot</description>
</entry>
</enum>
<enum name="MAV_TYPE">
<entry value="0" name="MAV_TYPE_GENERIC">
<description>Generic micro air vehicle.</description>
</entry>
<entry value="1" name="MAV_TYPE_FIXED_WING">
<description>Fixed wing aircraft.</description>
</entry>
<entry value="2" name="MAV_TYPE_QUADROTOR">
<description>Quadrotor</description>
</entry>
<entry value="3" name="MAV_TYPE_COAXIAL">
<description>Coaxial helicopter</description>
</entry>
<entry value="4" name="MAV_TYPE_HELICOPTER">
<description>Normal helicopter with tail rotor.</description>
</entry>
<entry value="5" name="MAV_TYPE_ANTENNA_TRACKER">
<description>Ground installation</description>
</entry>
<entry value="6" name="MAV_TYPE_GCS">
<description>Operator control unit / ground control station</description>
</entry>
<entry value="7" name="MAV_TYPE_AIRSHIP">
<description>Airship, controlled</description>
</entry>
<entry value="8" name="MAV_TYPE_FREE_BALLOON">
<description>Free balloon, uncontrolled</description>
</entry>
<entry value="9" name="MAV_TYPE_ROCKET">
<description>Rocket</description>
</entry>
<entry value="10" name="MAV_TYPE_GROUND_ROVER">
<description>Ground rover</description>
</entry>
<entry value="11" name="MAV_TYPE_SURFACE_BOAT">
<description>Surface vessel, boat, ship</description>
</entry>
<entry value="12" name="MAV_TYPE_SUBMARINE">
<description>Submarine</description>
</entry>
<entry value="13" name="MAV_TYPE_HEXAROTOR">
<description>Hexarotor</description>
</entry>
<entry value="14" name="MAV_TYPE_OCTOROTOR">
<description>Octorotor</description>
</entry>
<entry value="15" name="MAV_TYPE_TRICOPTER">
<description>Octorotor</description>
</entry>
<entry value="16" name="MAV_TYPE_FLAPPING_WING">
<description>Flapping wing</description>
</entry>
</enum>
<!-- WARNING: MAV_ACTION Enum is no longer supported - has been removed. Please use MAV_CMD -->
<enum name="MAV_MODE_FLAG">
<description>These flags encode the MAV mode.</description>
<entry value="128" name="MAV_MODE_FLAG_SAFETY_ARMED">
<description>0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.</description>
</entry>
<entry value="64" name="MAV_MODE_FLAG_MANUAL_INPUT_ENABLED">
<description>0b01000000 remote control input is enabled.</description>
</entry>
<entry value="32" name="MAV_MODE_FLAG_HIL_ENABLED">
<description>0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.</description>
</entry>
<entry value="16" name="MAV_MODE_FLAG_STABILIZE_ENABLED">
<description>0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.</description>
</entry>
<entry value="8" name="MAV_MODE_FLAG_GUIDED_ENABLED">
<description>0b00001000 guided mode enabled, system flies MISSIONs / mission items.</description>
</entry>
<entry value="4" name="MAV_MODE_FLAG_AUTO_ENABLED">
<description>0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.</description>
</entry>
<entry value="2" name="MAV_MODE_FLAG_TEST_ENABLED">
<description>0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.</description>
</entry>
<entry value="1" name="MAV_MODE_FLAG_CUSTOM_MODE_ENABLED">
<description>0b00000001 Reserved for future use.</description>
</entry>
</enum>
<enum name="MAV_MODE_FLAG_DECODE_POSITION">
<description>These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not.</description>
<entry value="128" name="MAV_MODE_FLAG_DECODE_POSITION_SAFETY">
<description>First bit: 10000000</description>
</entry>
<entry value="64" name="MAV_MODE_FLAG_DECODE_POSITION_MANUAL">
<description>Second bit: 01000000</description>
</entry>
<entry value="32" name="MAV_MODE_FLAG_DECODE_POSITION_HIL">
<description>Third bit: 00100000</description>
</entry>
<entry value="16" name="MAV_MODE_FLAG_DECODE_POSITION_STABILIZE">
<description>Fourth bit: 00010000</description>
</entry>
<entry value="8" name="MAV_MODE_FLAG_DECODE_POSITION_GUIDED">
<description>Fifth bit: 00001000</description>
</entry>
<entry value="4" name="MAV_MODE_FLAG_DECODE_POSITION_AUTO">
<description>Sixt bit: 00000100</description>
</entry>
<entry value="2" name="MAV_MODE_FLAG_DECODE_POSITION_TEST">
<description>Seventh bit: 00000010</description>
</entry>
<entry value="1" name="MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE">
<description>Eighth bit: 00000001</description>
</entry>
</enum>
<enum name="MAV_GOTO">
<description>Override command, pauses current mission execution and moves immediately to a position</description>
<entry value="0" name="MAV_GOTO_DO_HOLD">
<description>Hold at the current position.</description>
</entry>
<entry value="1" name="MAV_GOTO_DO_CONTINUE">
<description>Continue with the next item in mission execution.</description>
</entry>
<entry value="2" name="MAV_GOTO_HOLD_AT_CURRENT_POSITION">
<description>Hold at the current position of the system</description>
</entry>
<entry value="3" name="MAV_GOTO_HOLD_AT_SPECIFIED_POSITION">
<description>Hold at the position specified in the parameters of the DO_HOLD action</description>
</entry>
</enum>
<enum name="MAV_MODE">
<description>These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it
simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override.</description>
<entry value="0" name="MAV_MODE_PREFLIGHT">
<description>System is not ready to fly, booting, calibrating, etc. No flag is set.</description>
</entry>
<entry value="80" name="MAV_MODE_STABILIZE_DISARMED">
<description>System is allowed to be active, under assisted RC control.</description>
</entry>
<entry value="208" name="MAV_MODE_STABILIZE_ARMED">
<description>System is allowed to be active, under assisted RC control.</description>
</entry>
<entry value="64" name="MAV_MODE_MANUAL_DISARMED">
<description>System is allowed to be active, under manual (RC) control, no stabilization</description>
</entry>
<entry value="192" name="MAV_MODE_MANUAL_ARMED">
<description>System is allowed to be active, under manual (RC) control, no stabilization</description>
</entry>
<entry value="88" name="MAV_MODE_GUIDED_DISARMED">
<description>System is allowed to be active, under autonomous control, manual setpoint</description>
</entry>
<entry value="216" name="MAV_MODE_GUIDED_ARMED">
<description>System is allowed to be active, under autonomous control, manual setpoint</description>
</entry>
<entry value="92" name="MAV_MODE_AUTO_DISARMED">
<description>System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)</description>
</entry>
<entry value="220" name="MAV_MODE_AUTO_ARMED">
<description>System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)</description>
</entry>
<entry value="66" name="MAV_MODE_TEST_DISARMED">
<description>UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.</description>
</entry>
<entry value="194" name="MAV_MODE_TEST_ARMED">
<description>UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.</description>
</entry>
</enum>
<enum name="MAV_STATE">
<entry value="0" name="MAV_STATE_UNINIT">
<description>Uninitialized system, state is unknown.</description>
</entry>
<entry name="MAV_STATE_BOOT">
<description>System is booting up.</description>
</entry>
<entry name="MAV_STATE_CALIBRATING">
<description>System is calibrating and not flight-ready.</description>
</entry>
<entry name="MAV_STATE_STANDBY">
<description>System is grounded and on standby. It can be launched any time.</description>
</entry>
<entry name="MAV_STATE_ACTIVE">
<description>System is active and might be already airborne. Motors are engaged.</description>
</entry>
<entry name="MAV_STATE_CRITICAL">
<description>System is in a non-normal flight mode. It can however still navigate.</description>
</entry>
<entry name="MAV_STATE_EMERGENCY">
<description>System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.</description>
</entry>
<entry name="MAV_STATE_POWEROFF">
<description>System just initialized its power-down sequence, will shut down now.</description>
</entry>
</enum>
<enum name="MAV_COMPONENT">
<entry value="0" name="MAV_COMP_ID_ALL">
<description/>
</entry>
<entry value="220" name="MAV_COMP_ID_GPS">
<description/>
</entry>
<entry value="190" name="MAV_COMP_ID_MISSIONPLANNER">
<description/>
</entry>
<entry value="195" name="MAV_COMP_ID_PATHPLANNER">
<description/>
</entry>
<entry value="180" name="MAV_COMP_ID_MAPPER">
<description/>
</entry>
<entry value="100" name="MAV_COMP_ID_CAMERA">
<description/>
</entry>
<entry value="200" name="MAV_COMP_ID_IMU">
<description/>
</entry>
<entry value="201" name="MAV_COMP_ID_IMU_2">
<description/>
</entry>
<entry value="202" name="MAV_COMP_ID_IMU_3">
<description/>
</entry>
<entry value="240" name="MAV_COMP_ID_UDP_BRIDGE">
<description/>
</entry>
<entry value="241" name="MAV_COMP_ID_UART_BRIDGE">
<description/>
</entry>
<entry value="250" name="MAV_COMP_ID_SYSTEM_CONTROL">
<description/>
</entry>
<entry value="140" name="MAV_COMP_ID_SERVO1">
<description/>
</entry>
<entry value="141" name="MAV_COMP_ID_SERVO2">
<description/>
</entry>
<entry value="142" name="MAV_COMP_ID_SERVO3">
<description/>
</entry>
<entry value="143" name="MAV_COMP_ID_SERVO4">
<description/>
</entry>
<entry value="144" name="MAV_COMP_ID_SERVO5">
<description/>
</entry>
<entry value="145" name="MAV_COMP_ID_SERVO6">
<description/>
</entry>
<entry value="146" name="MAV_COMP_ID_SERVO7">
<description/>
</entry>
<entry value="147" name="MAV_COMP_ID_SERVO8">
<description/>
</entry>
<entry value="148" name="MAV_COMP_ID_SERVO9">
<description/>
</entry>
<entry value="149" name="MAV_COMP_ID_SERVO10">
<description/>
</entry>
<entry value="150" name="MAV_COMP_ID_SERVO11">
<description/>
</entry>
<entry value="151" name="MAV_COMP_ID_SERVO12">
<description/>
</entry>
<entry value="152" name="MAV_COMP_ID_SERVO13">
<description/>
</entry>
<entry value="153" name="MAV_COMP_ID_SERVO14">
<description/>
</entry>
</enum>
<enum name="MAV_FRAME">
<entry value="0" name="MAV_FRAME_GLOBAL">
<description>Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)</description>
</entry>
<entry value="1" name="MAV_FRAME_LOCAL_NED">
<description>Local coordinate frame, Z-up (x: north, y: east, z: down).</description>
</entry>
<entry value="2" name="MAV_FRAME_MISSION">
<description>NOT a coordinate frame, indicates a mission command.</description>
</entry>
<entry value="3" name="MAV_FRAME_GLOBAL_RELATIVE_ALT">
<description>Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.</description>
</entry>
<entry value="4" name="MAV_FRAME_LOCAL_ENU">
<description>Local coordinate frame, Z-down (x: east, y: north, z: up)</description>
</entry>
</enum>
<enum name="MAVLINK_DATA_STREAM_TYPE">
<entry name="MAVLINK_DATA_STREAM_IMG_JPEG">
<description/>
</entry>
<entry name="MAVLINK_DATA_STREAM_IMG_BMP">
<description/>
</entry>
<entry name="MAVLINK_DATA_STREAM_IMG_RAW8U">
<description/>
</entry>
<entry name="MAVLINK_DATA_STREAM_IMG_RAW32U">
<description/>
</entry>
<entry name="MAVLINK_DATA_STREAM_IMG_PGM">
<description/>
</entry>
<entry name="MAVLINK_DATA_STREAM_IMG_PNG">
<description/>
</entry>
</enum>
<enum name="MAV_CMD">
<description>Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data.</description>
<entry value="16" name="MAV_CMD_NAV_WAYPOINT">
<description>Navigate to MISSION.</description>
<param index="1">Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)</param>
<param index="2">Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)</param>
<param index="3">0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.</param>
<param index="4">Desired yaw angle at MISSION (rotary wing)</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="17" name="MAV_CMD_NAV_LOITER_UNLIM">
<description>Loiter around this MISSION an unlimited amount of time</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="18" name="MAV_CMD_NAV_LOITER_TURNS">
<description>Loiter around this MISSION for X turns</description>
<param index="1">Turns</param>
<param index="2">Empty</param>
<param index="3">Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="19" name="MAV_CMD_NAV_LOITER_TIME">
<description>Loiter around this MISSION for X seconds</description>
<param index="1">Seconds (decimal)</param>
<param index="2">Empty</param>
<param index="3">Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="20" name="MAV_CMD_NAV_RETURN_TO_LAUNCH">
<description>Return to launch location</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="21" name="MAV_CMD_NAV_LAND">
<description>Land at location</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Desired yaw angle.</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="22" name="MAV_CMD_NAV_TAKEOFF">
<description>Takeoff from ground / hand</description>
<param index="1">Minimum pitch (if airspeed sensor present), desired pitch without sensor</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Yaw angle (if magnetometer present), ignored without magnetometer</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="80" name="MAV_CMD_NAV_ROI">
<description>Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.</description>
<param index="1">Region of intereset mode. (see MAV_ROI enum)</param>
<param index="2">MISSION index/ target ID. (see MAV_ROI enum)</param>
<param index="3">ROI index (allows a vehicle to manage multiple ROI's)</param>
<param index="4">Empty</param>
<param index="5">x the location of the fixed ROI (see MAV_FRAME)</param>
<param index="6">y</param>
<param index="7">z</param>
</entry>
<entry value="81" name="MAV_CMD_NAV_PATHPLANNING">
<description>Control autonomous path planning on the MAV.</description>
<param index="1">0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning</param>
<param index="2">0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid</param>
<param index="3">Empty</param>
<param index="4">Yaw angle at goal, in compass degrees, [0..360]</param>
<param index="5">Latitude/X of goal</param>
<param index="6">Longitude/Y of goal</param>
<param index="7">Altitude/Z of goal</param>
</entry>
<entry value="95" name="MAV_CMD_NAV_LAST">
<description>NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="112" name="MAV_CMD_CONDITION_DELAY">
<description>Delay mission state machine.</description>
<param index="1">Delay in seconds (decimal)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="113" name="MAV_CMD_CONDITION_CHANGE_ALT">
<description>Ascend/descend at rate. Delay mission state machine until desired altitude reached.</description>
<param index="1">Descent / Ascend rate (m/s)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Finish Altitude</param>
</entry>
<entry value="114" name="MAV_CMD_CONDITION_DISTANCE">
<description>Delay mission state machine until within desired distance of next NAV point.</description>
<param index="1">Distance (meters)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="115" name="MAV_CMD_CONDITION_YAW">
<description>Reach a certain target angle.</description>
<param index="1">target angle: [0-360], 0 is north</param>
<param index="2">speed during yaw change:[deg per second]</param>
<param index="3">direction: negative: counter clockwise, positive: clockwise [-1,1]</param>
<param index="4">relative offset or absolute angle: [ 1,0]</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="159" name="MAV_CMD_CONDITION_LAST">
<description>NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="176" name="MAV_CMD_DO_SET_MODE">
<description>Set system mode.</description>
<param index="1">Mode, as defined by ENUM MAV_MODE</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="177" name="MAV_CMD_DO_JUMP">
<description>Jump to the desired command in the mission list. Repeat this action only the specified number of times</description>
<param index="1">Sequence number</param>
<param index="2">Repeat count</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="178" name="MAV_CMD_DO_CHANGE_SPEED">
<description>Change speed and/or throttle set points.</description>
<param index="1">Speed type (0=Airspeed, 1=Ground Speed)</param>
<param index="2">Speed (m/s, -1 indicates no change)</param>
<param index="3">Throttle ( Percent, -1 indicates no change)</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="179" name="MAV_CMD_DO_SET_HOME">
<description>Changes the home location either to the current location or a specified location.</description>
<param index="1">Use current (1=use current location, 0=use specified location)</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Latitude</param>
<param index="6">Longitude</param>
<param index="7">Altitude</param>
</entry>
<entry value="180" name="MAV_CMD_DO_SET_PARAMETER">
<description>Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.</description>
<param index="1">Parameter number</param>
<param index="2">Parameter value</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="181" name="MAV_CMD_DO_SET_RELAY">
<description>Set a relay to a condition.</description>
<param index="1">Relay number</param>
<param index="2">Setting (1=on, 0=off, others possible depending on system hardware)</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="182" name="MAV_CMD_DO_REPEAT_RELAY">
<description>Cycle a relay on and off for a desired number of cyles with a desired period.</description>
<param index="1">Relay number</param>
<param index="2">Cycle count</param>
<param index="3">Cycle time (seconds, decimal)</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="183" name="MAV_CMD_DO_SET_SERVO">
<description>Set a servo to a desired PWM value.</description>
<param index="1">Servo number</param>
<param index="2">PWM (microseconds, 1000 to 2000 typical)</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="184" name="MAV_CMD_DO_REPEAT_SERVO">
<description>Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.</description>
<param index="1">Servo number</param>
<param index="2">PWM (microseconds, 1000 to 2000 typical)</param>
<param index="3">Cycle count</param>
<param index="4">Cycle time (seconds)</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="200" name="MAV_CMD_DO_CONTROL_VIDEO">
<description>Control onboard camera system.</description>
<param index="1">Camera ID (-1 for all)</param>
<param index="2">Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
<param index="3">Transmission mode: 0: video stream, >0: single images every n seconds (decimal)</param>
<param index="4">Recording: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="240" name="MAV_CMD_DO_LAST">
<description>NOP - This command is only used to mark the upper limit of the DO commands in the enumeration</description>
<param index="1">Empty</param>
<param index="2">Empty</param>
<param index="3">Empty</param>
<param index="4">Empty</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="241" name="MAV_CMD_PREFLIGHT_CALIBRATION">
<description>Trigger calibration. This command will be only accepted if in pre-flight mode.</description>
<param index="1">Gyro calibration: 0: no, 1: yes</param>
<param index="2">Magnetometer calibration: 0: no, 1: yes</param>
<param index="3">Ground pressure: 0: no, 1: yes</param>
<param index="4">Radio calibration: 0: no, 1: yes</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="242" name="MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS">
<description>Set sensor offsets. This command will be only accepted if in pre-flight mode.</description>
<param index="1">Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow</param>
<param index="2">X axis offset (or generic dimension 1), in the sensor's raw units</param>
<param index="3">Y axis offset (or generic dimension 2), in the sensor's raw units</param>
<param index="4">Z axis offset (or generic dimension 3), in the sensor's raw units</param>
<param index="5">Generic dimension 4, in the sensor's raw units</param>
<param index="6">Generic dimension 5, in the sensor's raw units</param>
<param index="7">Generic dimension 6, in the sensor's raw units</param>
</entry>
<entry value="245" name="MAV_CMD_PREFLIGHT_STORAGE">
<description>Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.</description>
<param index="1">Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM</param>
<param index="2">Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM</param>
<param index="3">Reserved</param>
<param index="4">Reserved</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="246" name="MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN">
<description>Request the reboot or shutdown of system components.</description>
<param index="1">0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.</param>
<param index="2">0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.</param>
<param index="3">Reserved</param>
<param index="4">Reserved</param>
<param index="5">Empty</param>
<param index="6">Empty</param>
<param index="7">Empty</param>
</entry>
<entry value="252" name="MAV_CMD_OVERRIDE_GOTO">
<description>Hold / continue the current action</description>
<param index="1">MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan</param>
<param index="2">MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position</param>
<param index="3">MAV_FRAME coordinate frame of hold point</param>
<param index="4">Desired yaw angle in degrees</param>
<param index="5">Latitude / X position</param>
<param index="6">Longitude / Y position</param>
<param index="7">Altitude / Z position</param>
</entry>
<entry value="300" name="MAV_CMD_MISSION_START">
<description>start running a mission</description>
<param index="1">first_item: the first mission item to run</param>
<param index="2">last_item: the last mission item to run (after this item is run, the mission ends)</param>
</entry>
<entry value="400" name="MAV_CMD_COMPONENT_ARM_DISARM">
<description>Arms / Disarms a component</description>
<param index="1">1 to arm, 0 to disarm</param>
</entry>
</enum>
<enum name="MAV_DATA_STREAM">
<description>Data stream IDs. A data stream is not a fixed set of messages, but rather a
recommendation to the autopilot software. Individual autopilots may or may not obey
the recommended messages.</description>
<entry value="0" name="MAV_DATA_STREAM_ALL">
<description>Enable all data streams</description>
</entry>
<entry value="1" name="MAV_DATA_STREAM_RAW_SENSORS">
<description>Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.</description>
</entry>
<entry value="2" name="MAV_DATA_STREAM_EXTENDED_STATUS">
<description>Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS</description>
</entry>
<entry value="3" name="MAV_DATA_STREAM_RC_CHANNELS">
<description>Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW</description>
</entry>
<entry value="4" name="MAV_DATA_STREAM_RAW_CONTROLLER">
<description>Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.</description>
</entry>
<entry value="6" name="MAV_DATA_STREAM_POSITION">
<description>Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.</description>
</entry>
<entry value="10" name="MAV_DATA_STREAM_EXTRA1">
<description>Dependent on the autopilot</description>
</entry>
<entry value="11" name="MAV_DATA_STREAM_EXTRA2">
<description>Dependent on the autopilot</description>
</entry>
<entry value="12" name="MAV_DATA_STREAM_EXTRA3">
<description>Dependent on the autopilot</description>
</entry>
</enum>
<enum name="MAV_ROI">
<description> The ROI (region of interest) for the vehicle. This can be
be used by the vehicle for camera/vehicle attitude alignment (see
MAV_CMD_NAV_ROI).</description>
<entry value="0" name="MAV_ROI_NONE">
<description>No region of interest.</description>
</entry>
<entry value="1" name="MAV_ROI_WPNEXT">
<description>Point toward next MISSION.</description>
</entry>
<entry value="2" name="MAV_ROI_WPINDEX">
<description>Point toward given MISSION.</description>
</entry>
<entry value="3" name="MAV_ROI_LOCATION">
<description>Point toward fixed location.</description>
</entry>
<entry value="4" name="MAV_ROI_TARGET">
<description>Point toward of given id.</description>
</entry>
</enum>
<enum name="MAV_CMD_ACK">
<description>ACK / NACK / ERROR values as a result of MAV_CMDs and for mission item transmission.</description>
<entry name="MAV_CMD_ACK_OK">
<description>Command / mission item is ok.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_FAIL">
<description>Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_ACCESS_DENIED">
<description>The system is refusing to accept this command from this source / communication partner.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_NOT_SUPPORTED">
<description>Command or mission item is not supported, other commands would be accepted.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED">
<description>The coordinate frame of this command / mission item is not supported.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE">
<description>The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE">
<description>The X or latitude value is out of range.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE">
<description>The Y or longitude value is out of range.</description>
</entry>
<entry name="MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE">
<description>The Z or altitude value is out of range.</description>
</entry>
</enum>
<enum name="MAV_VAR">
<description>type of a mavlink parameter</description>
<entry value="0" name="MAV_VAR_FLOAT">
<description>32 bit float</description>
</entry>
<entry value="1" name="MAV_VAR_UINT8">
<description>8 bit unsigned integer</description>
</entry>
<entry value="2" name="MAV_VAR_INT8">
<description>8 bit signed integer</description>
</entry>
<entry value="3" name="MAV_VAR_UINT16">
<description>16 bit unsigned integer</description>
</entry>
<entry value="4" name="MAV_VAR_INT16">
<description>16 bit signed integer</description>
</entry>
<entry value="5" name="MAV_VAR_UINT32">
<description>32 bit unsigned integer</description>
</entry>
<entry value="6" name="MAV_VAR_INT32">
<description>32 bit signed integer</description>
</entry>
</enum>
<enum name="MAV_RESULT">
<description>result from a mavlink command</description>
<entry value="0" name="MAV_RESULT_ACCEPTED">
<description>Command ACCEPTED and EXECUTED</description>
</entry>
<entry value="1" name="MAV_RESULT_TEMPORARILY_REJECTED">
<description>Command TEMPORARY REJECTED/DENIED</description>
</entry>
<entry value="2" name="MAV_RESULT_DENIED">
<description>Command PERMANENTLY DENIED</description>
</entry>
<entry value="3" name="MAV_RESULT_UNSUPPORTED">
<description>Command UNKNOWN/UNSUPPORTED</description>
</entry>
<entry value="4" name="MAV_RESULT_FAILED">
<description>Command executed, but failed</description>
</entry>
</enum>
<enum name="MAV_MISSION_RESULT">
<description>result in a mavlink mission ack</description>
<entry value="0" name="MAV_MISSION_ACCEPTED">
<description>mission accepted OK</description>
</entry>
<entry value="1" name="MAV_MISSION_ERROR">
<description>generic error / not accepting mission commands at all right now</description>
</entry>
<entry value="2" name="MAV_MISSION_UNSUPPORTED_FRAME">
<description>coordinate frame is not supported</description>
</entry>
<entry value="3" name="MAV_MISSION_UNSUPPORTED">
<description>command is not supported</description>
</entry>
<entry value="4" name="MAV_MISSION_NO_SPACE">
<description>mission item exceeds storage space</description>
</entry>
<entry value="5" name="MAV_MISSION_INVALID">
<description>one of the parameters has an invalid value</description>
</entry>
<entry value="6" name="MAV_MISSION_INVALID_PARAM1">
<description>param1 has an invalid value</description>
</entry>
<entry value="7" name="MAV_MISSION_INVALID_PARAM2">
<description>param2 has an invalid value</description>
</entry>
<entry value="8" name="MAV_MISSION_INVALID_PARAM3">
<description>param3 has an invalid value</description>
</entry>
<entry value="9" name="MAV_MISSION_INVALID_PARAM4">
<description>param4 has an invalid value</description>
</entry>
<entry value="10" name="MAV_MISSION_INVALID_PARAM5_X">
<description>x/param5 has an invalid value</description>
</entry>
<entry value="11" name="MAV_MISSION_INVALID_PARAM6_Y">
<description>y/param6 has an invalid value</description>
</entry>
<entry value="12" name="MAV_MISSION_INVALID_PARAM7">
<description>param7 has an invalid value</description>
</entry>
<entry value="13" name="MAV_MISSION_INVALID_SEQUENCE">
<description>received waypoint out of sequence</description>
</entry>
<entry value="14" name="MAV_MISSION_DENIED">
<description>not accepting any mission commands from this communication partner</description>
</entry>
</enum>
<enum name="MAV_SEVERITY">
<description>Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/.</description>
<entry value="0" name="MAV_SEVERITY_EMERGENCY">
<description>System is unusable. This is a "panic" condition.</description>
</entry>
<entry value="1" name="MAV_SEVERITY_ALERT">
<description>Action should be taken immediately. Indicates error in non-critical systems.</description>
</entry>
<entry value="2" name="MAV_SEVERITY_CRITICAL">
<description>Action must be taken immediately. Indicates failure in a primary system.</description>
</entry>
<entry value="3" name="MAV_SEVERITY_ERROR">
<description>Indicates an error in secondary/redundant systems.</description>
</entry>
<entry value="4" name="MAV_SEVERITY_WARNING">
<description>Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.</description>
</entry>
<entry value="5" name="MAV_SEVERITY_NOTICE">
<description>An unusual event has occured, though not an error condition. This should be investigated for the root cause.</description>
</entry>
<entry value="6" name="MAV_SEVERITY_INFO">
<description>Normal operational messages. Useful for logging. No action is required for these messages.</description>
</entry>
<entry value="7" name="MAV_SEVERITY_DEBUG">
<description>Useful non-operational messages that can assist in debugging. These should not occur during normal operation.</description>
</entry>
</enum>
</enums>
<messages>
<message id="0" name="HEARTBEAT">
<description>The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot).</description>
<field type="uint8_t" name="type">Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)</field>
<field type="uint8_t" name="autopilot">Autopilot type / class. defined in MAV_AUTOPILOT ENUM</field>
<field type="uint8_t" name="base_mode">System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h</field>
<field type="uint32_t" name="custom_mode">A bitfield for use for autopilot-specific flags.</field>
<field type="uint8_t" name="system_status">System status flag, see MAV_STATE ENUM</field>
<field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version</field>
</message>
<message id="1" name="SYS_STATUS">
<description>The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout.</description>
<field type="uint32_t" name="onboard_control_sensors_present" print_format="0x%04x">Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control</field>
<field type="uint32_t" name="onboard_control_sensors_enabled" print_format="0x%04x">Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control</field>
<field type="uint32_t" name="onboard_control_sensors_health" print_format="0x%04x">Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control</field>
<field type="uint16_t" name="load">Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000</field>
<field type="uint16_t" name="voltage_battery">Battery voltage, in millivolts (1 = 1 millivolt)</field>
<field type="int16_t" name="current_battery">Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current</field>
<field type="int8_t" name="battery_remaining">Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery</field>
<field type="uint16_t" name="drop_rate_comm">Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)</field>
<field type="uint16_t" name="errors_comm">Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)</field>
<field type="uint16_t" name="errors_count1">Autopilot-specific errors</field>
<field type="uint16_t" name="errors_count2">Autopilot-specific errors</field>
<field type="uint16_t" name="errors_count3">Autopilot-specific errors</field>
<field type="uint16_t" name="errors_count4">Autopilot-specific errors</field>
</message>
<message id="2" name="SYSTEM_TIME">
<description>The system time is the time of the master clock, typically the computer clock of the main onboard computer.</description>
<field type="uint64_t" name="time_unix_usec">Timestamp of the master clock in microseconds since UNIX epoch.</field>
<field type="uint32_t" name="time_boot_ms">Timestamp of the component clock since boot time in milliseconds.</field>
</message>
<!-- FIXME to be removed / merged with SYSTEM_TIME -->
<message id="4" name="PING">
<description>A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections.</description>
<field type="uint64_t" name="time_usec">Unix timestamp in microseconds</field>
<field type="uint32_t" name="seq">PING sequence</field>
<field type="uint8_t" name="target_system">0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system</field>
<field type="uint8_t" name="target_component">0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system</field>
</message>
<message id="5" name="CHANGE_OPERATOR_CONTROL">
<description>Request to control this MAV</description>
<field type="uint8_t" name="target_system">System the GCS requests control for</field>
<field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
<field type="uint8_t" name="version">0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.</field>
<field type="char[25]" name="passkey">Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"</field>
</message>
<message id="6" name="CHANGE_OPERATOR_CONTROL_ACK">
<description>Accept / deny control of this MAV</description>
<field type="uint8_t" name="gcs_system_id">ID of the GCS this message </field>
<field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
<field type="uint8_t" name="ack">0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control</field>
</message>
<message id="7" name="AUTH_KEY">
<description>Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety.</description>
<field type="char[32]" name="key">key</field>
</message>
<message id="11" name="SET_MODE">
<description>Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component.</description>
<field type="uint8_t" name="target_system">The system setting the mode</field>
<field type="uint8_t" name="base_mode">The new base mode</field>
<field type="uint32_t" name="custom_mode">The new autopilot-specific mode. This field can be ignored by an autopilot.</field>
</message>
<message id="20" name="PARAM_REQUEST_READ">
<description>Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="char[16]" name="param_id">Onboard parameter id</field>
<field type="int16_t" name="param_index">Parameter index. Send -1 to use the param ID field as identifier</field>
</message>
<message id="21" name="PARAM_REQUEST_LIST">
<description>Request all parameters of this component. After his request, all parameters are emitted.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="22" name="PARAM_VALUE">
<description>Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout.</description>
<field type="char[16]" name="param_id">Onboard parameter id</field>
<field type="float" name="param_value">Onboard parameter value</field>
<field type="uint8_t" name="param_type">Onboard parameter type: see MAV_VAR enum</field>
<field type="uint16_t" name="param_count">Total number of onboard parameters</field>
<field type="uint16_t" name="param_index">Index of this onboard parameter</field>
</message>
<message id="23" name="PARAM_SET">
<description>Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="char[16]" name="param_id">Onboard parameter id</field>
<field type="float" name="param_value">Onboard parameter value</field>
<field type="uint8_t" name="param_type">Onboard parameter type: see MAV_VAR enum</field>
</message>
<message id="24" name="GPS_RAW_INT">
<description>The global position, as returned by the Global Positioning System (GPS). This is
NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame).</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field>
<field type="int32_t" name="lat">Latitude in 1E7 degrees</field>
<field type="int32_t" name="lon">Longitude in 1E7 degrees</field>
<field type="int32_t" name="alt">Altitude in 1E3 meters (millimeters) above MSL</field>
<field type="uint16_t" name="eph">GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535</field>
<field type="uint16_t" name="epv">GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535</field>
<field type="uint16_t" name="vel">GPS ground speed (m/s * 100). If unknown, set to: 65535</field>
<field type="uint16_t" name="cog">Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535</field>
<field type="uint8_t" name="satellites_visible">Number of satellites visible. If unknown, set to 255</field>
</message>
<message id="25" name="GPS_STATUS">
<description>The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites.</description>
<field type="uint8_t" name="satellites_visible">Number of satellites visible</field>
<field type="uint8_t[20]" name="satellite_prn">Global satellite ID</field>
<field type="uint8_t[20]" name="satellite_used">0: Satellite not used, 1: used for localization</field>
<field type="uint8_t[20]" name="satellite_elevation">Elevation (0: right on top of receiver, 90: on the horizon) of satellite</field>
<field type="uint8_t[20]" name="satellite_azimuth">Direction of satellite, 0: 0 deg, 255: 360 deg.</field>
<field type="uint8_t[20]" name="satellite_snr">Signal to noise ratio of satellite</field>
</message>
<message id="26" name="SCALED_IMU">
<description>The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="int16_t" name="xacc">X acceleration (mg)</field>
<field type="int16_t" name="yacc">Y acceleration (mg)</field>
<field type="int16_t" name="zacc">Z acceleration (mg)</field>
<field type="int16_t" name="xgyro">Angular speed around X axis (millirad /sec)</field>
<field type="int16_t" name="ygyro">Angular speed around Y axis (millirad /sec)</field>
<field type="int16_t" name="zgyro">Angular speed around Z axis (millirad /sec)</field>
<field type="int16_t" name="xmag">X Magnetic field (milli tesla)</field>
<field type="int16_t" name="ymag">Y Magnetic field (milli tesla)</field>
<field type="int16_t" name="zmag">Z Magnetic field (milli tesla)</field>
</message>
<message id="27" name="RAW_IMU">
<description>The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging.</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="int16_t" name="xacc">X acceleration (raw)</field>
<field type="int16_t" name="yacc">Y acceleration (raw)</field>
<field type="int16_t" name="zacc">Z acceleration (raw)</field>
<field type="int16_t" name="xgyro">Angular speed around X axis (raw)</field>
<field type="int16_t" name="ygyro">Angular speed around Y axis (raw)</field>
<field type="int16_t" name="zgyro">Angular speed around Z axis (raw)</field>
<field type="int16_t" name="xmag">X Magnetic field (raw)</field>
<field type="int16_t" name="ymag">Y Magnetic field (raw)</field>
<field type="int16_t" name="zmag">Z Magnetic field (raw)</field>
</message>
<message id="28" name="RAW_PRESSURE">
<description>The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values.</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="int16_t" name="press_abs">Absolute pressure (raw)</field>
<field type="int16_t" name="press_diff1">Differential pressure 1 (raw)</field>
<field type="int16_t" name="press_diff2">Differential pressure 2 (raw)</field>
<field type="int16_t" name="temperature">Raw Temperature measurement (raw)</field>
</message>
<message id="29" name="SCALED_PRESSURE">
<description>The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="press_abs">Absolute pressure (hectopascal)</field>
<field type="float" name="press_diff">Differential pressure 1 (hectopascal)</field>
<field type="int16_t" name="temperature">Temperature measurement (0.01 degrees celsius)</field>
</message>
<message id="30" name="ATTITUDE">
<description>The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right).</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="rollspeed">Roll angular speed (rad/s)</field>
<field type="float" name="pitchspeed">Pitch angular speed (rad/s)</field>
<field type="float" name="yawspeed">Yaw angular speed (rad/s)</field>
</message>
<message id="31" name="ATTITUDE_QUATERNION">
<description>The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="float" name="q1">Quaternion component 1</field>
<field type="float" name="q2">Quaternion component 2</field>
<field type="float" name="q3">Quaternion component 3</field>
<field type="float" name="q4">Quaternion component 4</field>
<field type="float" name="rollspeed">Roll angular speed (rad/s)</field>
<field type="float" name="pitchspeed">Pitch angular speed (rad/s)</field>
<field type="float" name="yawspeed">Yaw angular speed (rad/s)</field>
</message>
<message id="32" name="LOCAL_POSITION_NED">
<description>The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="float" name="x">X Position</field>
<field type="float" name="y">Y Position</field>
<field type="float" name="z">Z Position</field>
<field type="float" name="vx">X Speed</field>
<field type="float" name="vy">Y Speed</field>
<field type="float" name="vz">Z Speed</field>
</message>
<message id="33" name="GLOBAL_POSITION_INT">
<description>The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It
is designed as scaled integer message since the resolution of float is not sufficient.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="int32_t" name="lat">Latitude, expressed as * 1E7</field>
<field type="int32_t" name="lon">Longitude, expressed as * 1E7</field>
<field type="int32_t" name="alt">Altitude in meters, expressed as * 1000 (millimeters), above MSL</field>
<field type="int32_t" name="relative_alt">Altitude above ground in meters, expressed as * 1000 (millimeters)</field>
<field type="int16_t" name="vx">Ground X Speed (Latitude), expressed as m/s * 100</field>
<field type="int16_t" name="vy">Ground Y Speed (Longitude), expressed as m/s * 100</field>
<field type="int16_t" name="vz">Ground Z Speed (Altitude), expressed as m/s * 100</field>
<field type="uint16_t" name="hdg">Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535</field>
</message>
<message id="34" name="RC_CHANNELS_SCALED">
<description>The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.</field>
<field type="int16_t" name="chan1_scaled">RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan2_scaled">RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan3_scaled">RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan4_scaled">RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan5_scaled">RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan6_scaled">RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan7_scaled">RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="int16_t" name="chan8_scaled">RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000</field>
<field type="uint8_t" name="rssi">Receive signal strength indicator, 0: 0%, 255: 100%</field>
</message>
<message id="35" name="RC_CHANNELS_RAW">
<description>The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.</field>
<field type="uint16_t" name="chan1_raw">RC channel 1 value, in microseconds</field>
<field type="uint16_t" name="chan2_raw">RC channel 2 value, in microseconds</field>
<field type="uint16_t" name="chan3_raw">RC channel 3 value, in microseconds</field>
<field type="uint16_t" name="chan4_raw">RC channel 4 value, in microseconds</field>
<field type="uint16_t" name="chan5_raw">RC channel 5 value, in microseconds</field>
<field type="uint16_t" name="chan6_raw">RC channel 6 value, in microseconds</field>
<field type="uint16_t" name="chan7_raw">RC channel 7 value, in microseconds</field>
<field type="uint16_t" name="chan8_raw">RC channel 8 value, in microseconds</field>
<field type="uint8_t" name="rssi">Receive signal strength indicator, 0: 0%, 255: 100%</field>
</message>
<message id="36" name="SERVO_OUTPUT_RAW">
<description>The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%.</description>
<field type="uint32_t" name="time_usec">Timestamp (since UNIX epoch or microseconds since system boot)</field>
<field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos.</field>
<field type="uint16_t" name="servo1_raw">Servo output 1 value, in microseconds</field>
<field type="uint16_t" name="servo2_raw">Servo output 2 value, in microseconds</field>
<field type="uint16_t" name="servo3_raw">Servo output 3 value, in microseconds</field>
<field type="uint16_t" name="servo4_raw">Servo output 4 value, in microseconds</field>
<field type="uint16_t" name="servo5_raw">Servo output 5 value, in microseconds</field>
<field type="uint16_t" name="servo6_raw">Servo output 6 value, in microseconds</field>
<field type="uint16_t" name="servo7_raw">Servo output 7 value, in microseconds</field>
<field type="uint16_t" name="servo8_raw">Servo output 8 value, in microseconds</field>
</message>
<message id="37" name="MISSION_REQUEST_PARTIAL_LIST">
<description>Request the overall list of MISSIONs from the system/component. http://qgroundcontrol.org/mavlink/waypoint_protocol</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="int16_t" name="start_index">Start index, 0 by default</field>
<field type="int16_t" name="end_index">End index, -1 by default (-1: send list to end). Else a valid index of the list</field>
</message>
<message id="38" name="MISSION_WRITE_PARTIAL_LIST">
<description>This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED!</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="int16_t" name="start_index">Start index, 0 by default and smaller / equal to the largest index of the current onboard list.</field>
<field type="int16_t" name="end_index">End index, equal or greater than start index.</field>
</message>
<message id="39" name="MISSION_ITEM">
<description>Message encoding a mission item. This message is emitted to announce
the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See also http://qgroundcontrol.org/mavlink/waypoint_protocol.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
<field type="uint8_t" name="frame">The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h</field>
<field type="uint16_t" name="command">The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs</field>
<field type="uint8_t" name="current">false:0, true:1</field>
<field type="uint8_t" name="autocontinue">autocontinue to next wp</field>
<field type="float" name="param1">PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters</field>
<field type="float" name="param2">PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds</field>
<field type="float" name="param3">PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise.</field>
<field type="float" name="param4">PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH</field>
<field type="float" name="x">PARAM5 / local: x position, global: latitude</field>
<field type="float" name="y">PARAM6 / y position: global: longitude</field>
<field type="float" name="z">PARAM7 / z position: global: altitude</field>
</message>
<message id="40" name="MISSION_REQUEST">
<description>Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. http://qgroundcontrol.org/mavlink/waypoint_protocol</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="41" name="MISSION_SET_CURRENT">
<description>Set the mission item with sequence number seq as current item. This means that the MAV will continue to this mission item on the shortest path (not following the mission items in-between).</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="42" name="MISSION_CURRENT">
<description>Message that announces the sequence number of the current active mission item. The MAV will fly towards this mission item.</description>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="43" name="MISSION_REQUEST_LIST">
<description>Request the overall list of mission items from the system/component.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="44" name="MISSION_COUNT">
<description>This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of MISSIONs.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="count">Number of mission items in the sequence</field>
</message>
<message id="45" name="MISSION_CLEAR_ALL">
<description>Delete all mission items at once.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
</message>
<message id="46" name="MISSION_ITEM_REACHED">
<description>A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next MISSION.</description>
<field type="uint16_t" name="seq">Sequence</field>
</message>
<message id="47" name="MISSION_ACK">
<description>Ack message during MISSION handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero).</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint8_t" name="type">See MAV_MISSION_RESULT enum</field>
</message>
<message id="48" name="SET_GPS_GLOBAL_ORIGIN">
<description>As local MISSIONs exist, the global MISSION reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="int32_t" name="latitude">global position * 1E7</field>
<field type="int32_t" name="longitude">global position * 1E7</field>
<field type="int32_t" name="altitude">global position * 1000</field>
</message>
<message id="49" name="GPS_GLOBAL_ORIGIN">
<description>Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position</description>
<field type="int32_t" name="latitude">Latitude (WGS84), expressed as * 1E7</field>
<field type="int32_t" name="longitude">Longitude (WGS84), expressed as * 1E7</field>
<field type="int32_t" name="altitude">Altitude(WGS84), expressed as * 1000</field>
</message>
<message id="50" name="SET_LOCAL_POSITION_SETPOINT">
<description>Set the setpoint for a local position controller. This is the position in local coordinates the MAV should fly to. This message is sent by the path/MISSION planner to the onboard position controller. As some MAVs have a degree of freedom in yaw (e.g. all helicopters/quadrotors), the desired yaw angle is part of the message.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint8_t" name="coordinate_frame">Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">Desired yaw angle</field>
</message>
<message id="51" name="LOCAL_POSITION_SETPOINT">
<description>Transmit the current local setpoint of the controller to other MAVs (collision avoidance) and to the GCS.</description>
<field type="uint8_t" name="coordinate_frame">Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">Desired yaw angle</field>
</message>
<message id="52" name="GLOBAL_POSITION_SETPOINT_INT">
<description>Transmit the current local setpoint of the controller to other MAVs (collision avoidance) and to the GCS.</description>
<field type="uint8_t" name="coordinate_frame">Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT</field>
<field type="int32_t" name="latitude">WGS84 Latitude position in degrees * 1E7</field>
<field type="int32_t" name="longitude">WGS84 Longitude position in degrees * 1E7</field>
<field type="int32_t" name="altitude">WGS84 Altitude in meters * 1000 (positive for up)</field>
<field type="int16_t" name="yaw">Desired yaw angle in degrees * 100</field>
</message>
<message id="53" name="SET_GLOBAL_POSITION_SETPOINT_INT">
<description>Set the current global position setpoint.</description>
<field type="uint8_t" name="coordinate_frame">Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT</field>
<field type="int32_t" name="latitude">WGS84 Latitude position in degrees * 1E7</field>
<field type="int32_t" name="longitude">WGS84 Longitude position in degrees * 1E7</field>
<field type="int32_t" name="altitude">WGS84 Altitude in meters * 1000 (positive for up)</field>
<field type="int16_t" name="yaw">Desired yaw angle in degrees * 100</field>
</message>
<message id="54" name="SAFETY_SET_ALLOWED_AREA">
<description>Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/MISSIONs to accept and which to reject. Safety areas are often enforced by national or competition regulations.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint8_t" name="frame">Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
<field type="float" name="p1x">x position 1 / Latitude 1</field>
<field type="float" name="p1y">y position 1 / Longitude 1</field>
<field type="float" name="p1z">z position 1 / Altitude 1</field>
<field type="float" name="p2x">x position 2 / Latitude 2</field>
<field type="float" name="p2y">y position 2 / Longitude 2</field>
<field type="float" name="p2z">z position 2 / Altitude 2</field>
</message>
<message id="55" name="SAFETY_ALLOWED_AREA">
<description>Read out the safety zone the MAV currently assumes.</description>
<field type="uint8_t" name="frame">Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
<field type="float" name="p1x">x position 1 / Latitude 1</field>
<field type="float" name="p1y">y position 1 / Longitude 1</field>
<field type="float" name="p1z">z position 1 / Altitude 1</field>
<field type="float" name="p2x">x position 2 / Latitude 2</field>
<field type="float" name="p2y">y position 2 / Longitude 2</field>
<field type="float" name="p2z">z position 2 / Altitude 2</field>
</message>
<message id="56" name="SET_ROLL_PITCH_YAW_THRUST">
<description>Set roll, pitch and yaw.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="roll">Desired roll angle in radians</field>
<field type="float" name="pitch">Desired pitch angle in radians</field>
<field type="float" name="yaw">Desired yaw angle in radians</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="57" name="SET_ROLL_PITCH_YAW_SPEED_THRUST">
<description>Set roll, pitch and yaw.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="roll_speed">Desired roll angular speed in rad/s</field>
<field type="float" name="pitch_speed">Desired pitch angular speed in rad/s</field>
<field type="float" name="yaw_speed">Desired yaw angular speed in rad/s</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="58" name="ROLL_PITCH_YAW_THRUST_SETPOINT">
<description>Setpoint in roll, pitch, yaw currently active on the system.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp in milliseconds since system boot</field>
<field type="float" name="roll">Desired roll angle in radians</field>
<field type="float" name="pitch">Desired pitch angle in radians</field>
<field type="float" name="yaw">Desired yaw angle in radians</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="59" name="ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT">
<description>Setpoint in rollspeed, pitchspeed, yawspeed currently active on the system.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp in milliseconds since system boot</field>
<field type="float" name="roll_speed">Desired roll angular speed in rad/s</field>
<field type="float" name="pitch_speed">Desired pitch angular speed in rad/s</field>
<field type="float" name="yaw_speed">Desired yaw angular speed in rad/s</field>
<field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
</message>
<message id="60" name="SET_QUAD_MOTORS_SETPOINT">
<description>Setpoint in the four motor speeds</description>
<field type="uint8_t" name="target_system">System ID of the system that should set these motor commands</field>
<field type="uint16_t" name="motor_front_nw">Front motor in + configuration, front left motor in x configuration</field>
<field type="uint16_t" name="motor_right_ne">Right motor in + configuration, front right motor in x configuration</field>
<field type="uint16_t" name="motor_back_se">Back motor in + configuration, back right motor in x configuration</field>
<field type="uint16_t" name="motor_left_sw">Left motor in + configuration, back left motor in x configuration</field>
</message>
<message id="61" name="SET_QUAD_SWARM_ROLL_PITCH_YAW_THRUST">
<description></description>
<field type="uint8_t[6]" name="target_systems">System IDs for 6 quadrotors: 0..5, the ID's are the MAVLink IDs</field>
<field type="int16_t[6]" name="roll">Desired roll angle in radians, scaled to int16 for 6 quadrotors: 0..5</field>
<field type="int16_t[6]" name="pitch">Desired pitch angle in radians, scaled to int16 for 6 quadrotors: 0..5</field>
<field type="int16_t[6]" name="yaw">Desired yaw angle in radians, scaled to int16 for 6 quadrotors: 0..5</field>
<field type="uint16_t[6]" name="thrust">Collective thrust, scaled to uint16 for 6 quadrotors: 0..5</field>
</message>
<message id="62" name="NAV_CONTROLLER_OUTPUT">
<description>Outputs of the APM navigation controller. The primary use of this message is to check the response and signs of the controller before actual flight and to assist with tuning controller parameters.</description>
<field type="float" name="nav_roll">Current desired roll in degrees</field>
<field type="float" name="nav_pitch">Current desired pitch in degrees</field>
<field type="int16_t" name="nav_bearing">Current desired heading in degrees</field>
<field type="int16_t" name="target_bearing">Bearing to current MISSION/target in degrees</field>
<field type="uint16_t" name="wp_dist">Distance to active MISSION in meters</field>
<field type="float" name="alt_error">Current altitude error in meters</field>
<field type="float" name="aspd_error">Current airspeed error in meters/second</field>
<field type="float" name="xtrack_error">Current crosstrack error on x-y plane in meters</field>
</message>
<message id="64" name="STATE_CORRECTION">
<description>Corrects the systems state by adding an error correction term to the position and velocity, and by rotating the attitude by a correction angle.</description>
<field type="float" name="xErr">x position error</field>
<field type="float" name="yErr">y position error</field>
<field type="float" name="zErr">z position error</field>
<field type="float" name="rollErr">roll error (radians)</field>
<field type="float" name="pitchErr">pitch error (radians)</field>
<field type="float" name="yawErr">yaw error (radians)</field>
<field type="float" name="vxErr">x velocity</field>
<field type="float" name="vyErr">y velocity</field>
<field type="float" name="vzErr">z velocity</field>
</message>
<message id="66" name="REQUEST_DATA_STREAM">
<field type="uint8_t" name="target_system">The target requested to send the message stream.</field>
<field type="uint8_t" name="target_component">The target requested to send the message stream.</field>
<field type="uint8_t" name="req_stream_id">The ID of the requested data stream</field>
<field type="uint16_t" name="req_message_rate">The requested interval between two messages of this type</field>
<field type="uint8_t" name="start_stop">1 to start sending, 0 to stop sending.</field>
</message>
<message id="67" name="DATA_STREAM">
<field type="uint8_t" name="stream_id">The ID of the requested data stream</field>
<field type="uint16_t" name="message_rate">The requested interval between two messages of this type</field>
<field type="uint8_t" name="on_off">1 stream is enabled, 0 stream is stopped.</field>
</message>
<message id="69" name="MANUAL_CONTROL">
<field type="uint8_t" name="target">The system to be controlled</field>
<field type="float" name="roll">roll</field>
<field type="float" name="pitch">pitch</field>
<field type="float" name="yaw">yaw</field>
<field type="float" name="thrust">thrust</field>
<field type="uint8_t" name="roll_manual">roll control enabled auto:0, manual:1</field>
<field type="uint8_t" name="pitch_manual">pitch auto:0, manual:1</field>
<field type="uint8_t" name="yaw_manual">yaw auto:0, manual:1</field>
<field type="uint8_t" name="thrust_manual">thrust auto:0, manual:1</field>
</message>
<message id="70" name="RC_CHANNELS_OVERRIDE">
<description>The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of -1 means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="uint16_t" name="chan1_raw">RC channel 1 value, in microseconds</field>
<field type="uint16_t" name="chan2_raw">RC channel 2 value, in microseconds</field>
<field type="uint16_t" name="chan3_raw">RC channel 3 value, in microseconds</field>
<field type="uint16_t" name="chan4_raw">RC channel 4 value, in microseconds</field>
<field type="uint16_t" name="chan5_raw">RC channel 5 value, in microseconds</field>
<field type="uint16_t" name="chan6_raw">RC channel 6 value, in microseconds</field>
<field type="uint16_t" name="chan7_raw">RC channel 7 value, in microseconds</field>
<field type="uint16_t" name="chan8_raw">RC channel 8 value, in microseconds</field>
</message>
<message id="74" name="VFR_HUD">
<description>Metrics typically displayed on a HUD for fixed wing aircraft</description>
<field type="float" name="airspeed">Current airspeed in m/s</field>
<field type="float" name="groundspeed">Current ground speed in m/s</field>
<field type="int16_t" name="heading">Current heading in degrees, in compass units (0..360, 0=north)</field>
<field type="uint16_t" name="throttle">Current throttle setting in integer percent, 0 to 100</field>
<field type="float" name="alt">Current altitude (MSL), in meters</field>
<field type="float" name="climb">Current climb rate in meters/second</field>
</message>
<message id="76" name="COMMAND_LONG">
<description>Send a command with up to four parameters to the MAV</description>
<field type="uint8_t" name="target_system">System which should execute the command</field>
<field type="uint8_t" name="target_component">Component which should execute the command, 0 for all components</field>
<field type="uint16_t" name="command">Command ID, as defined by MAV_CMD enum.</field>
<field type="uint8_t" name="confirmation">0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)</field>
<field type="float" name="param1">Parameter 1, as defined by MAV_CMD enum.</field>
<field type="float" name="param2">Parameter 2, as defined by MAV_CMD enum.</field>
<field type="float" name="param3">Parameter 3, as defined by MAV_CMD enum.</field>
<field type="float" name="param4">Parameter 4, as defined by MAV_CMD enum.</field>
<field type="float" name="param5">Parameter 5, as defined by MAV_CMD enum.</field>
<field type="float" name="param6">Parameter 6, as defined by MAV_CMD enum.</field>
<field type="float" name="param7">Parameter 7, as defined by MAV_CMD enum.</field>
</message>
<message id="77" name="COMMAND_ACK">
<description>Report status of a command. Includes feedback wether the command was executed.</description>
<field type="uint16_t" name="command">Command ID, as defined by MAV_CMD enum.</field>
<field type="uint8_t" name="result">See MAV_RESULT enum</field>
</message>
<message id="89" name="LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET">
<description>The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="float" name="x">X Position</field>
<field type="float" name="y">Y Position</field>
<field type="float" name="z">Z Position</field>
<field type="float" name="roll">Roll</field>
<field type="float" name="pitch">Pitch</field>
<field type="float" name="yaw">Yaw</field>
</message>
<message id="90" name="HIL_STATE">
<description>Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations.</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="float" name="roll">Roll angle (rad)</field>
<field type="float" name="pitch">Pitch angle (rad)</field>
<field type="float" name="yaw">Yaw angle (rad)</field>
<field type="float" name="rollspeed">Roll angular speed (rad/s)</field>
<field type="float" name="pitchspeed">Pitch angular speed (rad/s)</field>
<field type="float" name="yawspeed">Yaw angular speed (rad/s)</field>
<field type="int32_t" name="lat">Latitude, expressed as * 1E7</field>
<field type="int32_t" name="lon">Longitude, expressed as * 1E7</field>
<field type="int32_t" name="alt">Altitude in meters, expressed as * 1000 (millimeters)</field>
<field type="int16_t" name="vx">Ground X Speed (Latitude), expressed as m/s * 100</field>
<field type="int16_t" name="vy">Ground Y Speed (Longitude), expressed as m/s * 100</field>
<field type="int16_t" name="vz">Ground Z Speed (Altitude), expressed as m/s * 100</field>
<field type="int16_t" name="xacc">X acceleration (mg)</field>
<field type="int16_t" name="yacc">Y acceleration (mg)</field>
<field type="int16_t" name="zacc">Z acceleration (mg)</field>
</message>
<message id="91" name="HIL_CONTROLS">
<description>Sent from autopilot to simulation. Hardware in the loop control outputs</description>
<field name="time_usec" type="uint64_t">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field name="roll_ailerons" type="float">Control output -1 .. 1</field>
<field name="pitch_elevator" type="float">Control output -1 .. 1</field>
<field name="yaw_rudder" type="float">Control output -1 .. 1</field>
<field name="throttle" type="float">Throttle 0 .. 1</field>
<field name="aux1" type="float">Aux 1, -1 .. 1</field>
<field name="aux2" type="float">Aux 2, -1 .. 1</field>
<field name="aux3" type="float">Aux 3, -1 .. 1</field>
<field name="aux4" type="float">Aux 4, -1 .. 1</field>
<field name="mode" type="uint8_t">System mode (MAV_MODE)</field>
<field name="nav_mode" type="uint8_t">Navigation mode (MAV_NAV_MODE)</field>
</message>
<message id="92" name="HIL_RC_INPUTS_RAW">
<description>Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="uint16_t" name="chan1_raw">RC channel 1 value, in microseconds</field>
<field type="uint16_t" name="chan2_raw">RC channel 2 value, in microseconds</field>
<field type="uint16_t" name="chan3_raw">RC channel 3 value, in microseconds</field>
<field type="uint16_t" name="chan4_raw">RC channel 4 value, in microseconds</field>
<field type="uint16_t" name="chan5_raw">RC channel 5 value, in microseconds</field>
<field type="uint16_t" name="chan6_raw">RC channel 6 value, in microseconds</field>
<field type="uint16_t" name="chan7_raw">RC channel 7 value, in microseconds</field>
<field type="uint16_t" name="chan8_raw">RC channel 8 value, in microseconds</field>
<field type="uint16_t" name="chan9_raw">RC channel 9 value, in microseconds</field>
<field type="uint16_t" name="chan10_raw">RC channel 10 value, in microseconds</field>
<field type="uint16_t" name="chan11_raw">RC channel 11 value, in microseconds</field>
<field type="uint16_t" name="chan12_raw">RC channel 12 value, in microseconds</field>
<field type="uint8_t" name="rssi">Receive signal strength indicator, 0: 0%, 255: 100%</field>
</message>
<message id="100" name="OPTICAL_FLOW">
<description>Optical flow from a flow sensor (e.g. optical mouse sensor)</description>
<field type="uint64_t" name="time_usec">Timestamp (UNIX)</field>
<field type="uint8_t" name="sensor_id">Sensor ID</field>
<field type="int16_t" name="flow_x">Flow in pixels in x-sensor direction</field>
<field type="int16_t" name="flow_y">Flow in pixels in y-sensor direction</field>
<field type="float" name="flow_comp_m_x">Flow in meters in x-sensor direction, angular-speed compensated</field>
<field type="float" name="flow_comp_m_y">Flow in meters in y-sensor direction, angular-speed compensated</field>
<field type="uint8_t" name="quality">Optical flow quality / confidence. 0: bad, 255: maximum quality</field>
<field type="float" name="ground_distance">Ground distance in meters. Positive value: distance known. Negative value: Unknown distance</field>
</message>
<message id="101" name="GLOBAL_VISION_POSITION_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X position</field>
<field type="float" name="y">Global Y position</field>
<field type="float" name="z">Global Z position</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
</message>
<message id="102" name="VISION_POSITION_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X position</field>
<field type="float" name="y">Global Y position</field>
<field type="float" name="z">Global Z position</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
</message>
<message id="103" name="VISION_SPEED_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X speed</field>
<field type="float" name="y">Global Y speed</field>
<field type="float" name="z">Global Z speed</field>
</message>
<message id="104" name="VICON_POSITION_ESTIMATE">
<field type="uint64_t" name="usec">Timestamp (milliseconds)</field>
<field type="float" name="x">Global X position</field>
<field type="float" name="y">Global Y position</field>
<field type="float" name="z">Global Z position</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
</message>
<!-- MESSAGE IDs 150 - 240: Space for custom messages in individual projectname_messages.xml files -->
<message id="249" name="MEMORY_VECT">
<description>Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
<field type="uint16_t" name="address">Starting address of the debug variables</field>
<field type="uint8_t" name="ver">Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below</field>
<field type="uint8_t" name="type">Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14</field>
<field type="int8_t[32]" name="value">Memory contents at specified address</field>
</message>
<message id="250" name="DEBUG_VECT">
<field type="char[10]" name="name">Name</field>
<field type="uint64_t" name="time_usec">Timestamp</field>
<field type="float" name="x">x</field>
<field type="float" name="y">y</field>
<field type="float" name="z">z</field>
</message>
<message id="251" name="NAMED_VALUE_FLOAT">
<description>Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="char[10]" name="name">Name of the debug variable</field>
<field type="float" name="value">Floating point value</field>
</message>
<message id="252" name="NAMED_VALUE_INT">
<description>Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="char[10]" name="name">Name of the debug variable</field>
<field type="int32_t" name="value">Signed integer value</field>
</message>
<message id="253" name="STATUSTEXT">
<description>Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz).</description>
<field type="uint8_t" name="severity">Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY.</field>
<field type="char[50]" name="text">Status text message, without null termination character</field>
</message>
<message id="254" name="DEBUG">
<description>Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N.</description>
<field type="uint32_t" name="time_boot_ms">Timestamp (milliseconds since system boot)</field>
<field type="uint8_t" name="ind">index of debug variable</field>
<field type="float" name="value">DEBUG value</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/matrixpilot.xml
0,0 → 1,14
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<!-- note that MatrixPilot specific messages should use the command id
range from 150 to 250, to leave plenty of room for growth
of common.xml
 
If you prototype a message here, then you should consider if it
is general enough to move into common.xml later
-->
<messages>
 
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/minimal.xml
0,0 → 1,189
<?xml version='1.0'?>
<mavlink>
<version>2</version>
<enums>
<enum name="MAV_AUTOPILOT">
<description>Micro air vehicle / autopilot classes. This identifies the individual model.</description>
<entry value="0" name="MAV_AUTOPILOT_GENERIC">
<description>Generic autopilot, full support for everything</description>
</entry>
<entry value="1" name="MAV_AUTOPILOT_PIXHAWK">
<description>PIXHAWK autopilot, http://pixhawk.ethz.ch</description>
</entry>
<entry value="2" name="MAV_AUTOPILOT_SLUGS">
<description>SLUGS autopilot, http://slugsuav.soe.ucsc.edu</description>
</entry>
<entry value="3" name="MAV_AUTOPILOT_ARDUPILOTMEGA">
<description>ArduPilotMega / ArduCopter, http://diydrones.com</description>
</entry>
<entry value="4" name="MAV_AUTOPILOT_OPENPILOT">
<description>OpenPilot, http://openpilot.org</description>
</entry>
<entry value="5" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY">
<description>Generic autopilot only supporting simple waypoints</description>
</entry>
<entry value="6" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY">
<description>Generic autopilot supporting waypoints and other simple navigation commands</description>
</entry>
<entry value="7" name="MAV_AUTOPILOT_GENERIC_MISSION_FULL">
<description>Generic autopilot supporting the full mission command set</description>
</entry>
<entry value="8" name="MAV_AUTOPILOT_INVALID">
<description>No valid autopilot, e.g. a GCS or other MAVLink component</description>
</entry>
<entry value="9" name="MAV_AUTOPILOT_PPZ">
<description>PPZ UAV - http://nongnu.org/paparazzi</description>
</entry>
<entry value="10" name="MAV_AUTOPILOT_UDB">
<description>UAV Dev Board</description>
</entry>
<entry value="11" name="MAV_AUTOPILOT_FP">
<description>FlexiPilot</description>
</entry>
</enum>
<enum name="MAV_TYPE">
<entry value="0" name="MAV_TYPE_GENERIC">
<description>Generic micro air vehicle.</description>
</entry>
<entry value="1" name="MAV_TYPE_FIXED_WING">
<description>Fixed wing aircraft.</description>
</entry>
<entry value="2" name="MAV_TYPE_QUADROTOR">
<description>Quadrotor</description>
</entry>
<entry value="3" name="MAV_TYPE_COAXIAL">
<description>Coaxial helicopter</description>
</entry>
<entry value="4" name="MAV_TYPE_HELICOPTER">
<description>Normal helicopter with tail rotor.</description>
</entry>
<entry value="5" name="MAV_TYPE_ANTENNA_TRACKER">
<description>Ground installation</description>
</entry>
<entry value="6" name="MAV_TYPE_GCS">
<description>Operator control unit / ground control station</description>
</entry>
<entry value="7" name="MAV_TYPE_AIRSHIP">
<description>Airship, controlled</description>
</entry>
<entry value="8" name="MAV_TYPE_FREE_BALLOON">
<description>Free balloon, uncontrolled</description>
</entry>
<entry value="9" name="MAV_TYPE_ROCKET">
<description>Rocket</description>
</entry>
<entry value="10" name="MAV_TYPE_GROUND_ROVER">
<description>Ground rover</description>
</entry>
<entry value="11" name="MAV_TYPE_SURFACE_BOAT">
<description>Surface vessel, boat, ship</description>
</entry>
<entry value="12" name="MAV_TYPE_SUBMARINE">
<description>Submarine</description>
</entry>
<entry value="13" name="MAV_TYPE_HEXAROTOR">
<description>Hexarotor</description>
</entry>
<entry value="14" name="MAV_TYPE_OCTOROTOR">
<description>Octorotor</description>
</entry>
<entry value="15" name="MAV_TYPE_TRICOPTER">
<description>Octorotor</description>
</entry>
<entry value="16" name="MAV_TYPE_FLAPPING_WING">
<description>Flapping wing</description>
</entry>
</enum>
<enum name="MAV_MODE_FLAG">
<description>These flags encode the MAV mode.</description>
<entry value="128" name="MAV_MODE_FLAG_SAFETY_ARMED">
<description>0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.</description>
</entry>
<entry value="64" name="MAV_MODE_FLAG_MANUAL_INPUT_ENABLED">
<description>0b01000000 remote control input is enabled.</description>
</entry>
<entry value="32" name="MAV_MODE_FLAG_HIL_ENABLED">
<description>0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.</description>
</entry>
<entry value="16" name="MAV_MODE_FLAG_STABILIZE_ENABLED">
<description>0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.</description>
</entry>
<entry value="8" name="MAV_MODE_FLAG_GUIDED_ENABLED">
<description>0b00001000 guided mode enabled, system flies MISSIONs / mission items.</description>
</entry>
<entry value="4" name="MAV_MODE_FLAG_AUTO_ENABLED">
<description>0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.</description>
</entry>
<entry value="2" name="MAV_MODE_FLAG_TEST_ENABLED">
<description>0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.</description>
</entry>
<entry value="1" name="MAV_MODE_FLAG_CUSTOM_MODE_ENABLED">
<description>0b00000001 Reserved for future use.</description>
</entry>
</enum>
<enum name="MAV_MODE_FLAG_DECODE_POSITION">
<description>These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not.</description>
<entry value="128" name="MAV_MODE_FLAG_DECODE_POSITION_SAFETY">
<description>First bit: 10000000</description>
</entry>
<entry value="64" name="MAV_MODE_FLAG_DECODE_POSITION_MANUAL">
<description>Second bit: 01000000</description>
</entry>
<entry value="32" name="MAV_MODE_FLAG_DECODE_POSITION_HIL">
<description>Third bit: 00100000</description>
</entry>
<entry value="16" name="MAV_MODE_FLAG_DECODE_POSITION_STABILIZE">
<description>Fourth bit: 00010000</description>
</entry>
<entry value="8" name="MAV_MODE_FLAG_DECODE_POSITION_GUIDED">
<description>Fifth bit: 00001000</description>
</entry>
<entry value="4" name="MAV_MODE_FLAG_DECODE_POSITION_AUTO">
<description>Sixt bit: 00000100</description>
</entry>
<entry value="2" name="MAV_MODE_FLAG_DECODE_POSITION_TEST">
<description>Seventh bit: 00000010</description>
</entry>
<entry value="1" name="MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE">
<description>Eighth bit: 00000001</description>
</entry>
</enum>
<enum name="MAV_STATE">
<entry value="0" name="MAV_STATE_UNINIT">
<description>Uninitialized system, state is unknown.</description>
</entry>
<entry name="MAV_STATE_BOOT">
<description>System is booting up.</description>
</entry>
<entry name="MAV_STATE_CALIBRATING">
<description>System is calibrating and not flight-ready.</description>
</entry>
<entry name="MAV_STATE_STANDBY">
<description>System is grounded and on standby. It can be launched any time.</description>
</entry>
<entry name="MAV_STATE_ACTIVE">
<description>System is active and might be already airborne. Motors are engaged.</description>
</entry>
<entry name="MAV_STATE_CRITICAL">
<description>System is in a non-normal flight mode. It can however still navigate.</description>
</entry>
<entry name="MAV_STATE_EMERGENCY">
<description>System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.</description>
</entry>
<entry name="MAV_STATE_POWEROFF">
<description>System just initialized its power-down sequence, will shut down now.</description>
</entry>
</enum>
</enums>
<messages>
<message id="0" name="HEARTBEAT">
<description>The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot).</description>
<field type="uint8_t" name="type">Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)</field>
<field type="uint8_t" name="autopilot">Autopilot type / class. defined in MAV_AUTOPILOT ENUM</field>
<field type="uint8_t" name="base_mode">System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h</field>
<field type="uint32_t" name="custom_mode">A bitfield for use for autopilot-specific flags.</field>
<field type="uint8_t" name="system_status">System status flag, see MAV_STATE ENUM</field>
<field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/pixhawk.xml
0,0 → 1,195
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<enums>
<enum name="DATA_TYPES">
<description>Content Types for data transmission handshake</description>
<entry value="1" name="DATA_TYPE_JPEG_IMAGE"/>
<entry value="2" name="DATA_TYPE_RAW_IMAGE"/>
<entry value="3" name="DATA_TYPE_KINECT"/>
</enum>
</enums>
<messages>
<message id="151" name="SET_CAM_SHUTTER">
<field type="uint8_t" name="cam_no">Camera id</field>
<field type="uint8_t" name="cam_mode">Camera mode: 0 = auto, 1 = manual</field>
<field type="uint8_t" name="trigger_pin">Trigger pin, 0-3 for PtGrey FireFly</field>
<field type="uint16_t" name="interval">Shutter interval, in microseconds</field>
<field type="uint16_t" name="exposure">Exposure time, in microseconds</field>
<field type="float" name="gain">Camera gain</field>
</message>
<message id="152" name="IMAGE_TRIGGERED">
<field type="uint64_t" name="timestamp">Timestamp</field>
<field type="uint32_t" name="seq">IMU seq</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
<field type="float" name="local_z">Local frame Z coordinate (height over ground)</field>
<field type="float" name="lat">GPS X coordinate</field>
<field type="float" name="lon">GPS Y coordinate</field>
<field type="float" name="alt">Global frame altitude</field>
<field type="float" name="ground_x">Ground truth X</field>
<field type="float" name="ground_y">Ground truth Y</field>
<field type="float" name="ground_z">Ground truth Z</field>
</message>
<message id="153" name="IMAGE_TRIGGER_CONTROL">
<field type="uint8_t" name="enable">0 to disable, 1 to enable</field>
</message>
<message id="154" name="IMAGE_AVAILABLE">
<field type="uint64_t" name="cam_id">Camera id</field>
<field type="uint8_t" name="cam_no">Camera # (starts with 0)</field>
<field type="uint64_t" name="timestamp">Timestamp</field>
<field type="uint64_t" name="valid_until">Until which timestamp this buffer will stay valid</field>
<field type="uint32_t" name="img_seq">The image sequence number</field>
<field type="uint32_t" name="img_buf_index">Position of the image in the buffer, starts with 0</field>
<field type="uint16_t" name="width">Image width</field>
<field type="uint16_t" name="height">Image height</field>
<field type="uint16_t" name="depth">Image depth</field>
<field type="uint8_t" name="channels">Image channels</field>
<field type="uint32_t" name="key">Shared memory area key</field>
<field type="uint32_t" name="exposure">Exposure time, in microseconds</field>
<field type="float" name="gain">Camera gain</field>
<field type="float" name="roll">Roll angle in rad</field>
<field type="float" name="pitch">Pitch angle in rad</field>
<field type="float" name="yaw">Yaw angle in rad</field>
<field type="float" name="local_z">Local frame Z coordinate (height over ground)</field>
<field type="float" name="lat">GPS X coordinate</field>
<field type="float" name="lon">GPS Y coordinate</field>
<field type="float" name="alt">Global frame altitude</field>
<field type="float" name="ground_x">Ground truth X</field>
<field type="float" name="ground_y">Ground truth Y</field>
<field type="float" name="ground_z">Ground truth Z</field>
</message>
<message id="160" name="SET_POSITION_CONTROL_OFFSET">
<description>Message sent to the MAV to set a new offset from the currently controlled position</description>
<field type="uint8_t" name="target_system">System ID</field>
<field type="uint8_t" name="target_component">Component ID</field>
<field type="float" name="x">x position offset</field>
<field type="float" name="y">y position offset</field>
<field type="float" name="z">z position offset</field>
<field type="float" name="yaw">yaw orientation offset in radians, 0 = NORTH</field>
</message>
<!-- Message sent by the MAV once it sets a new position as reference in the controller -->
<message id="170" name="POSITION_CONTROL_SETPOINT">
<field type="uint16_t" name="id">ID of waypoint, 0 for plain position</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="yaw">yaw orientation in radians, 0 = NORTH</field>
</message>
<message id="171" name="MARKER">
<field type="uint16_t" name="id">ID</field>
<field type="float" name="x">x position</field>
<field type="float" name="y">y position</field>
<field type="float" name="z">z position</field>
<field type="float" name="roll">roll orientation</field>
<field type="float" name="pitch">pitch orientation</field>
<field type="float" name="yaw">yaw orientation</field>
</message>
<message id="172" name="RAW_AUX">
<field type="uint16_t" name="adc1">ADC1 (J405 ADC3, LPC2148 AD0.6)</field>
<field type="uint16_t" name="adc2">ADC2 (J405 ADC5, LPC2148 AD0.2)</field>
<field type="uint16_t" name="adc3">ADC3 (J405 ADC6, LPC2148 AD0.1)</field>
<field type="uint16_t" name="adc4">ADC4 (J405 ADC7, LPC2148 AD1.3)</field>
<field type="uint16_t" name="vbat">Battery voltage</field>
<field type="int16_t" name="temp">Temperature (degrees celcius)</field>
<field type="int32_t" name="baro">Barometric pressure (hecto Pascal)</field>
</message>
<message id="180" name="WATCHDOG_HEARTBEAT">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_count">Number of processes</field>
</message>
<message id="181" name="WATCHDOG_PROCESS_INFO">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="char[100]" name="name">Process name</field>
<field type="char[147]" name="arguments">Process arguments</field>
<field type="int32_t" name="timeout">Timeout (seconds)</field>
</message>
<message id="182" name="WATCHDOG_PROCESS_STATUS">
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="uint8_t" name="state">Is running / finished / suspended / crashed</field>
<field type="uint8_t" name="muted">Is muted</field>
<field type="int32_t" name="pid">PID</field>
<field type="uint16_t" name="crashes">Number of crashes</field>
</message>
<message id="183" name="WATCHDOG_COMMAND">
<field type="uint8_t" name="target_system_id">Target system ID</field>
<field type="uint16_t" name="watchdog_id">Watchdog ID</field>
<field type="uint16_t" name="process_id">Process ID</field>
<field type="uint8_t" name="command_id">Command ID</field>
</message>
<message id="190" name="PATTERN_DETECTED">
<field type="uint8_t" name="type">0: Pattern, 1: Letter</field>
<field type="float" name="confidence">Confidence of detection</field>
<field type="char[100]" name="file">Pattern file name</field>
<field type="uint8_t" name="detected">Accepted as true detection, 0 no, 1 yes</field>
</message>
<message id="191" name="POINT_OF_INTEREST">
<description>Notifies the operator about a point of interest (POI). This can be anything detected by the
system. This generic message is intented to help interfacing to generic visualizations and to display
the POI on a map.
</description>
<field type="uint8_t" name="type">0: Notice, 1: Warning, 2: Critical, 3: Emergency, 4: Debug</field>
<field type="uint8_t" name="color">0: blue, 1: yellow, 2: red, 3: orange, 4: green, 5: magenta</field>
<field type="uint8_t" name="coordinate_system">0: global, 1:local</field>
<field type="uint16_t" name="timeout">0: no timeout, >1: timeout in seconds</field>
<field type="float" name="x">X Position</field>
<field type="float" name="y">Y Position</field>
<field type="float" name="z">Z Position</field>
<field type="char[26]" name="name">POI name</field>
</message>
<message id="192" name="POINT_OF_INTEREST_CONNECTION">
<description>Notifies the operator about the connection of two point of interests (POI). This can be anything detected by the
system. This generic message is intented to help interfacing to generic visualizations and to display
the POI on a map.
</description>
<field type="uint8_t" name="type">0: Notice, 1: Warning, 2: Critical, 3: Emergency, 4: Debug</field>
<field type="uint8_t" name="color">0: blue, 1: yellow, 2: red, 3: orange, 4: green, 5: magenta</field>
<field type="uint8_t" name="coordinate_system">0: global, 1:local</field>
<field type="uint16_t" name="timeout">0: no timeout, >1: timeout in seconds</field>
<field type="float" name="xp1">X1 Position</field>
<field type="float" name="yp1">Y1 Position</field>
<field type="float" name="zp1">Z1 Position</field>
<field type="float" name="xp2">X2 Position</field>
<field type="float" name="yp2">Y2 Position</field>
<field type="float" name="zp2">Z2 Position</field>
<field type="char[26]" name="name">POI connection name</field>
</message>
<message id="193" name="DATA_TRANSMISSION_HANDSHAKE">
<field type="uint8_t" name="type">type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h)</field>
<field type="uint32_t" name="size">total data size in bytes (set on ACK only)</field>
<field type="uint16_t" name="width">Width of a matrix or image</field>
<field type="uint16_t" name="height">Height of a matrix or image</field>
<field type="uint8_t" name="packets">number of packets beeing sent (set on ACK only)</field>
<field type="uint8_t" name="payload">payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only)</field>
<field type="uint8_t" name="jpg_quality">JPEG quality out of [1,100]</field>
</message>
<message id="194" name="ENCAPSULATED_DATA">
<field type="uint16_t" name="seqnr">sequence number (starting with 0 on every transmission)</field>
<field type="uint8_t[253]" name="data">image data bytes</field>
</message>
<message id="195" name="BRIEF_FEATURE">
<field type="float" name="x">x position in m</field>
<field type="float" name="y">y position in m</field>
<field type="float" name="z">z position in m</field>
<field type="uint8_t" name="orientation_assignment">Orientation assignment 0: false, 1:true</field>
<field type="uint16_t" name="size">Size in pixels</field>
<field type="uint16_t" name="orientation">Orientation</field>
<field type="uint8_t[32]" name="descriptor">Descriptor</field>
<field type="float" name="response">Harris operator response at this location</field>
</message>
<message id="200" name="ATTITUDE_CONTROL">
<field type="uint8_t" name="target">The system to be controlled</field>
<field type="float" name="roll">roll</field>
<field type="float" name="pitch">pitch</field>
<field type="float" name="yaw">yaw</field>
<field type="float" name="thrust">thrust</field>
<field type="uint8_t" name="roll_manual">roll control enabled auto:0, manual:1</field>
<field type="uint8_t" name="pitch_manual">pitch auto:0, manual:1</field>
<field type="uint8_t" name="yaw_manual">yaw auto:0, manual:1</field>
<field type="uint8_t" name="thrust_manual">thrust auto:0, manual:1</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/sensesoar.xml
0,0 → 1,83
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<enums>
<enum name="SENSESOAR_MODE">
<description> Different flight modes </description>
<entry name="SENSESOAR_MODE_GLIDING"> Gliding mode with motors off</entry>
<entry name="SENSESOAR_MODE_AUTONOMOUS"> Autonomous flight</entry>
<entry name="SENSESOAR_MODE_MANUAL"> RC controlled</entry>
</enum>
</enums>
<messages>
<message id="170" name="OBS_POSITION">
Position estimate of the observer in global frame
<field type="int32_t" name="lon">Longitude expressed in 1E7</field>
<field type="int32_t" name="lat">Latitude expressed in 1E7</field>
<field type="int32_t" name="alt">Altitude expressed in milimeters</field>
</message>
<message id="172" name="OBS_VELOCITY">
velocity estimate of the observer in NED inertial frame
<field type="float[3]" name="vel">Velocity</field>
</message>
<message id="174" name="OBS_ATTITUDE">
attitude estimate of the observer
<field type="double[4]" name="quat">Quaternion re;im</field>
</message>
<message id="176" name="OBS_WIND">
Wind estimate in NED inertial frame
<field type="float[3]" name="wind">Wind</field>
</message>
<message id="178" name="OBS_AIR_VELOCITY">
Estimate of the air velocity
<field type="float" name="magnitude">Air speed</field>
<field type="float" name="aoa">angle of attack</field>
<field type="float" name="slip">slip angle</field>
</message>
<message id="180" name="OBS_BIAS">
IMU biases
<field type="float[3]" name="accBias">accelerometer bias</field>
<field type="float[3]" name="gyroBias">gyroscope bias</field>
</message>
<message id="182" name="OBS_QFF">
estimate of the pressure at sea level
<field type="float" name="qff">Wind</field>
</message>
<message id="183" name="OBS_AIR_TEMP">
ambient air temperature
<field type="float" name="airT">Air Temperatur</field>
</message>
<message id="184" name="FILT_ROT_VEL">
filtered rotational velocity
<field type="float[3]" name="rotVel">rotational velocity</field>
</message>
<message id="186" name="LLC_OUT">
low level control output
<field type="int16_t[4]" name="servoOut">Servo signal</field>
<field type="int16_t[2]" name="MotorOut">motor signal</field>
</message>
<message id="188" name="PM_ELEC">
Power managment
<field type="float" name="PwCons">current power consumption</field>
<field type="float" name="BatStat">battery status</field>
<field type="float[3]" name="PwGen">Power generation from each module</field>
</message>
<message id="190" name="SYS_Stat">
system status
<field type="uint8_t" name="gps">gps status</field>
<field type="uint8_t" name="act">actuator status</field>
<field type="uint8_t" name="mod">module status</field>
<field type="uint8_t" name="commRssi">module status</field>
</message>
<message id="192" name="CMD_AIRSPEED_CHNG">
change commanded air speed
<field type="uint8_t" name="target">Target ID</field>
<field type="float" name="spCmd">commanded airspeed</field>
</message>
<message id="194" name="CMD_AIRSPEED_ACK">
accept change of airspeed
<field type="float" name="spCmd">commanded airspeed</field>
<field type="uint8_t" name="ack">0:ack, 1:nack</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/slugs.xml
0,0 → 1,144
<?xml version="1.0"?>
<mavlink>
<include>common.xml</include>
 
<!-- <enums>
<enum name="SLUGS_ACTION" >
<description> Slugs Actions </description>
<entry name = "SLUGS_ACTION_NONE">
<entry name = "SLUGS_ACTION_SUCCESS">
<entry name = "SLUGS_ACTION_FAIL">
<entry name = "SLUGS_ACTION_EEPROM">
<entry name = "SLUGS_ACTION_MODE_CHANGE">
<entry name = "SLUGS_ACTION_MODE_REPORT">
<entry name = "SLUGS_ACTION_PT_CHANGE">
<entry name = "SLUGS_ACTION_PT_REPORT">
<entry name = "SLUGS_ACTION_PID_CHANGE">
<entry name = "SLUGS_ACTION_PID_REPORT">
<entry name = "SLUGS_ACTION_WP_CHANGE">
<entry name = "SLUGS_ACTION_WP_REPORT">
<entry name = "SLUGS_ACTION_MLC_CHANGE">
<entry name = "SLUGS_ACTION_MLC_REPORT">
</enum>
 
<enum name="WP_PROTOCOL_STATE" >
<description> Waypoint Protocol States </description>
<entry name = "WP_PROT_IDLE">
<entry name = "WP_PROT_LIST_REQUESTED">
<entry name = "WP_PROT_NUM_SENT">
<entry name = "WP_PROT_TX_WP">
<entry name = "WP_PROT_RX_WP">
<entry name = "WP_PROT_SENDING_WP_IDLE">
<entry name = "WP_PROT_GETTING_WP_IDLE">
</enum>
 
</enums> -->
 
<messages>
 
<message name="CPU_LOAD" id="170">
Sensor and DSC control loads.
<field name="sensLoad" type="uint8_t">Sensor DSC Load</field>
<field name="ctrlLoad" type="uint8_t">Control DSC Load</field>
<field name="batVolt" type="uint16_t">Battery Voltage in millivolts</field>
</message>
 
<message name="AIR_DATA" id="171">
Air data for altitude and airspeed computation.
<field name="dynamicPressure" type="float">Dynamic pressure (Pa)</field>
<field name="staticPressure" type="float">Static pressure (Pa)</field>
<field name="temperature" type="uint16_t">Board temperature</field>
</message>
 
<message name="SENSOR_BIAS" id="172">
Accelerometer and gyro biases.
<field name="axBias" type="float">Accelerometer X bias (m/s)</field>
<field name="ayBias" type="float">Accelerometer Y bias (m/s)</field>
<field name="azBias" type="float">Accelerometer Z bias (m/s)</field>
<field name="gxBias" type="float">Gyro X bias (rad/s)</field>
<field name="gyBias" type="float">Gyro Y bias (rad/s)</field>
<field name="gzBias" type="float">Gyro Z bias (rad/s)</field>
</message>
 
<message name="DIAGNOSTIC" id="173">
Configurable diagnostic messages.
<field name="diagFl1" type="float">Diagnostic float 1</field>
<field name="diagFl2" type="float">Diagnostic float 2</field>
<field name="diagFl3" type="float">Diagnostic float 3</field>
<field name="diagSh1" type="int16_t">Diagnostic short 1</field>
<field name="diagSh2" type="int16_t">Diagnostic short 2</field>
<field name="diagSh3" type="int16_t">Diagnostic short 3</field>
</message>
 
<message name="SLUGS_NAVIGATION" id="176">
Data used in the navigation algorithm.
<field name="u_m" type="float">Measured Airspeed prior to the Nav Filter</field>
<field name="phi_c" type="float">Commanded Roll</field>
<field name="theta_c" type="float">Commanded Pitch</field>
<field name="psiDot_c" type="float">Commanded Turn rate</field>
<field name="ay_body" type="float">Y component of the body acceleration</field>
<field name="totalDist" type="float">Total Distance to Run on this leg of Navigation</field>
<field name="dist2Go" type="float">Remaining distance to Run on this leg of Navigation</field>
<field name="fromWP" type="uint8_t">Origin WP</field>
<field name="toWP" type="uint8_t">Destination WP</field>
</message>
 
<message name="DATA_LOG" id="177">
Configurable data log probes to be used inside Simulink
<field name="fl_1" type="float">Log value 1 </field>
<field name="fl_2" type="float">Log value 2 </field>
<field name="fl_3" type="float">Log value 3 </field>
<field name="fl_4" type="float">Log value 4 </field>
<field name="fl_5" type="float">Log value 5 </field>
<field name="fl_6" type="float">Log value 6 </field>
</message>
 
<message name="GPS_DATE_TIME" id="179">
Pilot console PWM messges.
<field name="year" type="uint8_t">Year reported by Gps </field>
<field name="month" type="uint8_t">Month reported by Gps </field>
<field name="day" type="uint8_t">Day reported by Gps </field>
<field name="hour" type="uint8_t">Hour reported by Gps </field>
<field name="min" type="uint8_t">Min reported by Gps </field>
<field name="sec" type="uint8_t">Sec reported by Gps </field>
<field name="visSat" type="uint8_t">Visible sattelites reported by Gps </field>
</message>
 
<message name="MID_LVL_CMDS" id="180">
Mid Level commands sent from the GS to the autopilot. These are only sent when being opperated in mid-level commands mode from the ground; for periodic report of these commands generated from the autopilot see message XXXX.
<field name="target" type="uint8_t">The system setting the commands</field>
<field name="hCommand" type="float">Commanded Airspeed</field>
<field name="uCommand" type="float">Log value 2 </field>
<field name="rCommand" type="float">Log value 3 </field>
</message>
 
 
<message name="CTRL_SRFC_PT" id="181">
This message configures the Selective Passthrough mode. it allows to select which control surfaces the Pilot can control from his console. It is implemented as a bitfield as follows:
Position Bit Code
=================================
15-8 Reserved
7 dt_pass 128
6 dla_pass 64
5 dra_pass 32
4 dr_pass 16
3 dle_pass 8
2 dre_pass 4
1 dlf_pass 2
0 drf_pass 1
Where Bit 15 is the MSb. 0 = AP has control of the surface; 1 = Pilot Console has control of the surface.
<field name="target" type="uint8_t">The system setting the commands</field>
<field name="bitfieldPt" type="uint16_t">Bitfield containing the PT configuration</field>
</message>
 
 
 
<message name="SLUGS_ACTION" id="183">
Action messages focused on the SLUGS AP.
<field name="target" type="uint8_t">The system reporting the action</field>
<field name="actionId" type="uint8_t">Action ID. See apDefinitions.h in the SLUGS /clib directory for the ID names</field>
<field name="actionVal" type="uint16_t">Value associated with the action</field>
</message>
 
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/test.xml
0,0 → 1,31
<?xml version='1.0'?>
<mavlink>
<version>3</version>
<messages>
<message id="0" name="TEST_TYPES">
<description>Test all field types</description>
<field type="char" name="c">char</field>
<field type="char[10]" name="s">string</field>
<field type="uint8_t" name="u8">uint8_t</field>
<field type="uint16_t" name="u16">uint16_t</field>
<field print_format="0x%08x" type="uint32_t" name="u32">uint32_t</field>
<field type="uint64_t" name="u64">uint64_t</field>
<field type="int8_t" name="s8">int8_t</field>
<field type="int16_t" name="s16">int16_t</field>
<field type="int32_t" name="s32">int32_t</field>
<field type="int64_t" name="s64">int64_t</field>
<field type="float" name="f">float</field>
<field type="double" name="d">double</field>
<field type="uint8_t[3]" name="u8_array">uint8_t_array</field>
<field type="uint16_t[3]" name="u16_array">uint16_t_array</field>
<field type="uint32_t[3]" name="u32_array">uint32_t_array</field>
<field type="uint64_t[3]" name="u64_array">uint64_t_array</field>
<field type="int8_t[3]" name="s8_array">int8_t_array</field>
<field type="int16_t[3]" name="s16_array">int16_t_array</field>
<field type="int32_t[3]" name="s32_array">int32_t_array</field>
<field type="int64_t[3]" name="s64_array">int64_t_array</field>
<field type="float[3]" name="f_array">float_array</field>
<field type="double[3]" name="d_array">double_array</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/message_definitions_v1.0/ualberta.xml
0,0 → 1,54
<?xml version='1.0'?>
<mavlink>
<include>common.xml</include>
<enums>
<enum name="UALBERTA_AUTOPILOT_MODE">
<description>Available autopilot modes for ualberta uav</description>
<entry name="MODE_MANUAL_DIRECT">Raw input pulse widts sent to output</entry>
<entry name="MODE_MANUAL_SCALED">Inputs are normalized using calibration, the converted back to raw pulse widths for output</entry>
<entry name="MODE_AUTO_PID_ATT"> dfsdfs</entry>
<entry name="MODE_AUTO_PID_VEL"> dfsfds</entry>
<entry name="MODE_AUTO_PID_POS"> dfsdfsdfs</entry>
</enum>
<enum name="UALBERTA_NAV_MODE">
<description>Navigation filter mode</description>
<entry name="NAV_AHRS_INIT" />
<entry name="NAV_AHRS">AHRS mode</entry>
<entry name="NAV_INS_GPS_INIT">INS/GPS initialization mode</entry>
<entry name="NAV_INS_GPS">INS/GPS mode</entry>
</enum>
<enum name="UALBERTA_PILOT_MODE">
<description>Mode currently commanded by pilot</description>
<entry name="PILOT_MANUAL"> sdf</entry>
<entry name="PILOT_AUTO"> dfs</entry>
<entry name="PILOT_ROTO"> Rotomotion mode </entry>
</enum>
</enums>
<messages>
<message id="220" name="NAV_FILTER_BIAS">
<description>Accelerometer and Gyro biases from the navigation filter</description>
<field type="uint64_t" name="usec">Timestamp (microseconds)</field>
<field type="float" name="accel_0">b_f[0]</field>
<field type="float" name="accel_1">b_f[1]</field>
<field type="float" name="accel_2">b_f[2]</field>
<field type="float" name="gyro_0">b_f[0]</field>
<field type="float" name="gyro_1">b_f[1]</field>
<field type="float" name="gyro_2">b_f[2]</field>
</message>
<message id="221" name="RADIO_CALIBRATION">
<description>Complete set of calibration parameters for the radio</description>
<field type="uint16_t[3]" name="aileron">Aileron setpoints: left, center, right</field>
<field type="uint16_t[3]" name="elevator">Elevator setpoints: nose down, center, nose up</field>
<field type="uint16_t[3]" name="rudder">Rudder setpoints: nose left, center, nose right</field>
<field type="uint16_t[2]" name="gyro">Tail gyro mode/gain setpoints: heading hold, rate mode</field>
<field type="uint16_t[5]" name="pitch">Pitch curve setpoints (every 25%)</field>
<field type="uint16_t[5]" name="throttle">Throttle curve setpoints (every 25%)</field>
</message>
<message id="222" name="UALBERTA_SYS_STATUS">
<description>System status specific to ualberta uav</description>
<field type="uint8_t" name="mode">System mode, see UALBERTA_AUTOPILOT_MODE ENUM</field>
<field type="uint8_t" name="nav_mode">Navigation mode, see UALBERTA_NAV_MODE ENUM</field>
<field type="uint8_t" name="pilot">Pilot mode, see UALBERTA_PILOT_MODE</field>
</message>
</messages>
</mavlink>
/C-OSD/arducam-osd/libraries/GCS_MAVLink/update
0,0 → 1,14
#!/bin/bash
if [[ $# != 1 ]]
then
echo "usage: $0 version"
exit
fi
 
MAVLINK_VERSION=$1
rm -rf VERSION mavlink* include lib share *.zip
wget http://github.com/downloads/mavlink/mavlink/mavlink-${MAVLINK_VERSION}.zip
unzip mavlink-${MAVLINK_VERSION}.zip
mv mavlink-${MAVLINK_VERSION}/* .
rm -rf mavlink* share lib
echo $MAVLINK_VERSION > VERSION
/C-OSD/arducam-osd/libraries/MemoryFree/MemoryFree.c
0,0 → 1,34
/*
* MemoryFree.c
* returns the number of free RAM bytes
*/
 
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
#include "MemoryFree.h"
 
extern unsigned int __data_start;
extern unsigned int __data_end;
extern unsigned int __bss_start;
extern unsigned int __bss_end;
extern unsigned int __heap_start;
extern void *__brkval;
 
 
int freeMem()
{
int free_memory;
 
if((int)__brkval == 0)
free_memory = ((int)&free_memory) - ((int)&__bss_end);
else
free_memory = ((int)&free_memory) - ((int)__brkval);
 
return free_memory;
}
 
/C-OSD/arducam-osd/libraries/MemoryFree/MemoryFree.h
0,0 → 1,17
// memoryFree header
 
#ifndef MEMORY_FREE_H
#define MEMORY_FREE_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
int freeMem();
 
#ifdef __cplusplus
}
#endif
 
#endif
/C-OSD/arducam-osd/libraries/PTPCamera/README
0,0 → 1,5
PTP and camera-specific libraries for Arduino USB Host Project.
 
This library depends on https://github.com/felis/USB_Host_Shield">USB_Host_Shield library written to support http://www.circuitsathome.com/arduino_usb_host_shield_projects.
 
The project is hosted at http://www.circuitsathome.com
/C-OSD/arducam-osd/libraries/PTPCamera/canoneos.cpp
0,0 → 1,235
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "canoneos.h"
 
 
void EOSStateHandlers::OnSessionOpenedState(PTP *ptp)
{
if (!FAILED(((CanonEOS*)ptp)->SetPCConnectMode(1)) && !FAILED(((CanonEOS*)ptp)->SetExtendedEventInfo(1)))
ptp->SetState(PTP_STATE_DEVICE_INITIALIZED);
}
 
uint32_t ImgQualitySupplier::GetDataSize()
{
return ((pictFormat & 0xFFFF0000) ? 0x0000002C : 0x0000001C);
}
 
void ImgQualitySupplier::GetData(const uint16_t len, uint8_t *pbuf)
{
uint8_t num_files = (pictFormat & 0xFFFF0000) ? 2 : 1;
 
((uint32_t*)pbuf)[0] = (num_files == 2) ? 0x0000002C : 0x0000001C;
((uint32_t*)pbuf)[1] = (uint32_t) EOS_DPC_ImageQuality;
((uint32_t*)pbuf)[2] = (uint32_t) num_files;
 
uint32_t format = pictFormat;
for (uint8_t i=0, pos=3; i<num_files; i++)
{
((uint32_t*)pbuf)[pos++] = 0x00000010;
 
for (uint8_t j=0; j<3; j++, format >>= 4)
((uint32_t*)pbuf)[pos++] = (uint32_t)(format & 0xF);
}
}
 
CanonEOS::CanonEOS(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s)
: PTP(addr, epin, epout, epint, nconf, s)
{
}
 
uint16_t CanonEOS::SetImageQuality(uint32_t format)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 1, 1, 1, 0 };
 
ImgQualitySupplier sup;
sup.SetPictureFormat(format);
 
if ( (ptp_error = Transaction(EOS_OC_SetDevicePropValue, &flags, NULL, (void*)&sup)) != PTP_RC_OK)
PTPTRACE2("SetImageQuality error", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::SetPCConnectMode(uint8_t mode)
{
uint32_t params[1];
params[0] = (uint32_t) mode;
return Operation(EOS_OC_SetPCConnectMode, 1, params);
}
 
uint16_t CanonEOS::SetExtendedEventInfo(uint8_t mode)
{
uint32_t params[1];
params[0] = (uint32_t) mode;
return Operation(EOS_OC_SetExtendedEventInfo, 1, params);
}
 
uint16_t CanonEOS::StartBulb()
{
uint32_t params[3];
 
params[0] = 0xfffffff8;
params[1] = 0x00001000;
params[2] = 0x00000000;
 
Operation(0x911A, 3, params);
Operation(0x911B, 0, NULL);
Operation(0x9125, 0, NULL);
 
return PTP_RC_OK;
}
 
uint16_t CanonEOS::StopBulb()
{
uint32_t params[3];
 
params[0] = 0xffffffff;
params[1] = 0x00001000;
params[2] = 0x00000000;
Operation(0x911A, 3, params);
params[0] = 0xfffffffc;
Operation(0x911A, 3, params);
Operation(0x9126, 0, NULL);
Operation(0x911C, 0, NULL);
 
return PTP_RC_OK;
}
 
uint16_t CanonEOS::CancelTransfer(uint32_t object_id)
{
uint32_t params[1];
params[0] = object_id;
 
return Operation(EOS_OC_CancelTransfer, 1, params);
}
 
uint16_t CanonEOS::ResetTransfer(uint32_t object_id)
{
uint32_t params[1];
params[0] = object_id;
 
return Operation(EOS_OC_ResetTransfer, 1, params);
}
 
uint16_t CanonEOS::SwitchLiveView(bool on)
{
uint16_t ptp_error = PTP_RC_GeneralError;
 
if ((ptp_error = SetProperty(EOS_DPC_LiveView, (on) ? 2 : 0)) == PTP_RC_OK)
{
if (on)
{
if ((ptp_error = SetProperty(0xD1B3, 0)) != PTP_RC_OK)
{
PTPTRACE2("LiveView start failure:", ptp_error);
SetProperty(EOS_DPC_LiveView, 0);
return PTP_RC_GeneralError;
}
}
}
return ptp_error;
}
 
uint16_t CanonEOS::MoveFocus(uint16_t step)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 1, 0, 0, 0, 0, 0 };
uint32_t params[1];
 
params[0] = (uint32_t) step;
 
if ( (ptp_error = Transaction(EOS_OC_MoveFocus, &flags, params, NULL)) != PTP_RC_OK)
PTPTRACE2("MoveFocus error: ", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::EventCheck(PTPReadParser *parser)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 0, 1, 1, 0 };
 
if ( (ptp_error = Transaction(0x9116, &flags, NULL, parser)) != PTP_RC_OK)
PTPTRACE2("EOSEventCheck error:", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::Capture()
{
return Operation(EOS_OC_Capture, 0, NULL);
}
 
 
uint16_t CanonEOS::SetProperty(uint16_t prop, uint32_t val)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 1, 1, 3, 12 };
uint32_t params[3];
 
params[0] = 0x0000000C;
params[1] = (uint32_t)prop;
params[2] = val;
 
if ( (ptp_error = Transaction(EOS_OC_SetDevicePropValue, &flags, NULL, (void*)params)) != PTP_RC_OK)
PTPTRACE2("SetProperty error:", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::GetProperty(uint16_t prop, PTPReadParser *parser)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
 
params[0] = (uint32_t)prop;
 
if ( (ptp_error = Transaction(EOS_OC_GetDevicePropValue, &flags, params, (void*)parser)) != PTP_RC_OK)
PTPTRACE2("GetProperty error:", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::GetDeviceInfoEx(PTPReadParser *parser)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 0, 1, 1, 0 };
 
if ( (ptp_error = Transaction(EOS_OC_GetDeviceInfoEx, &flags, NULL, (void*)parser)) != PTP_RC_OK)
PTPTRACE2("GetDeviceInfo error:", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonEOS::GetObject(uint32_t object_id, uint32_t parent_id, PTPReadParser *parser)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 2, 0, 0, 1, 1, 0 };
uint32_t params[2];
 
params[0] = object_id;
params[1] = parent_id;
 
if ( (ptp_error = Transaction(EOS_OC_GetObject, &flags, params, (void*)parser)) != PTP_RC_OK)
PTPTRACE2("GetObject error:", ptp_error);
 
return ptp_error;
}
/C-OSD/arducam-osd/libraries/PTPCamera/canoneos.h
0,0 → 1,151
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __CANONEOS_H__
#define __CANONEOS_H__
 
#include "WProgram.h"
#include "ptp.h"
 
// PTP Operation Codes (EOS specific)
#define EOS_OC_GetStorageIDs 0x9101
#define EOS_OC_GetStorageInfo 0x9102
#define EOS_OC_GetObject 0x9107
#define EOS_OC_GetDeviceInfoEx 0x9108
#define EOS_OC_GetObjectIDs 0x9109
#define EOS_OC_Capture 0x910f
#define EOS_OC_SetDevicePropValue 0x9110
#define EOS_OC_SetPCConnectMode 0x9114
#define EOS_OC_SetExtendedEventInfo 0x9115
#define EOS_OC_GetEvent 0x9116
#define EOS_OC_TransferComplete 0x9117
#define EOS_OC_CancelTransfer 0x9118
#define EOS_OC_ResetTransfer 0x9119
#define EOS_OC_GetDevicePropValue 0x9127
#define EOS_OC_GetLiveViewPicture 0x9153
#define EOS_OC_MoveFocus 0x9155
 
// PTP Device Properties
#define EOS_DPC_CameraDescription 0xD402
 
// Non-PTP Device properties
#define EOS_DPC_Aperture 0xD101
#define EOS_DPC_ShutterSpeed 0xD102
#define EOS_DPC_Iso 0xD103
#define EOS_DPC_ExposureCompensation 0xD104
#define EOS_DPC_ShootingMode 0xD105
#define EOS_DPC_DriveMode 0xD106
#define EOS_DPC_ExpMeterringMode 0xD107
#define EOS_DPC_AFMode 0xD108
#define EOS_DPC_WhiteBalance 0xD109
#define EOS_DPC_PictureStyle 0xD110
#define EOS_DPC_TransferOption 0xD111
#define EOS_DPC_UnixTime 0xD113
#define EOS_DPC_ImageQuality 0xD120
#define EOS_DPC_LiveView 0xD1B0
#define EOS_DPC_AvailableShots 0xD11B
#define EOS_DPC_CaptureDestination 0xD11C
#define EOS_DPC_BracketMode 0xD11D
 
// Non-PTP Events
#define EOS_EC_DevPropChanged 0xC189
#define EOS_EC_ObjectCreated 0xC181
#define EOS_EC_DevPropValuesAccepted 0xC18A
#define EOS_EC_Capture 0xC18B
#define EOS_EC_HalfPushReleaseButton 0xC18E
 
 
class EOSStateHandlers : public PTPStateHandlers
{
public:
virtual void OnSessionOpenedState(PTP *ptp);
};
 
class ImgQualitySupplier : PTPDataSupplier
{
uint32_t pictFormat;
 
public:
ImgQualitySupplier() {};
void SetPictureFormat(uint32_t format) { pictFormat = format; };
virtual uint32_t GetDataSize();
virtual void GetData(const uint16_t len, uint8_t *pbuf);
};
 
class CanonEOS : public PTP
{
public:
enum { modeADEP=5, modeM=3, modeAv=2, modeTv=1, modeP=0, modeAuto=9, modePortrait=0xC, modeLandscape=0xD,
modeMacro=0xE, modeSport=0xB, modeNight=0xA, modeFlashOff=0xF};
 
enum { driveSingleShot = 0, driveSelf = 1, driveContinuous = 0x10 };
 
enum { iso100 = 0x48, iso200 = 0x50, iso400 = 0x58, iso800 = 0x60, iso1600 = 0x68 };
 
enum { styleStandard = 0x81, stylePortrait, styleLandscape, styleNeutral, styleFaithful, styleMonochrome,
styleUser1 = 0x21, styleUser2, styleUser3 };
 
enum { afmodeOneShot, afmodeAIServo, afmodeAIFocus };
 
enum { pictSFine = 0x00000321, pictSNormal = 0x00000221, pictMFine = 0x00000311, pictMNormal = 0x00000211,
pictLFine = 0x00000301, pictLNormal = 0x00000201, pictRaw = 0x00000406, pictRawPlusL = 0x00301406 };
 
enum { wbAuto, wbDaylight, wbCloudy, wbTungsten, wbFluorescent, wbStrobe, wbWhitePaper, wbShade = 8 };
 
enum
{
ecPlus2 = 0x10, //"+2"
ecPlus1_2d3 = 0x0d, //"+1 2/3"
ecPlus1_1d3 = 0x0b, //"+1 1/3"
ecPlus1 = 0x08, //"+1"
ecPlus0_2d3 = 0x05, //"+2/3"
ecPlus0_1d3 = 0x03, //"+1/3"
ecZerro = 0x00, //"0"
ecMinus0_1d3= 0xfd, //"-1/3"
ecMinus0_2d3= 0xfb, //"-2/3"
ecMinus1 = 0xf8, //"-1"
ecMinus1_1d3= 0xf5, //"-1 1/3"
ecMinus1_2d3= 0xf3, //"-1 2/3"
ecMinus2 = 0xf0, //"-2"
};
 
CanonEOS(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s);
 
uint16_t SetPCConnectMode(uint8_t mode);
uint16_t SetExtendedEventInfo(uint8_t mode);
uint16_t Capture();
uint16_t StartBulb();
uint16_t StopBulb();
uint16_t SwitchLiveView(bool on);
uint16_t MoveFocus(uint16_t step);
uint16_t SetProperty(uint16_t prop, uint32_t val);
 
uint16_t GetProperty(uint16_t prop, PTPReadParser *parser);
 
uint16_t GetDeviceInfoEx(PTPReadParser *parser);
uint16_t SetImageQuality(uint32_t format);
 
uint16_t GetObject(uint32_t object_id, uint32_t parent_id, PTPReadParser *parser);
uint16_t ResetTransfer(uint32_t object_id);
uint16_t CancelTransfer(uint32_t object_id);
 
virtual uint16_t EventCheck(PTPReadParser *parser);
uint16_t DigitalZoom(uint16_t magnify);
 
};
 
 
#endif // __CANONEOS_H__
/C-OSD/arducam-osd/libraries/PTPCamera/canonps.cpp
0,0 → 1,76
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "canonps.h"
 
void PSStateHandlers::OnSessionOpenedState(PTP *ptp)
{
if (FAILED(((CanonPS*)ptp)->SetDevicePropValue(PS_DPC_EventEmulateMode, (uint16_t)4)) )
PTPTRACE("EventEmulateMode error\r\n");
if (FAILED(((CanonPS*)ptp)->Initialize(true)) )
PTPTRACE("Initialization error\r\n");
ptp->SetState(PTP_STATE_DEVICE_INITIALIZED);
}
 
 
CanonPS::CanonPS(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s)
: PTP(addr, epin, epout, epint, nconf, s)
{
}
 
uint16_t CanonPS::EventCheck(PTPReadParser *parser)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 0, 1, 1, 0 };
 
if ( (ptp_error = Transaction(PS_OC_CheckEvent, &flags, NULL, parser)) != PTP_RC_OK)
PTPTRACE2("EOSEventCheck error: ", ptp_error);
 
return ptp_error;
}
 
uint16_t CanonPS::Initialize(bool binit)
{
uint16_t ptp_error;
 
if (binit)
{
if ((ptp_error = Operation(PS_OC_StartShootingMode, 0, NULL)) != PTP_RC_OK)
PTPTRACE2("StartShootingMode failed: ", ptp_error);
}
else
{
if ((ptp_error = Operation(PS_OC_EndShootingMode, 0, NULL)) != PTP_RC_OK)
PTPTRACE2("EndShootingMode failed: ", ptp_error);
}
return ptp_error;
}
 
uint16_t CanonPS::Capture()
{
uint16_t ptp_error;
 
if ((ptp_error = Operation(PS_OC_FocusLock, 0, NULL)) != PTP_RC_OK)
PTPTRACE2("Focus Lock Error: ", ptp_error);
 
if ((ptp_error = Operation(PS_OC_InitiateCaptureInMemory, 0, NULL)) != PTP_RC_OK)
PTPTRACE2("Capture Error: ", ptp_error);
 
return ptp_error;
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/canonps.h
0,0 → 1,165
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __CANONPS_H__
#define __CANONPS_H__
 
#include "ptp.h"
 
// PTP Operation Codes (PowerShot specific)
#define PS_OC_GetObjectSize 0x9001
#define PS_OC_StartShootingMode 0x9008
#define PS_OC_EndShootingMode 0x9009
#define PS_OC_ViewfinderOn 0x900B
#define PS_OC_ViewfinderOff 0x900C
#define PS_OC_ReflectChanges 0x900D
#define PS_OC_CheckEvent 0x9013
#define PS_OC_FocusLock 0x9014
#define PS_OC_FocusUnlock 0x9015
#define PS_OC_InitiateCaptureInMemory 0x901A
#define PS_OC_GetPartialObject 0x901B
#define PS_OC_GetViewfinderImage 0x901d
#define PS_OC_GetChanges 0x9020
#define PS_OC_GetFolderEntries 0x9021
// PTP PowerShot Extention Events
#define PS_EC_ShutDownCFDoorWasOpened 0xC001 /* The Device has shut down due to the opening of the SD card cover.*/
#define PS_EC_ResetHwError 0xC005 /* The device has generated a hardware error. */
#define PS_EC_AbortPCEvf 0xC006 /* The Viewfinder mode has been cancelled. */
#define PS_EC_EnablePCEvf 0xC007 /* The Viewfinder mode has been enablede. */
#define PS_EC_FullViewReleased 0xC008 /* Transfer timing of main image data */
#define PS_EC_ThumbnailReleased 0xC009 /* Transfer timing of thumbnail image data */
#define PS_EC_ChangeBatteryStatus 0xC00A /* The power condition of the camera has changed. */
#define PS_EC_PushedReleaseSw 0xC00B /* User has pressed the release swtich on camera. */
#define PS_EC_PropertyChanged 0xC00C /* A group of properties relating to release control have been changed. */
#define PS_EC_RotationAngleChanged 0xC00D /* The angle of rotation of the camera has been changed. */
#define PS_EC_ChangedByCamUI 0xC00E /* An operation control on the camera has been operated.*/
#define PS_EC_Shutdown 0xD001 /* Shutdown */
#define PS_EC_StartDirectTransfer 0xC011
#define PS_EC_StopDirectTransfer 0xC013
 
// PowerShot-specific Device Properties
#define PS_DPC_BeepMode 0xD001
#define PS_DPC_BatteryKind 0xD002
#define PS_DPC_BatteryStatus 0xD003
#define PS_DPC_UILockType 0xD004
#define PS_DPC_CameraMode 0xD005
#define PS_DPC_ImageQuality 0xD006
#define PS_DPC_FullViewFileFormat 0xD007
#define PS_DPC_ImageSize 0xD008
#define PS_DPC_SelfTime 0xD009
#define PS_DPC_FlashMode 0xD00A
#define PS_DPC_Beep 0xD00B
#define PS_DPC_ShootingMode 0xD00C
#define PS_DPC_ImageMode 0xD00D
#define PS_DPC_DriveMode 0xD00E
#define PS_DPC_EZoom 0xD00F
#define PS_DPC_MeteringMode 0xD010
#define PS_DPC_AFDistance 0xD011
#define PS_DPC_FocusingPoint 0xD012
#define PS_DPC_WhiteBalance 0xD013
#define PS_DPC_SlowShutterSetting 0xD014
#define PS_DPC_AFMode 0xD015
#define PS_DPC_ImageStabilization 0xD016
#define PS_DPC_Contrast 0xD017
#define PS_DPC_ColorGain 0xD018
#define PS_DPC_Sharpness 0xD019
#define PS_DPC_Sensitivity 0xD01A
#define PS_DPC_ParameterSet 0xD01B
#define PS_DPC_ISOSpeed 0xD01C
#define PS_DPC_Aperture 0xD01D
#define PS_DPC_ShutterSpeed 0xD01E
#define PS_DPC_ExpCompensation 0xD01F
#define PS_DPC_FlashCompensation 0xD020
#define PS_DPC_AEBExposureCompensation 0xD021
#define PS_DPC_AvOpen 0xD023
#define PS_DPC_AvMax 0xD024
#define PS_DPC_FocalLength 0xD025
#define PS_DPC_FocalLengthTele 0xD026
#define PS_DPC_FocalLengthWide 0xD027
#define PS_DPC_FocalLengthDenominator 0xD028
#define PS_DPC_CaptureTransferMode 0xD029
#define PS_DPC_Zoom 0xD02A
#define PS_DPC_NamePrefix 0xD02B
#define PS_DPC_SizeQualityMode 0xD02C
#define PS_DPC_SupportedThumbSize 0xD02D
#define PS_DPC_SizeOfOutputDataFromCamera 0xD02E
#define PS_DPC_SizeOfInputDataToCamera 0xD02F
#define PS_DPC_RemoteAPIVersion 0xD030
#define PS_DPC_FirmwareVersion 0xD031
#define PS_DPC_CameraModel 0xD032
#define PS_DPC_CameraOwner 0xD033
#define PS_DPC_UnixTime 0xD034
#define PS_DPC_CameraBodyID 0xD035
#define PS_DPC_CameraOutput 0xD036
#define PS_DPC_DispAv 0xD037
#define PS_DPC_AvOpenApex 0xD038
#define PS_DPC_DZoomMagnification 0xD039
#define PS_DPC_MlSpotPos 0xD03A
#define PS_DPC_DispAvMax 0xD03B
#define PS_DPC_AvMaxApex 0xD03C
#define PS_DPC_EZoomStartPosition 0xD03D
#define PS_DPC_FocalLengthOfTele 0xD03E
#define PS_DPC_EZoomSizeOfTele 0xD03F
#define PS_DPC_PhotoEffect 0xD040
#define PS_DPC_AssistLight 0xD041
#define PS_DPC_FlashQuantityCount 0xD042
#define PS_DPC_RotationAngle 0xD043
#define PS_DPC_RotationScene 0xD044
#define PS_DPC_EventEmulateMode 0xD045
#define PS_DPC_DPOFVersion 0xD046
#define PS_DPC_TypeOfSupportedSlideShow 0xD047
#define PS_DPC_AverageFilesizes 0xD048
#define PS_DPC_ModelID 0xD049
 
 
class PSStateHandlers : public PTPStateHandlers
{
public:
virtual void OnSessionOpenedState(PTP *ptp);
};
 
 
 
class CanonPS : public PTP
{
public:
// ISO Speed Values
enum { IsoAuto = 0, Iso80 = 0x45, Iso100 = 0x48, Iso200 = 0x50, Iso400 = 0x58, Iso800=0x60 };
 
// White Balance Values
enum { WbAuto = 0, WbSunny, WbCloudy, WbTungsten, WbFluorescent, WbFlash, WbCustom, WbUnknown };
 
// Exposure Compensation Values (same values for both exposure compensation and flash compensation)
enum { ExpCompDown2 = 0x08, ExpCompDown1_2d3= 0x0B, ExpCompDown1_1d3= 0x0D, ExpCompDown1 = 0x10, ExpCompDown2d3 = 0x13,
ExpCompDown1d3 = 0x15, ExpComp_0 = 18, ExpCompUp1d3 = 0x1B, ExpCompUp2d3 = 0x1D, ExpCompUp1 = 0x20,
ExpCompUp1_1d3 = 0x23, ExpCompUp1_2d3 = 0x25, ExpCompUp2 = 0x28 };
 
// Image Quality Values
enum { ImgQualityNormal = 2, ImageQualityFine = 3, ImageQualitySuperb = 5 };
 
// Image Size Values
enum { ImgSizeLarge, ImgSizeMedium1, ImgSizeSmall, ImgSizeMedium2 };
 
CanonPS(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s);
 
uint16_t Initialize(bool binit);
 
uint16_t Capture();
uint16_t EventCheck(PTPReadParser *parser);
};
 
#endif // __CANONPS_H__
/C-OSD/arducam-osd/libraries/PTPCamera/copying.txt
0,0 → 1,15
Copyright (C) 2010 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
/C-OSD/arducam-osd/libraries/PTPCamera/eosvaluetitles.h
0,0 → 1,296
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#if !defined(__EOSVALUETITLES_H__)
#define __EOSVALUETITLES_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <valuelist.h>
 
typedef uint8_t VT_APERTURE;
typedef uint8_t VT_MODE;
typedef uint8_t VT_WB;
typedef uint8_t VT_SHSPEED;
typedef uint8_t VT_PSTYLE;
typedef uint8_t VT_ISO;
typedef uint8_t VT_EXPCOMP;
 
#define VT_MODE_TEXT_LEN 4
#define VT_WB_TEXT_LEN 4
#define VT_SHSPEED_TEXT_LEN 5
#define VT_PSTYLE_TEXT_LEN 4
#define VT_ISO_TEXT_LEN 5
#define VT_EXPCOMP_TEXT_LEN 7
#define VT_APT_TEXT_LEN 4
 
const ValueTitle<VT_APERTURE, VT_APT_TEXT_LEN> ApertureTitles[] PROGMEM =
{
{0x00, {' ', ' ', '0', 0 } },
{0x08, {' ', ' ', '1', 0 } },
{0x0B, {'1', '.', '1', 0 } },
{0x0C, {'1', '.', '2', 0 } },
{0x0D, {'1', '.', '2', 0 } },
{0x10, {'1', '.', '4', 0 } },
{0x13, {'1', '.', '6', 0 } },
{0x14, {'1', '.', '8', 0 } },
{0x15, {'1', '.', '8', 0 } },
{0x18, {'2', '.', '0', 0 } },
{0x1B, {'2', '.', '2', 0 } },
{0x1C, {'2', '.', '5', 0 } },
{0x1D, {'2', '.', '5', 0 } },
{0x20, {'2', '.', '8', 0 } },
{0x23, {'3', '.', '2', 0 } },
{0x24, {'3', '.', '5', 0 } },
{0x25, {'3', '.', '5', 0 } },
{0x28, {'4', '.', '0', 0 } },
{0x2B, {'4', '.', '5', 0 } },
{0x2C, {'4', '.', '5', 0 } },
{0x2D, {'5', '.', '0', 0 } },
{0x30, {'5', '.', '6', 0 } },
{0x33, {'6', '.', '3', 0 } },
{0x34, {'6', '.', '7', 0 } },
{0x35, {'7', '.', '1', 0 } },
{0x38, {'8', '.', '0', 0 } },
{0x3B, {'9', '.', '0', 0 } },
{0x3C, {'9', '.', '5', 0 } },
{0x3D, {' ', '1', '0', 0 } },
{0x40, {' ', '1', '1', 0 } },
{0x43, {' ', '1', '3', 0 } },
{0x44, {' ', '1', '3', 0 } },
{0x45, {' ', '1', '4', 0 } },
{0x48, {' ', '1', '6', 0 } },
{0x4B, {' ', '1', '8', 0 } },
{0x4C, {' ', '1', '9', 0 } },
{0x4D, {' ', '2', '0', 0 } },
{0x50, {' ', '2', '2', 0 } },
{0x53, {' ', '2', '5', 0 } },
{0x54, {' ', '2', '7', 0 } },
{0x55, {' ', '2', '9', 0 } },
{0x58, {' ', '3', '2', 0 } },
{0x5B, {' ', '3', '6', 0 } },
{0x5C, {' ', '3', '8', 0 } },
{0x5D, {' ', '4', '0', 0 } },
{0x60, {' ', '4', '5', 0 } },
{0x63, {' ', '5', '1', 0 } },
{0x64, {' ', '5', '4', 0 } },
{0x65, {' ', '5', '7', 0 } },
{0x68, {' ', '6', '4', 0 } },
{0x6B, {' ', '7', '2', 0 } },
{0x6C, {' ', '7', '6', 0 } },
{0x6D, {' ', '8', '0', 0 } },
{0x70, {' ', '9', '1', 0 } }
};
 
const ValueTitle<VT_SHSPEED, VT_SHSPEED_TEXT_LEN> ShutterSpeedTitles[] PROGMEM =
{
{0x0c, {'B','u','l','b',0} },
{0x10, {' ','3','0','"',0} },
{0x13, {' ','2','5','"',0} },
{0x14, {' ','2','0','"',0} },
{0x15, {' ','2','0','"',0} },
{0x18, {' ','1','5','"',0} },
{0x1B, {' ','1','3','"',0} },
{0x1C, {' ','1','0','"',0} },
{0x1D, {' ','1','0','"',0} },
{0x20, {' ',' ','8','"',0} },
{0x23, {' ',' ','6','"',0} },
{0x24, {' ',' ','6','"',0} },
{0x25, {' ',' ','5','"',0} },
{0x28, {' ',' ','4','"',0} },
{0x2B, {' ','3','"','2',0} },
{0x2C, {' ',' ','3','"',0} },
{0x2D, {' ','2','"','5',0} },
{0x30, {' ',' ','2','"',0} },
{0x33, {' ','1','"','6',0} },
{0x34, {' ','1','"','5',0} },
{0x35, {' ','1','"','3',0} },
{0x38, {' ',' ','1','"',0} },
{0x3B, {' ','0','"','8',0} },
{0x3C, {' ','0','"','7',0} },
{0x3D, {' ','0','"','6',0} },
{0x40, {' ','0','"','5',0} },
{0x43, {' ','0','"','4',0} },
{0x44, {' ','0','"','3',0} },
{0x45, {' ','0','"','3',0} },
{0x48, {' ',' ',' ','4',0} },
{0x4B, {' ',' ',' ','5',0} },
{0x4C, {' ',' ',' ','6',0} },
{0x4D, {' ',' ',' ','6',0} },
{0x50, {' ',' ',' ','8',0} },
{0x53, {' ',' ','1','0',0} },
{0x54, {' ',' ','1','0',0} },
{0x55, {' ',' ','1','3',0} },
{0x58, {' ',' ','1','5',0} },
{0x5B, {' ',' ','2','0',0} },
{0x5C, {' ',' ','2','0',0} },
{0x5D, {' ',' ','2','5',0} },
{0x60, {' ',' ','3','0',0} },
{0x63, {' ',' ','4','0',0} },
{0x64, {' ',' ','4','5',0} },
{0x65, {' ',' ','5','0',0} },
{0x68, {' ',' ','6','0',0} },
{0x6B, {' ',' ','8','0',0} },
{0x6C, {' ',' ','9','0',0} },
{0x6D, {' ','1','0','0',0} },
{0x70, {' ','1','2','5',0} },
{0x73, {' ','1','6','0',0} },
{0x74, {' ','1','8','0',0} },
{0x75, {' ','2','0','0',0} },
{0x78, {' ','2','5','0',0} },
{0x7B, {' ','3','2','0',0} },
{0x7C, {' ','3','5','0',0} },
{0x7D, {' ','4','0','0',0} },
{0x80, {' ','5','0','0',0} },
{0x83, {' ','6','4','0',0} },
{0x84, {' ','7','5','0',0} },
{0x85, {' ','8','0','0',0} },
{0x88, {'1','0','0','0',0} },
{0x8B, {'1','2','5','0',0} },
{0x8C, {'1','5','0','0',0} },
{0x8D, {'1','6','0','0',0} },
{0x90, {'2','0','0','0',0} },
{0x93, {'2','5','0','0',0} },
{0x94, {'3','0','0','0',0} },
{0x95, {'3','2','0','0',0} },
{0x98, {'4','0','0','0',0} },
{0x9B, {'5','0','0','0',0} },
{0x9C, {'6','0','0','0',0} },
{0x9D, {'6','4','0','0',0} },
{0xA0, {'8','0','0','0',0} }
};
 
const ValueTitle<VT_ISO, VT_ISO_TEXT_LEN> IsoTitles[] PROGMEM =
{
{0x28, {'6',' ',' ',' ',0} },
{0x30, {'1','2',' ',' ',0} },
{0x38, {'2','5',' ',' ',0} },
{0x40, {'5','0',' ',' ',0} },
{0x48, {'1','0','0',' ',0} },
{0x4b, {'1','2','5',' ',0} },
{0x4d, {'1','6','0',' ',0} },
{0x50, {'2','0','0',' ',0} },
{0x53, {'2','5','0',' ',0} },
{0x55, {'3','2','0',' ',0} },
{0x58, {'4','0','0',' ',0} },
{0x5b, {'5','0','0',' ',0} },
{0x5d, {'6','4','0',' ',0} },
{0x60, {'8','0','0',' ',0} },
{0x63, {'1','0','0','0',0} },
{0x65, {'1','2','5','0',0} },
{0x68, {'1','6','0','0',0} },
{0x70, {'3','2','0','0',0} },
{0x78, {'6','4','0','0',0} }
};
 
// Exposure Compensation Title Array
const ValueTitle<VT_EXPCOMP, VT_EXPCOMP_TEXT_LEN> ExpCompTitles[] PROGMEM =
{
{0x28, {'+','5',' ',' ',' ',' ',0} },
{0x25, {'+','4',' ','2','/','3',0} },
{0x23, {'+','4',' ','1','/','3',0} },
{0x20, {'+','4',' ',' ',' ',' ',0} },
{0x1d, {'+','3',' ','2','/','3',0} },
{0x1b, {'+','3',' ','1','/','3',0} },
{0x18, {'+','3',' ',' ',' ',' ',0} },
{0x15, {'+','2',' ','2','/','3',0} },
{0x14, {'+','2',' ','1','/','2',0} },
{0x13, {'+','2',' ','1','/','3',0} },
{0x10, {'+','2',' ',' ',' ',' ',0} },
{0x0d, {'+','1',' ','2','/','3',0} },
{0x0c, {'+','1',' ','1','/','2',0} },
{0x0b, {'+','1',' ','1','/','3',0} },
{0x08, {'+','1',' ',' ',' ',' ',0} },
{0x05, {'+','2','/','3',' ',' ',0} },
{0x04, {'+','1','/','2',' ',' ',0} },
{0x03, {'+','1','/','3',' ',' ',0} },
{0x00, {'0',' ',' ',' ',' ',' ',0} },
{0xfd, {'-','1','/','3',' ',' ',0} },
{0xfc, {'-','1','/','2',' ',' ',0} },
{0xfb, {'-','2','/','3',' ',' ',0} },
{0xf8, {'-','1',' ',' ',' ',' ',0} },
{0xf5, {'-','1',' ','1','/','3',0} },
{0xf4, {'-','1',' ','1','/','2',0} },
{0xf3, {'-','1',' ','2','/','3',0} },
{0xf0, {'-','2',' ',' ',' ',' ',0} },
{0xed, {'-','2',' ','1','/','3',0} },
{0xec, {'-','2',' ','1','/','2',0} },
{0xeb, {'-','2',' ','2','/','3',0} },
{0xe8, {'-','3',' ',' ',' ',' ',0} },
{0xe5, {'-','3',' ','1','/','3',0} },
{0xe3, {'-','3',' ','2','/','3',0} },
{0xe0, {'-','4',' ',' ',' ',' ',0} },
{0xdd, {'-','4',' ','1','/','3',0} },
{0xdb, {'-','3',' ','2','/','3',0} },
{0xd8, {'-','5',' ',' ',' ',' ',0} }
};
 
// Shooting Mode Title Array
const ValueTitle<VT_MODE, VT_MODE_TEXT_LEN> ModeTitles[] PROGMEM =
{
{0, {'P',' ',' ',0} }, // Program
{1, {'T','v',' ',0} }, // Tv
{2, {'A','v',' ',0} }, // Av
{3, {'M',' ',' ',0} }, // Manual
{4, {'B','l','b',0} }, // Bulb
{5, {'A','-','D',0} }, // A-DEP
{6, {'D','E','P',0} }, // DEP
{7, {'C',' ',' ',0} }, // Custom
{8, {'L','c','k',0} }, // Lock
{9, {'G','r','n',0} }, // Green (Fully Automatic Mode)
{10,{'N','g','h',0} }, // Night Portrait
{11,{'S','p','r',0} }, // Sports
{13,{'L','n','d',0} }, // Landscape
{14,{'C','l','s',0} }, // Closeup
{15,{'N','/','F',0} } // No Flash
};
 
// White Balance Title Array
const ValueTitle<VT_WB, VT_WB_TEXT_LEN> WbTitles[] PROGMEM =
{
{0, {'A','W','B',0} }, // Auto White Balance
{1, {'D','a','y',0} }, // Daylight
{2, {'C','l','d',0} }, // Clouds
{3, {'T','n','g',0} }, // Tungsteen
{4, {'F','l','r',0} }, // Fluoriscent
{5, {'S','t','r',0} }, // Strobe
{6, {'W','/','P',0} }, // White Paper
{8, {'S','h','d',0} } // Shade
};
 
// Picture Style Title Array
const ValueTitle<VT_PSTYLE, VT_PSTYLE_TEXT_LEN> PStyleTitles[] PROGMEM =
{
{0x21, {'U','s','1',0} }, // User 1
{0x22, {'U','s','2',0} }, // User 2
{0x23, {'U','s','3',0} }, // User 3
{0x81, {'S','t','d',0} }, // Standard
{0x82, {'P','r','t',0} }, // Portrait
{0x83, {'L','n','d',0} }, // Landscape
{0x84, {'N','t','l',0} }, // Neutral
{0x85, {'F','t','h',0} }, // Faithful
{0x86, {'M','o','n',0} } // Monochrome
};
 
#define VT_APT_COUNT sizeof(ApertureTitles) / (sizeof(VT_APERTURE) + VT_APT_TEXT_LEN)
#define VT_MODE_COUNT sizeof(ModeTitles) / (sizeof(VT_MODE) + VT_MODE_TEXT_LEN)
#define VT_WB_COUNT sizeof(WbTitles) / (sizeof(VT_WB) + VT_WB_TEXT_LEN)
#define VT_SHSPEED_COUNT sizeof(ShutterSpeedTitles) / (sizeof(VT_SHSPEED) + VT_SHSPEED_TEXT_LEN)
#define VT_PSTYLE_COUNT sizeof(PStyleTitles) / (sizeof(VT_PSTYLE) + VT_PSTYLE_TEXT_LEN)
#define VT_ISO_COUNT sizeof(IsoTitles) / (sizeof(VT_ISO) + VT_ISO_TEXT_LEN)
#define VT_EXPCOMP_COUNT sizeof(ExpCompTitles) / (sizeof(VT_EXPCOMP) + VT_EXPCOMP_TEXT_LEN)
 
#endif // __EOSVALUETITLES_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSBulb/EOSBulb.pde
0,0 → 1,80
/* Bulb mode demo */
/* Works with cameras which have bulb mode in shutter speed list (in other words, ones that don't have a letter 'B' on mode dial */
/* Tested with EOS Rebel XSI (450D) */
/* Camera has to be switched to manual mode */
 
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <canoneos.h>
 
#define DEV_ADDR 1
 
// Canon EOS 450D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
#define SHUTTER_SPEED_BULB 0x0c
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
 
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
uint16_t rc = Eos.SetProperty(EOS_DPC_ShutterSpeed,SHUTTER_SPEED_BULB);
if (rc != PTP_RC_OK)
Message(PSTR("Error: "), rc);
}
 
Eos.StartBulb();
delay(6000);
Eos.StopBulb();
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
}
 
void loop() {
Eos.Task();
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/EOSCamController.pde
0,0 → 1,556
/* Digital camera controller board test sketch */
//#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <Max_LCD.h>
#include <simpletimer.h>
#include <valuelist.h>
#include <canoneos.h>
#include <qep_port.h>
 
#include "camcontroller.h"
#include "controls.h"
#include "eoseventparser.h"
#include "dataitem.h"
#include "screenitem.h"
#include "screen.h"
#include "menu.h"
#include "hdrcapture.h"
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
#define EEP_APERTURE_LIST_OFFSET 0
#define EEP_APERTURE_LIST_SIZE 32
 
#define EEP_SHTSPEED_LIST_OFFSET (EEP_APERTURE_LIST_OFFSET + EEP_APERTURE_LIST_SIZE)
#define EEP_SHTSPEED_LIST_SIZE 64
 
#define EEP_WBALANCE_LIST_OFFSET (EEP_SHTSPEED_LIST_OFFSET + EEP_SHTSPEED_LIST_SIZE)
#define EEP_WBALANCE_LIST_SIZE 12
 
#define EEP_PICSTYLE_LIST_OFFSET (EEP_WBALANCE_LIST_OFFSET + EEP_WBALANCE_LIST_SIZE)
#define EEP_PICSTYLE_LIST_SIZE 12
 
#define EEP_EXPOCOR_LIST_OFFSET (EEP_PICSTYLE_LIST_OFFSET + EEP_PICSTYLE_LIST_SIZE)
#define EEP_EXPOCOR_LIST_SIZE 48
 
#define EEP_ISO_LIST_OFFSET (EEP_EXPOCOR_LIST_OFFSET + EEP_EXPOCOR_LIST_SIZE)
#define EEP_ISO_LIST_SIZE 8
 
EEPROMByteList vlAperture(EEP_APERTURE_LIST_OFFSET, EEP_APERTURE_LIST_SIZE);
EEPROMByteList vlShutterSpeed(EEP_SHTSPEED_LIST_OFFSET, EEP_SHTSPEED_LIST_SIZE);
EEPROMByteList vlWhiteBalance(EEP_WBALANCE_LIST_OFFSET, EEP_WBALANCE_LIST_SIZE);
EEPROMByteList vlPictureStyle(EEP_PICSTYLE_LIST_OFFSET, EEP_PICSTYLE_LIST_SIZE);
EEPROMByteList vlIso(EEP_ISO_LIST_OFFSET, EEP_ISO_LIST_SIZE);
EEPROMByteList vlExpCompensation(EEP_EXPOCOR_LIST_OFFSET, EEP_EXPOCOR_LIST_SIZE);
 
class CamStateHandlers : public EOSStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
class CamHDRCapture : public HDRCapture
{
public:
CamHDRCapture(CanonEOS &eos) : HDRCapture(eos) {};
protected:
virtual void OnFrameCaptured(uint16_t left);
virtual void OnSelfTimerProgress(uint32_t left);
virtual void OnIntrTimerProgress(uint32_t left);
};
 
CamStateHandlers CamStates;
Max_LCD LCD;
SimpleTimer ControlTimer, PTPPollTimer;
 
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
CamHDRCapture hdrCapture(Eos);
GPInRegister ExtControls(Eos.GetMax());
QEvent evtTick, evtAbort;
 
//--- (0) Message Screen ----------------------------------------------------------------------
PgmStringDataItem diFirst(msgCamera);
PgmStringDataItem diSecond(msgDisconnected);
 
ScreenItem siFirst (5, 0, 16, false, &diFirst);
ScreenItem siSecond (2, 1, 16, false, &diSecond);
 
ScreenItem *messageScreenItems[] PROGMEM = { &siFirst, &siSecond };
Screen messageScreen(2, (ScreenItem*)messageScreenItems);
 
//--- (1) Main Menu Screen --------------------------------------------------------------------
ScreenItem siIntervalometer (1, 0, 8, true, (const char*)&msgIntervalometer);
ScreenItem siSettings (1, 1, 8, false, (const char*)&msgSettings);
 
ScreenItem *mainMenuScreenItems[] PROGMEM = { &siIntervalometer, &siSettings };
Screen scrMainMenu(2, (ScreenItem*)mainMenuScreenItems);
 
//--- (2) Timer Menu Screen -------------------------------------------------------------------
ScreenItem siSelf (1, 0, 4, true, (const char*)&msgSetSelf);
ScreenItem siFrames (1, 1, 4, false, (const char*)&msgSetFrames);
ScreenItem siBkt (6, 0, 3, false, (const char*)&msgSetBkt);
ScreenItem siInterval (6, 1, 3, false, (const char*)&msgSetInterval);
ScreenItem siRun (10, 0, 4, false, (const char*)&msgSetRun);
ScreenItem siExit (10, 1, 4, false, (const char*)&msgExit);
 
ScreenItem *timerSettingsScreenItems[] PROGMEM = { &siSelf, &siFrames, &siBkt, &siInterval, &siRun, &siExit };
Screen timerSettingsScreen(6, (ScreenItem*)timerSettingsScreenItems);
 
//--- (3) Self Timer Screen -------------------------------------------------------------------
DIT_TIMER_DIGIT_PAIR diHourSelf(0), diHourInt(0),
diMinSelf(0), diMinInt(0),
diSecSelf(0), diSecInt(0);
 
ScreenItem siSelfTimer(0, 0, 16, false, (const char*)&msgSelfTimer);
ScreenItem siHourSelf(3, 1, 2, false, &diHourSelf);
ScreenItem siMinSelf (6, 1, 2, false, &diMinSelf);
ScreenItem siSecSelf (9, 1, 2, false, &diSecSelf);
 
ScreenItem *scitmSelfTimerSet[] PROGMEM = { &siSelfTimer, &siHourSelf, &siMinSelf, &siSecSelf };
Screen scrSelfTimerSet(4, (ScreenItem*)scitmSelfTimerSet);
 
//--- (4) Number of Frames Screen -------------------------------------------------------------
IntDataItem<uint16_t, 5> diFramesCount(0);
IntDataItem<uint16_t, 5> diFramesLeft(0);
 
ScreenItem siFramesText (5, 0, 6, false, (const char*)&msgCntFrames);
ScreenItem siFramesCount (6, 1, 4, false, &diFramesCount);
 
ScreenItem *scitmFramesSet[] PROGMEM = { &siFramesText, &siFramesCount };
Screen scrFramesSet(2, (ScreenItem*)scitmFramesSet);
 
//--- (5) Bracketing Screen -------------------------------------------------------------------
KeyValuePairDataItem<uint8_t, 37, 7> diBktEV(0, ExpCompTitles);
KeyValuePairDataItem<uint8_t, 37, 7> diBktStep(0, ExpCompTitles);
uint8_t nBktStep;
uint8_t nBktNegativeIndex;
uint8_t nBktPositiveIndex;
 
ScreenItem siBracketing(0, 0, 15, false, (const char*)&msgBracketing);
ScreenItem siBktEV (1, 1, 6, false, &diBktEV);
ScreenItem siBktStep (9, 1, 6, false, &diBktStep);
 
ScreenItem *scitmBkt[] PROGMEM = { &siBracketing, &siBktEV, &siBktStep };
Screen scrBktSet(3, (ScreenItem*)scitmBkt);
 
//--- (6) Interval Timer Screen ---------------------------------------------------------------
ScreenItem siIntTimer(0, 0, 16, false, (const char*)&msgIntTimer);
ScreenItem siHourInt(3, 1, 2, false, &diHourInt);
ScreenItem siMinInt (6, 1, 2, false, &diMinInt);
ScreenItem siSecInt (9, 1, 2, false, &diSecInt);
 
ScreenItem *scitmIntTimerSet[] PROGMEM = { &siIntTimer, &siHourInt, &siMinInt, &siSecInt };
Screen scrIntTimerSet(4, (ScreenItem*)scitmIntTimerSet);
 
//--- (7) Run Screen ---------------------------------------------------------------------------
TimeSpanDataItem diLeftTimer(0);
TimeSpanDataItem diIntTimer(0);
 
ScreenItem siRunLeftTime( 0, 0, 8, false, &diLeftTimer);
ScreenItem siRunIntTime( 0, 1, 8, false, &diIntTimer);
ScreenItem siRunFramesLeft ( 10, 0, 4, false, &diFramesLeft);
ScreenItem siAbort(10, 1, 5, false, (const char*)&msgAbort);
 
ScreenItem *scitmRun[] PROGMEM = { &siRunLeftTime, &siRunIntTime, &siRunFramesLeft, &siAbort };
Screen scrRun(4, (ScreenItem*)scitmRun);
 
//--- (8) Camera Settings Screen ---------------------------------------------------------------
DIT_MODE diMode(0, ModeTitles);
DIT_APERTURE diAperture(0, ApertureTitles);
DIT_WB diWb(0, WbTitles);
DIT_SHUTTER_SPEED diShutterSpeed(0, ShutterSpeedTitles);
DIT_PSTYLE diPStyle(0, PStyleTitles);
DIT_ISO diIso(0, IsoTitles);
DIT_EXPCOMP diExpComp(0, ExpCompTitles);
 
ScreenItem siMode ( 0, 0, 3, false, &diMode);
ScreenItem siAperture ( 0, 1, 3, false, &diAperture);
ScreenItem siWb ( 4, 0, 3, false, &diWb);
ScreenItem siShutterSpeed( 4, 1, 4, false, &diShutterSpeed);
ScreenItem siPStyle ( 8, 0, 3, false, &diPStyle);
ScreenItem siIso (12, 0, 4, false, &diIso);
ScreenItem siExpComp ( 9, 1, 6, false, &diExpComp);
 
ScreenItem *scitmSettings[] PROGMEM = { &siMode, &siAperture, &siWb, &siShutterSpeed, &siPStyle, &siIso, &siExpComp };
Screen scrSettings(7, (ScreenItem*)scitmSettings);
 
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> hourSpinSelf(0, 99, 1, &diHourSelf, NULL);
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> minSpinSelf(0, 99, 1, &diMinSelf, NULL);
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> secSpinSelf(0, 99, 1, &diSecSelf, NULL);
 
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> hourSpinInt(0, 99, 1, &diHourInt, NULL);
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> minSpinInt(0, 99, 1, &diMinInt, NULL);
IntSpin<DIT_TIMER_DIGIT_PAIR, uint8_t> secSpinInt(0, 99, 1, &diSecInt, NULL);
 
 
void SpinSetAperture(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_Aperture, ((DIT_APERTURE*)data_item)->Get());
};
 
void SpinSetShutterSpeed(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_ShutterSpeed, ((DIT_SHUTTER_SPEED*)data_item)->Get());
};
 
void SpinSetWb(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_WhiteBalance, ((DIT_WB*)data_item)->Get());
};
 
void SpinSetPStyle(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_PictureStyle, ((DIT_PSTYLE*)data_item)->Get());
};
 
void SpinSetIso(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_Iso, ((DIT_ISO*)data_item)->Get());
};
 
void SpinSetExpComp(DataItemBase *data_item)
{
Eos.SetProperty(EOS_DPC_ExposureCompensation, ((DIT_EXPCOMP*)data_item)->Get());
};
 
void SpinUpdateBktStepValues(DataItemBase *data_item);
void SpinUpdateBktStep(DataItemBase *data_item);
 
EEPROMListIntSpin<DIT_APERTURE, VT_APERTURE> spinAperture(&vlAperture, &diAperture, &SpinSetAperture);
EEPROMListIntSpin<DIT_SHUTTER_SPEED, VT_SHSPEED> spinShutterSpeed(&vlShutterSpeed, &diShutterSpeed, &SpinSetShutterSpeed);
EEPROMListIntSpin<DIT_WB, VT_WB> spinWb(&vlWhiteBalance, &diWb, &SpinSetWb);
EEPROMListIntSpin<DIT_PSTYLE, VT_PSTYLE> spinPStyle(&vlPictureStyle, &diPStyle, &SpinSetPStyle);
EEPROMListIntSpin<DIT_ISO, VT_ISO> spinIso(&vlIso, &diIso, &SpinSetIso);
 
EEPROMListIntSpin<EXP_COMP_DATA_ITEM, VT_EXPCOMP> spinExpComp(&vlExpCompensation, &diExpComp, &SpinSetExpComp);
EEPROMListIntSpin<EXP_COMP_DATA_ITEM, VT_EXPCOMP> spinBktEV (&vlExpCompensation, &diBktEV, &SpinUpdateBktStepValues);
 
BKT_STEP_VALUE_LIST vlExpCompStep;
 
SRAMListIntSpin<EXP_COMP_DATA_ITEM, VT_EXPCOMP, BKT_STEP_VALUE_LIST> spinBktStep(&vlExpCompStep, &diBktStep, &SpinUpdateBktStep);
 
 
void SpinUpdateBktStepValues(DataItemBase *data_item)
{
uint8_t cur_value = ((EXP_COMP_DATA_ITEM*)data_item)->Get();
vlExpCompStep.SetSize(0);
// Check value for zerro. Exit on zerro.
if (cur_value == 0)
return;
// Calculate negative and positive values of expo compensation
uint8_t negative_value = (cur_value & 0x80) ? cur_value : ~(cur_value - 1);
uint8_t positive_value = (cur_value & 0x80) ? ~(cur_value - 1) : cur_value;
// Get indices of negative and positive expo compensation values
uint16_t negative_index = vlExpCompensation.GetValueIndex(negative_value);
uint16_t positive_index = vlExpCompensation.GetValueIndex(positive_value);
 
nBktNegativeIndex = negative_index;
nBktPositiveIndex = positive_index;
// Calculate interval length
uint16_t len = positive_index - negative_index;
 
// Calculate zerro value index
uint16_t zerro_index = vlExpCompensation.GetValueIndex(0);
 
// Calculate positive index offset
uint16_t zerro_based_offset = positive_index - zerro_index;
// Calculate all possible interval indices
for (uint16_t i = zerro_based_offset, j = positive_index; i>0; i--, j--)
{
// Insert values into the list
if (len % i == 0)
vlExpCompStep.Append(vlExpCompensation.Get(j));
}
diBktStep.Set(cur_value);
diBktStep.SetUpdated(true);
};
 
void SpinUpdateBktStep(DataItemBase *data_item)
{
uint8_t cur_value = ((EXP_COMP_DATA_ITEM*)data_item)->Get();
nBktStep = vlExpCompensation.GetValueIndex(cur_value) - vlExpCompensation.GetValueIndex(0);
};
 
void MenuExit();
void MenuSetAperture();
void MenuSetShutterSpeed();
void MenuSetWb();
void MenuSetPStyle();
void MenuSetIso();
void MenuSetExpComp();
 
extern Menu mainMenu;
 
//--- Camera Settings Menu -----------------------------------------------------------------
MenuItem settingsMenuItems[] = { {&siMode, &MenuExit}, {&siAperture, &MenuSetAperture}, {&siWb, &MenuSetWb}, {&siShutterSpeed, &MenuSetShutterSpeed}, {&siPStyle, &MenuSetPStyle}, {&siIso, &MenuSetIso}, {&siExpComp, &MenuSetExpComp} };
Menu settingsMenu(8, 7, settingsMenuItems, 0, &mainMenu);
 
void MenuSetAperture() { spinAperture.SetReturnState(&settingsMenu); StateMachine::SetState(&spinAperture); };
void MenuSetShutterSpeed() { spinShutterSpeed.SetReturnState(&settingsMenu); StateMachine::SetState(&spinShutterSpeed); };
void MenuSetWb(){ spinWb.SetReturnState(&settingsMenu); StateMachine::SetState(&spinWb); };
void MenuSetPStyle(){ spinPStyle.SetReturnState(&settingsMenu); StateMachine::SetState(&spinPStyle); };
void MenuSetIso(){ spinIso.SetReturnState(&settingsMenu); StateMachine::SetState(&spinIso); };
void MenuSetExpComp(){ spinExpComp.SetReturnState(&mainMenu); StateMachine::SetState(&spinExpComp); };
 
//--- Self Timer Menu ----------------------------------------------------------------------
void MenuSelfSetH();
void MenuSelfSetM();
void MenuSelfSetS();
 
extern Menu timerSettingsMenu;
 
MenuItem selfSetMenuItems[] = { {&siHourSelf, &MenuSelfSetH}, {&siMinSelf, &MenuSelfSetM}, {&siSecSelf, &MenuSelfSetS} };
Menu selfSetMenu(3, 3, selfSetMenuItems, 0, &timerSettingsMenu);
 
void MenuSelfSetH() { hourSpinSelf.SetReturnState(&selfSetMenu); StateMachine::SetState(&hourSpinSelf); };
void MenuSelfSetM() { minSpinSelf.SetReturnState(&selfSetMenu); StateMachine::SetState(&minSpinSelf); };
 
//--- Timer Settings Menu ------------------------------------------------------------------
void MenuSelf();
void MenuBkt();
void MenuFrames();
void MenuInterval();
void MenuExit();
void MenuRun();
 
MenuItem timerSettingsMenuItems[] = { {&siSelf, &MenuSelf}, {&siFrames, &MenuFrames}, {&siBkt, &MenuBkt}, {&siInterval, &MenuInterval}, {&siRun, &MenuRun}, {&siExit, &MenuExit} };
Menu timerSettingsMenu(2, 6, timerSettingsMenuItems, 0, &mainMenu);
 
void MenuSelfSetS() { secSpinSelf.SetReturnState(&timerSettingsMenu); StateMachine::SetState(&secSpinSelf); };
 
void MenuSelf() { StateMachine::SetState(&selfSetMenu); };
 
void MenuBktSetStep();
void MenuBktStepExit();
 
MenuItem bktSetMenuItems[] = { {&siBktEV, &MenuBktSetStep}, {&siBktStep, &MenuBktStepExit} };
Menu bktSetMenu(5, 2, bktSetMenuItems, 0, &timerSettingsMenu);
 
void MenuBktSetStep()
{
spinBktEV.SetReturnState(&bktSetMenu);
 
if (vlExpCompensation.GetSize())
StateMachine::SetState(&spinBktEV);
};
 
void MenuBktStepExit()
{
spinBktStep.SetReturnState(&timerSettingsMenu);
 
if (vlExpCompensation.GetSize())
StateMachine::SetState(&spinBktStep);
};
 
void MenuBkt()
{
if (vlExpCompensation.GetSize())
StateMachine::SetState(&bktSetMenu);
};
 
 
IntSpin<IntDataItem<uint16_t, 5>, int16_t> framesSpin(0, 9999, 1, &diFramesCount, NULL);
 
void MenuFrames() { framesSpin.SetReturnState(&timerSettingsMenu); Screen::Set(4); StateMachine::SetState(&framesSpin); };
 
void MenuIntSetH();
void MenuIntSetM();
void MenuIntSetS();
 
MenuItem intSetMenuItems[] = { {&siHourInt, &MenuIntSetH}, {&siMinInt, &MenuIntSetM}, {&siSecInt, &MenuIntSetS} };
Menu intSetMenu(6, 3, intSetMenuItems, 0, &timerSettingsMenu);
 
void MenuIntSetH() { hourSpinInt.SetReturnState(&intSetMenu); StateMachine::SetState(&hourSpinInt); };
void MenuIntSetM() { minSpinInt.SetReturnState(&intSetMenu); StateMachine::SetState(&minSpinInt); };
void MenuIntSetS() { secSpinInt.SetReturnState(&timerSettingsMenu); StateMachine::SetState(&secSpinInt); };
 
void MenuInterval() { StateMachine::SetState(&intSetMenu); };
 
void MenuRunAbort()
{
hdrCapture.PostEvent(&evtAbort);
diFramesLeft.Set(0);
StateMachine::SetState(&timerSettingsMenu);
};
 
MenuItem runMenuItems[] = { {&siAbort, &MenuRunAbort} };
Menu runMenu(7, 1, runMenuItems, 0);
 
void MenuRun()
{
if (!diFramesCount.Get())
return;
uint32_t intr_timeout = ((uint32_t)diHourInt.Get() * 3600 + (uint32_t)diMinInt.Get() * 60 + (uint32_t)diSecInt.Get());
uint32_t self_timeout = ((uint32_t)diHourSelf.Get() * 3600 + (uint32_t)diMinSelf.Get() * 60 + (uint32_t)diSecSelf.Get());
 
diFramesLeft.Set(diFramesCount.Get());
diLeftTimer.Set(self_timeout);
diIntTimer.Set(intr_timeout);
 
SetEvt setEvt;
setEvt.sig = SET_FRAMES_SIG;
setEvt.value = diFramesCount.Get();
hdrCapture.dispatch(&setEvt);
setEvt.sig = SET_FRAME_TIMEOUT_SIG;
setEvt.value = intr_timeout;
hdrCapture.dispatch(&setEvt);
setEvt.sig = SET_SELF_TIMEOUT_SIG;
setEvt.value = self_timeout;
hdrCapture.dispatch(&setEvt);
SetBktEvt setBktEvt;
setBktEvt.sig = SET_BRACKETING_SIG;
setBktEvt.step = nBktStep;
setBktEvt.negative = nBktNegativeIndex;
setBktEvt.positive = nBktPositiveIndex;
hdrCapture.dispatch(&setBktEvt);
StateMachine::SetState(&runMenu);
setEvt.sig = RUN_SIG;
hdrCapture.dispatch(&setEvt);
};
 
//--- Main Menu ----------------------------------------------------------------------------
void MenuIntervalometer() { StateMachine::SetState(&timerSettingsMenu); };
 
void MenuSettings()
{
StateMachine::SetState(&settingsMenu);
};
 
MenuItem mainMenuItems[] = { {&siIntervalometer, &MenuIntervalometer}, {&siSettings, &MenuSettings} };
Menu mainMenu(1, 2, mainMenuItems, 0);
 
void MenuExit() { StateMachine::SetState(&mainMenu); };
 
class DummyMenu : public StateMachine
{
public:
virtual bool OnInitialState()
{
Screen::Set(0);
return true;
};
} DisconnectedState;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
stateConnected = false;
PTPPollTimer.Disable();
StateMachine::SetState(&DisconnectedState);
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
{
stateConnected = true;
PTPPollTimer.Enable();
StateMachine::SetState(&mainMenu);
}
hdrCapture.Run();
}
 
void CamHDRCapture::OnFrameCaptured(uint16_t left)
{
diFramesLeft.Set(left);
 
if (!left)
StateMachine::SetState(&timerSettingsMenu);
}
 
void CamHDRCapture::OnSelfTimerProgress(uint32_t left)
{
diLeftTimer.Set(left);
}
 
void CamHDRCapture::OnIntrTimerProgress(uint32_t left)
{
diIntTimer.Set(left);
}
 
void OnControlTimer()
{
ExtControls.CheckControls();
hdrCapture.PostEvent(&evtTick);
Screen::Run(&LCD);
}
 
void OnPTPPollTimer()
{
EOSEventParser prs;
Eos.EventCheck(&prs);
diLeftTimer.SetUpdated(true);
diIntTimer.SetUpdated(true);
}
 
void setup()
{
StateMachine::SetState(&DisconnectedState);
#ifdef PTPDEBUG
Serial.begin(115200);
#endif
 
Eos.Setup();
delay( 200 );
// set up the LCD's number of rows and columns:
LCD.begin(16, 2);
LCD.clear();
LCD.home();
LCD.setCursor(0,0);
PTPPollTimer.Set(OnPTPPollTimer, 300);
// 1ms is the perfect interval for encoder polling
ControlTimer.Set(OnControlTimer, 1);
ControlTimer.Enable();
evtTick.sig = TICK_MILLIS_SIG;
evtAbort.sig = ABORT_SIG;
hdrCapture.init();
 
#ifdef PTPDEBUG
Serial.println("Start");
#endif
}
 
void loop()
{
Eos.Task();
PTPPollTimer.Run();
ControlTimer.Run();
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/camcontroller.h
0,0 → 1,49
/* Camera controller header */
#ifndef __CAMCONTROLLER_H__
#define __CAMCONTROLLER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
 
#include <canoneos.h>
#include <eosvaluetitles.h>
#include "menu.h"
 
const char msgSetSelf[] PROGMEM = "SELF";
const char msgSetFrames[] PROGMEM = "FRMS";
const char msgSetBkt[] PROGMEM = "BKT";
const char msgSetInterval[] PROGMEM = "INT";
const char msgExit[] PROGMEM = "EXIT";
const char msgSetRun[] PROGMEM = "RUN ";
const char msgAbort[] PROGMEM = "ABORT";
const char msgLeft[] PROGMEM = "LEFT";
 
const char msgError[] PROGMEM = "ERROR:";
const char msgCamera[] PROGMEM = "CAMERA";
const char msgDisconnected[] PROGMEM = "DISCONNECTED";
 
const char msgSelfTimer[] PROGMEM = "SELF TIMER h/m/s";
const char msgBracketing[] PROGMEM = "BKT(RANGE/STEP)";
const char msgSteps[] PROGMEM = "steps";
const char msgCntFrames[] PROGMEM = "FRAMES";
const char msgIntTimer[] PROGMEM = "INT TIMER h/m/s";
const char msgIntervalometer[] PROGMEM = "INTERVAL";
const char msgSettings[] PROGMEM = "SETTINGS";
const char msgClock[] PROGMEM = "CLOCK";
const char msgEV[] PROGMEM = "EV";
 
typedef KeyValuePairDataItem<VT_EXPCOMP, VT_EXPCOMP_COUNT, VT_EXPCOMP_TEXT_LEN> EXP_COMP_DATA_ITEM; // Exposure compensation data item type
typedef SRAMValueList<VT_EXPCOMP, 16> BKT_STEP_VALUE_LIST; // Bracketing step value list type
 
//--- Data Item Types ---------------------------------------------------------
typedef KeyValuePairDataItem<VT_MODE, VT_MODE_COUNT, VT_MODE_TEXT_LEN> DIT_MODE;
typedef KeyValuePairDataItem<VT_APERTURE, VT_APT_COUNT, VT_APT_TEXT_LEN> DIT_APERTURE;
typedef KeyValuePairDataItem<VT_WB, VT_WB_COUNT, VT_WB_TEXT_LEN> DIT_WB;
typedef KeyValuePairDataItem<VT_SHSPEED, VT_SHSPEED_COUNT, VT_SHSPEED_TEXT_LEN> DIT_SHUTTER_SPEED;
typedef KeyValuePairDataItem<VT_PSTYLE, VT_PSTYLE_COUNT, VT_PSTYLE_TEXT_LEN> DIT_PSTYLE;
typedef KeyValuePairDataItem<VT_ISO, VT_ISO_COUNT, VT_ISO_TEXT_LEN> DIT_ISO;
typedef KeyValuePairDataItem<VT_EXPCOMP, VT_EXPCOMP_COUNT, VT_EXPCOMP_TEXT_LEN> DIT_EXPCOMP;
typedef IntDataItem<uint8_t, 3> DIT_TIMER_DIGIT_PAIR;
 
 
#endif //__CAMCONTROLLER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/controls.cpp
0,0 → 1,50
#include <Max3421e.h>
#include "controls.h"
 
StateMachine* StateMachine::currentState = NULL;
 
void GPInRegister::CheckControls()
{
int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
ControlStates previous = controlStates;
controlStates = (pMax->gpioRd() & (GPIN_ENCODER_MASK | GPIN_ENC_BUT_MASK | GPIN_EXT_BUT_MASK));
ControlStates changes = (previous ^ controlStates);
if (previous == controlStates)
return;
ControlEvents *state_machine = (ControlEvents*)StateMachine::GetState();
if ((changes & GPIN_ENCODER_MASK))
{
uint8_t encoder = (previous & GPIN_ENCODER_MASK);
encoder <<= 2;
encoder |= (controlStates & GPIN_ENCODER_MASK);
encoderValue += enc_states[(encoder & 0x0f)];
if (encoderValue > 3 || encoderValue < -3)
{
if (state_machine)
state_machine->OnEncoderChanged(encoderValue >> 2);
encoderValue = 0;
}
}
if (!state_machine)
return;
if ((changes & GPIN_ENC_BUT_MASK))
{
if ((controlStates & GPIN_ENC_BUT_MASK))
state_machine->OnEncButtonUp();
else
state_machine->OnEncButtonDown();
}
if ((changes & GPIN_EXT_BUT_MASK))
{
if ((controlStates & GPIN_EXT_BUT_MASK))
state_machine->OnExtButtonUp();
else
state_machine->OnExtButtonDown();
}
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/controls.h
0,0 → 1,50
#ifndef __CONTROLS_H__
#define __CONTROLS_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
 
class StateMachine
{
static StateMachine *currentState;
protected:
virtual bool OnInitialState() { return true; };
 
public:
static void SetState(StateMachine *state) { currentState = state; currentState->OnInitialState(); };
static StateMachine* GetState() { return StateMachine::currentState; };
};
 
class ControlEvents : public StateMachine
{
public:
virtual bool OnEncoderChanged(int8_t value) { return true; };
virtual bool OnEncButtonUp() { return true; };
virtual bool OnEncButtonDown() { return true; };
virtual bool OnExtButtonUp() { return true; };
virtual bool OnExtButtonDown() { return true; };
};
 
#define GPIN_ENCODER_MASK 0x03
#define GPIN_ENC_BUT_MASK 0x08
#define GPIN_EXT_BUT_MASK 0x10
 
#define GPIN_ENC_BUT_MASK 0x04
#define GPIN_EXT_BUT_MASK 0x08
 
 
typedef uint8_t ControlStates;
 
class GPInRegister
{
ControlStates controlStates;
MAX3421E *pMax;
int8_t encoderValue;
public:
GPInRegister(MAX3421E *pmax) : controlStates(GPIN_ENCODER_MASK | GPIN_ENC_BUT_MASK | GPIN_EXT_BUT_MASK), pMax(pMax), encoderValue(0) {};
void CheckControls();
};
 
#endif // __CONTROLS_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/dataitem.cpp
0,0 → 1,51
#include "dataitem.h"
 
char TimeSpanDataItem::textValue[9] = "";
char TimerDataItem::textValue[9] = "";
 
char* itoa2(int val, uint8_t buf_size, char *buf, int8_t base, char c)
{
char sign = (val < 0) ? '-' : c;
buf[buf_size-1] = 0;
 
int8_t i = buf_size-2;
for(; val && i ; --i, val /= base)
buf[i] = "0123456789abcdef"[(val < 0) ? -(val % base) : val % base];
for (; i > 0; i--)
buf[i] = c;
buf[0] = sign;
return buf;
}
 
char* itoa2(uint8_t val, uint8_t buf_size, char *buf, int8_t base, char c)
{
buf[buf_size-1] = 0;
 
int8_t i = buf_size-2;
for(; val && i>=0 ; --i, val /= base)
buf[i] = "0123456789abcdef"[(val < 0) ? -(val % base) : val % base];
for (; i >= 0; i--)
buf[i] = c;
return buf;
}
 
char* itoa2(uint16_t val, uint8_t buf_size, char *buf, int8_t base, char c)
{
buf[buf_size-1] = 0;
 
int8_t i = buf_size-2;
for(; val && i>=0 ; --i, val /= base)
buf[i] = "0123456789abcdef"[val % base];
for (; i >= 0; i--)
buf[i] = c;
return buf;
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/dataitem.h
0,0 → 1,194
#if !defined(__DATAITEM_H__)
#define __DATAITEM_H__
 
#include <inttypes.h>
#include <canoneos.h>
#include <SimpleTimer.h>
#include <valuelist.h>
 
#define MUL10( a ) (((a) << 3 ) + ((a) << 1 ))
 
char* itoa2(int val, uint8_t buf_size, char *buf, int8_t base, char c);
char* itoa2(uint8_t val, uint8_t buf_size, char *buf, int8_t base, char c);
char* itoa2(uint16_t val, uint8_t buf_size, char *buf, int8_t base, char c);
 
class DataItemBase
{
protected:
bool isUpdated;
public:
virtual void GetText(char** str, bool &is_pgm) = 0;
bool IsUpdated() { return isUpdated; };
void SetUpdated(bool upd) { isUpdated = upd; };
};
 
class TimeSpanDataItem : public DataItemBase
{
uint32_t dataValue;
static char textValue[9];
public:
TimeSpanDataItem(uint32_t s) : dataValue(s) {};
 
virtual void GetText(char** str, bool &is_pgm)
{
{
uint16_t h = dataValue / 3600;
itoa2((uint16_t) h, 3, (char*)&textValue, 10, '0');
}
{
textValue[2] = ':';
uint16_t s = dataValue % 3600;
itoa2((uint16_t) s / 60, 3, (char*)(textValue+3), 10, '0');
textValue[5] = ':';
itoa2((uint16_t) s % 60, 3, (char*)(textValue+6), 10, '0');
}
*str = textValue;
is_pgm = false;
};
virtual void Set(uint32_t &val)
{
dataValue = val;
isUpdated = true;
};
};
 
#define MUL60( a ) (((a) << 6 ) - ((a) << 2 ))
#define MUL3600( a ) (((a) << 12 ) - ((a) << 9 ) + ((a) << 4 ))
 
class TimerDataItem : public DataItemBase
{
SimpleTimer &dataValue;
static char textValue[9];
public:
TimerDataItem(SimpleTimer &t) : dataValue(t) {};
 
virtual void GetText(char** str, bool &is_pgm)
{
uint16_t time_left = dataValue.TimeLeft() / 1000;
uint16_t ss = time_left % 60;
time_left /= 60;
uint16_t mm = time_left % 60;
time_left /= 60;
uint16_t hh = time_left;
itoa2((uint16_t)hh, 3, (char*)&textValue, 10, '0');
textValue[2] = ':';
itoa2((uint16_t)mm, 3, (char*)(textValue+3), 10, '0');
textValue[5] = ':';
itoa2((uint16_t)ss, 3, (char*)(textValue+6), 10, '0');
*str = textValue;
is_pgm = false;
};
};
 
template <class VALUE_TYPE, const uint8_t TABLE_SIZE, const uint8_t TEXT_SIZE>
class KeyValuePairDataItem : public DataItemBase
{
VALUE_TYPE dataValue;
const ValueTitle<VALUE_TYPE, TEXT_SIZE> *ptrTitles;
public:
KeyValuePairDataItem(VALUE_TYPE val, const ValueTitle<VALUE_TYPE, TEXT_SIZE> *p) : dataValue(val), ptrTitles(p)
{};
virtual void GetText(char** str, bool &is_pgm)
{
*str = (char*)FindTitle<VALUE_TYPE, TEXT_SIZE>(TABLE_SIZE, ptrTitles, dataValue);
is_pgm = true;
};
VALUE_TYPE Get() { return dataValue; };
void Set(VALUE_TYPE val) { dataValue = val; isUpdated = true; };
};
 
template <class VALUE_TYPE, const uint8_t TEXT_LEN>
class IntDataItem : public DataItemBase
{
VALUE_TYPE dataValue;
static char valString[TEXT_LEN];
public:
IntDataItem() : dataValue(0) { isUpdated = true; };
IntDataItem(VALUE_TYPE data) : dataValue(data) {};
virtual void Set(VALUE_TYPE data)
{
dataValue = data;
isUpdated = true;
};
VALUE_TYPE Get() { return dataValue; };
virtual void GetText(char** str, bool &is_pgm)
{
*str = itoa2(dataValue, TEXT_LEN, (char*)&valString, 10, '0');
is_pgm = false;
};
void operator ++(int val)
{
dataValue += val;
isUpdated = true;
};
void operator --(int val)
{
dataValue -= val;
isUpdated = true;
};
};
 
template <class VALUE_TYPE, const uint8_t TEXT_LEN>
char IntDataItem<VALUE_TYPE,TEXT_LEN>::valString[TEXT_LEN] = "";
 
class PgmStringDataItem : public DataItemBase
{
const char *pStr;
public:
PgmStringDataItem(const char *str) : pStr(str) { isUpdated = true; };
void SetText(const char *str) { pStr = str; isUpdated = true; };
virtual void GetText(char** str, bool &is_pgm)
{
*str = (char*)pStr;
is_pgm = true;
};
};
 
template <const uint8_t STRLEN>
class StringDataItem : public DataItemBase
{
char theString[STRLEN];
void CopyString(char *src, char *dst)
{
char *s = src, *d = dst;
for (uint8_t cnt = 0; *s && cnt < STRLEN-1; cnt++, s++, d++)
*d = *s;
*d = 0;
};
public:
StringDataItem() { theString[0] = 0; isUpdated = true; };
StringDataItem(char *str) { CopyString(str, &theString); isUpdated = true; };
 
void SetText(char *str) { CopyString(str, &theString); isUpdated = true; };
virtual void GetText(char** str, bool &is_pgm)
{
*str = &theString;
is_pgm = false;
};
};
 
 
#endif // __DATAITEM_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/eoseventparser.cpp
0,0 → 1,191
#include "eoseventparser.h"
#include "dataitem.h"
#include "camcontroller.h"
 
extern DIT_MODE diMode;
extern DIT_APERTURE diAperture;
extern DIT_WB diWb;
extern DIT_SHUTTER_SPEED diShutterSpeed;
extern DIT_PSTYLE diPStyle;
extern DIT_ISO diIso;
extern DIT_EXPCOMP diExpComp;
 
extern EEPROMByteList vlAperture;
extern EEPROMByteList vlShutterSpeed;
extern EEPROMByteList vlWhiteBalance;
extern EEPROMByteList vlPictureStyle;
extern EEPROMByteList vlExpCompensation;
extern EEPROMByteList vlIso;
 
bool EOSEventParser::EventRecordParse(uint8_t **pp, uint16_t *pcntdn)
{
switch (nRecStage)
{
case 0:
// Retrieves the size of the event record
if (!valueParser.Parse(pp, pcntdn))
return false;
 
nRecSize = (uint16_t)varBuffer;
 
// calculates the number of event parameters ( size / 4 - 1 )
paramCountdown = (nRecSize >> 2) - 1;
paramCount = 1;
nRecSize -= 4;
nRecStage ++;
case 1:
for (; paramCountdown; paramCountdown--, paramCount++, nRecSize -= 4)
{
if (!valueParser.Parse(pp, pcntdn))
return false;
 
switch (paramCount)
{
// Event Code
case 1:
eosEvent.eventCode = (uint16_t)varBuffer;
break;
// Property Code
case 2:
// if (eosEvent.eventCode == EOS_EC_ObjectCreated)
// {
// }
eosEvent.propCode = (uint16_t)varBuffer;
break;
// C189 - Property Value, C18A - Enumerator Type
case 3:
eosEvent.propValue = varBuffer;
if (eosEvent.eventCode == EOS_EC_DevPropChanged)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
diAperture.Set(varBuffer);
break;
case EOS_DPC_ShutterSpeed:
diShutterSpeed.Set(varBuffer);
break;
case EOS_DPC_ShootingMode:
diMode.Set(varBuffer);
break;
case EOS_DPC_WhiteBalance:
diWb.Set(varBuffer);
break;
case EOS_DPC_PictureStyle:
diPStyle.Set(varBuffer);
break;
case EOS_DPC_Iso:
diIso.Set(varBuffer);
break;
case EOS_DPC_ExposureCompensation:
diExpComp.Set(varBuffer);
break;
};
}
break;
// C18A/enumType == 3 - Size of enumerator array
case 4:
if (eosEvent.eventCode == EOS_EC_DevPropValuesAccepted)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
vlAperture.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_ShutterSpeed:
vlShutterSpeed.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_WhiteBalance:
vlWhiteBalance.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_PictureStyle:
vlPictureStyle.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_Iso:
vlIso.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_ExposureCompensation:
vlExpCompensation.SetSize((uint8_t)varBuffer);
break;
};
}
break;
// C18A/enumType == 3 - Enumerator Values
default:
if (eosEvent.eventCode == EOS_EC_DevPropValuesAccepted)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
vlAperture.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_ShutterSpeed:
vlShutterSpeed.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_WhiteBalance:
vlWhiteBalance.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_PictureStyle:
vlPictureStyle.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_ExposureCompensation:
vlExpCompensation.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_Iso:
vlIso.Set(paramCount-5, (uint8_t)varBuffer);
break;
} // switch (eosEvent.propCode)
}
} // switch (paramCount)
} // for
nRecStage ++;
case 2:
if (nRecSize)
if (!byteSkipper.Skip(pp, pcntdn, nRecSize))
return false;
 
nRecSize = 0;
nRecStage = 0;
}
return true;
}
 
void EOSEventParser::InitEOSEventStruct()
{
eosEvent.eventCode = constInitialEventCode;
eosEvent.propCode = 0;
eosEvent.propValue = 0;
}
 
 
void EOSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint8_t *p = (uint8_t*) pbuf;
uint16_t cntdn = len;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
InitEOSEventStruct();
nStage ++;
case 2:
while (1)
{
if (!EventRecordParse(&p, &cntdn))
return;
if (IsLastEventRecord())
break;
InitEOSEventStruct();
}
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/eoseventparser.h
0,0 → 1,75
#ifndef __EOSEVENTPARSER_H__
#define __EOSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <Max_LCD.h>
#include <ptpcallback.h>
#include <canoneos.h>
 
 
struct EOSParamValues
{
uint8_t upperValue;
uint8_t currentValue;
uint8_t lowerValue;
};
 
#define MAX_OBJ_IN_LIST 8
 
class EOSEventParser : public PTPReadParser
{
const uint16_t constInitialEventCode;
 
uint8_t paramsChanged;
 
struct EOSEvent
{
uint16_t eventCode;
uint16_t propCode;
uint32_t propValue;
};
 
uint8_t nStage;
uint8_t nRecStage;
uint16_t nRecSize;
MultiValueBuffer theBuffer;
uint32_t varBuffer;
EOSEvent eosEvent;
uint16_t paramCountdown;
uint16_t paramCount;
 
MultiByteValueParser valueParser;
ByteSkipper byteSkipper;
 
bool EventRecordParse(uint8_t **pp, uint16_t *pcntdn);
bool IsLastEventRecord() { return (eosEvent.eventCode == 0); };
void InitEOSEventStruct();
 
public:
EOSEventParser() :
constInitialEventCode(0xFFFF),
nStage(0),
nRecStage(0),
nRecSize(0),
varBuffer(0),
paramCountdown(0),
paramsChanged(0)
{
theBuffer.pValue = &varBuffer;
};
 
void Reset()
{
nStage = 0;
nRecStage = 0;
nRecSize = 0;
varBuffer = 0;
paramCountdown = 0;
paramsChanged = 0;
};
 
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __EOSEVENTPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/expcomp_macro.h
0,0 → 1,3
extern EEPROMByteList vlExpCompensation;
 
#define EXP_COMP_VALUE(i)((uint32_t)vlExpCompensation.Get((i)))
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/hdrcapture.cpp
0,0 → 1,336
#include "hdrcapture.h"
#include "expcomp_macro.h"
 
/* fixes avr-gcc incompatibility with virtual destructors */
void operator delete( void *p ) {}
 
QState HDRCapture::Initial(HDRCapture *me, QEvent const *e)
{
return Q_TRAN(&HDRCapture::Inactive);
}
 
QState HDRCapture::Inactive(HDRCapture *me, QEvent const *e)
{
switch(e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Inactive\r\n");
return Q_HANDLED();
case SET_FRAMES_SIG:
me->frmCount = (uint16_t)((SetEvt*)e)->value;
return Q_HANDLED();
case SET_SELF_TIMEOUT_SIG:
me->selfTimeout = ((SetEvt*)e)->value;
return Q_HANDLED();
case SET_FRAME_TIMEOUT_SIG:
me->frameTimeout = ((SetEvt*)e)->value;
return Q_HANDLED();
case SET_BRACKETING_SIG:
me->bktStep = ((SetBktEvt*)e)->step;
me->bktNegative = ((SetBktEvt*)e)->negative;
me->bktPositive = ((SetBktEvt*)e)->positive;
return Q_HANDLED();
case RUN_SIG:
me->frmCntdn = me->frmCount;
me->bktCntdn = (me->bktStep) ? (me->bktPositive - me->bktNegative) / me->bktStep + 1 : 1;
me->bktPos = me->bktNegative;
return Q_TRAN(&HDRCapture::Active);
}
return Q_SUPER(&QHsm::top);
}
 
QState HDRCapture::Active(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Active\r\n");
return Q_HANDLED();
case Q_EXIT_SIG:
PTPTRACE("::Q_EXIT_SIG\r\n");
return Q_HANDLED();
case Q_INIT_SIG:
PTPTRACE("Q_INIT_SIG\r\n");
return Q_TRAN(&HDRCapture::SaveSettings);
case RUN_SIG:
PTPTRACE("::RUN_SIG\r\n");
return Q_TRAN(&HDRCapture::SaveSettings);
case ABORT_SIG:
PTPTRACE("ABORT_SIG\r\n");
return Q_TRAN(&HDRCapture::RestoreSettings);
case PTP_RC_SIG:
PTPTRACE("::PTP_RC_SIG\r\n");
switch (((PTP_RC_Evt*)e)->rc)
{
case PTP_RC_OK:
me->qpEvt.sig = PTP_RC_OK_SIG;
me->theQueue.Push(&me->qpEvt);
return Q_HANDLED();
case PTP_RC_DeviceBusy:
me->toEvt.timeout = PTP_TIMEOUT;
me->toEvt.attribs = TA_PTP_TIMEOUT;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
default:
return Q_TRAN(&HDRCapture::Inactive);
}
case SET_TIMEOUT_SIG:
PTPTRACE("::SET_TIMEOUT_SIG\r\n");
return Q_HANDLED();
case TIMEOUT_SIG:
PTPTRACE("::TIMEOUT_SIG\r\n");
return Q_TRAN(me->activeHistory);
case PTP_RC_OK_SIG:
PTPTRACE("::PTP_RC_OK_SIG\r\n");
return Q_TRAN(me->activeHistory);
case TICK_MILLIS_SIG:
PTPTRACE("::TICK_MILLIS_SIG\r\n");
return Q_HANDLED();
}
return Q_SUPER(&QHsm::top);
}
 
QState HDRCapture::SaveSettings(HDRCapture *me, QEvent const *e)
{
static bool bSaved = false;
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("SaveSettings\r\n");
me->activeHistory = (QStateHandler)&SaveSettings;
// me->rcEvt.rc = me->Eos.GetProperty(EOS_DPC_ExposureCompensation, me->bktOldVal);
me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
me->bktOldVal = (uint8_t)0;
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
if (me->selfTimeout)
{
me->theQueue.Push((QEvent*)e);
return Q_TRAN(&HDRCapture::SelfTimer);
}
return Q_TRAN(&HDRCapture::PreCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::SelfTimer(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("SelfTimer\r\n");
me->activeHistory = (QStateHandler)&SelfTimer;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
me->toEvt.timeout = me->selfTimeout;
me->toEvt.attribs = TA_SELF_TIMER;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
case TIMEOUT_SIG:
PTPTRACE("TIMEOUT_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::RestoreSettings(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("RestoreSettings\r\n");
me->activeHistory = (QStateHandler)&RestoreSettings;
me->rcEvt.rc = me->Eos.SetProperty(EOS_DPC_ExposureCompensation, me->bktOldVal);
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
return Q_TRAN(&HDRCapture::Inactive);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::PreCapture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("PreCapture\r\n");
me->activeHistory = (QStateHandler)&PreCapture;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
if (!me->bktCntdn)
{
me->bktCntdn = (me->bktStep) ? (me->bktPositive - me->bktNegative) / me->bktStep + 1 : 1;
me->bktPos = me->bktNegative;
}
if (me->bktStep)
return Q_TRAN(&HDRCapture::ExpCompSet);
return Q_TRAN(&HDRCapture::Capture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::Capture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Capture\r\n");
me->activeHistory = (QStateHandler)&Capture;
me->rcEvt.rc = me->Eos.Capture();
// me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
return Q_TRAN(&HDRCapture::PostCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::PostCapture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("PostCapture\r\n");
me->activeHistory = (QStateHandler)&PostCapture;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
 
if (!me->bktCntdn)
return Q_TRAN(&HDRCapture::PreCapture);
 
me->bktPos += me->bktStep;
if (--me->bktCntdn == 0)
{
--me->frmCntdn;
me->OnFrameCaptured(me->frmCntdn);
}
me->OnBktFrameCaptured(me->bktCntdn);
 
// if it was the last frame in total
if (!me->frmCntdn)
{
me->qpEvt.sig = ABORT_SIG;
me->theQueue.Push(&me->qpEvt);
return Q_HANDLED();
}
if (me->bktCntdn)
return Q_TRAN(&HDRCapture::PreCapture);
 
// if it was the last frame in bracketing
me->toEvt.timeout = me->frameTimeout;
me->toEvt.attribs = TA_INTR_TIMER;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
case TIMEOUT_SIG:
PTPTRACE("TIMEOUT_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
}
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::ExpCompSet(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("ExpCompSet\r\n");
me->activeHistory = (QStateHandler)&ExpCompSet;
me->rcEvt.rc = me->Eos.SetProperty(EOS_DPC_ExposureCompensation, EXP_COMP_VALUE(me->bktPos));
// me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
return Q_TRAN(&HDRCapture::Capture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::Timeout(HDRCapture *me, QEvent const *e)
{
static uint32_t timeout = 0;
static uint32_t local_time = 0;
static uint32_t seconds_left = 0;
static uint8_t attribs = 0;
static uint16_t sec_cntdn = 1000;
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Timeout\r\n");
return Q_HANDLED();
case SET_TIMEOUT_SIG:
attribs = ((SetTimeoutEvt*)e)->attribs;
timeout = (attribs & 0x01) ? ((SetTimeoutEvt*)e)->timeout * 1000 : ((SetTimeoutEvt*)e)->timeout;
if (attribs & 0x01)
{
seconds_left = ((SetTimeoutEvt*)e)->timeout;
sec_cntdn = 1000;
switch (attribs)
{
case TA_SELF_TIMER:
me->OnSelfTimerProgress(seconds_left);
break;
case TA_INTR_TIMER:
me->OnIntrTimerProgress(seconds_left);
break;
// case TA_BULB_TIMER:
// me->OnBulbTimerProgress(seconds_left);
// break;
} // switch
}
local_time = millis();
return Q_HANDLED();
case TICK_MILLIS_SIG:
uint32_t dt = local_time;
local_time = millis();
dt = local_time - dt;
timeout = (timeout < dt) ? 0 : timeout - dt;
 
if (attribs & 1)
{
bool bTick = (sec_cntdn <= dt);
sec_cntdn = (sec_cntdn > dt) ? sec_cntdn - dt : 1000 - dt;
if (bTick)
{
seconds_left --;
switch (attribs)
{
case TA_SELF_TIMER:
me->OnSelfTimerProgress(seconds_left);
break;
case TA_INTR_TIMER:
me->OnIntrTimerProgress(seconds_left);
break;
} // switch
} // if (--sec_cntdn == 0)
} // if (attribs & 1)
if (!timeout)
{
me->qpEvt.sig = TIMEOUT_SIG;
me->theQueue.Push(&me->qpEvt);
}
return Q_HANDLED();
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/hdrcapture.h
0,0 → 1,130
#if !defined(__HDRCAPTURE_H__)
#define __HDRCAPTURE_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <qep_port.h>
#include <ptp.h>
#include <canoneos.h>
#include <simplefifo.h>
#include <valuelist.h>
 
#define PTP_TIMEOUT 250
 
#define TA_PTP_TIMEOUT 0x00
#define TA_SELF_TIMER 0x03
#define TA_INTR_TIMER 0x05
#define TA_BULB_TIMER 0x07
 
enum HDRCaptureSignals
{
TICK_MILLIS_SIG = Q_USER_SIG,
SET_FRAMES_SIG,
SET_SELF_TIMEOUT_SIG,
SET_FRAME_TIMEOUT_SIG,
SET_BRACKETING_SIG,
RUN_SIG,
ABORT_SIG,
TIMEOUT_SIG,
SET_TIMEOUT_SIG,
PTP_RC_SIG,
PTP_RC_OK_SIG
};
 
struct SetTimeoutEvt : public QEvent
{
uint32_t timeout;
uint8_t attribs;
};
 
struct SetEvt : public QEvent
{
uint32_t value;
};
 
struct SetBktEvt : public QEvent
{
uint8_t step;
uint8_t negative;
uint8_t positive;
};
 
struct PTP_RC_Evt : public QEvent
{
uint16_t rc;
};
 
class HDRCapture : public QHsm
{
uint16_t frmCntdn;
uint16_t frmCount;
uint32_t selfTimeout;
uint32_t frameTimeout;
uint8_t bktStep;
uint8_t bktNegative;
uint8_t bktPositive;
uint8_t bktCntdn;
uint8_t bktPos;
uint8_t bktOldVal;
CanonEOS &Eos;
SetTimeoutEvt toEvt;
PTP_RC_Evt rcEvt;
QEvent qpEvt;
QStateHandler activeHistory;
 
SimpleFIFO<QEvent*, 4> theQueue;
public:
HDRCapture(CanonEOS &eos) :
QHsm((QStateHandler)&HDRCapture::Initial),
frmCount(0),
frmCntdn(0),
selfTimeout(0),
frameTimeout(0),
bktStep(0),
bktNegative(0),
bktPositive(0),
bktCntdn(0),
bktPos(0),
bktOldVal(0),
Eos(eos),
activeHistory(NULL)
{
toEvt.sig = SET_TIMEOUT_SIG;
rcEvt.sig = PTP_RC_SIG;
};
void PostEvent(QEvent *e)
{
theQueue.Push(e);
};
void Run()
{
QEvent *e = NULL;
while ( (e = theQueue.Pop()) )
dispatch(e);
};
 
protected:
static QState Initial(HDRCapture *me, QEvent const *e);
static QState Inactive(HDRCapture *me, QEvent const *e);
static QState Active(HDRCapture *me, QEvent const *e);
static QState SelfTimer(HDRCapture *me, QEvent const *e);
static QState PreCapture(HDRCapture *me, QEvent const *e);
static QState Capture(HDRCapture *me, QEvent const *e);
static QState PostCapture(HDRCapture *me, QEvent const *e);
static QState ExpCompSet(HDRCapture *me, QEvent const *e);
static QState SaveSettings(HDRCapture *me, QEvent const *e);
static QState RestoreSettings(HDRCapture *me, QEvent const *e);
static QState Timeout(HDRCapture *me, QEvent const *e);
virtual void OnFrameCaptured(uint16_t left) {};
virtual void OnBktFrameCaptured(uint16_t left) {};
virtual void OnSelfTimerProgress(uint32_t left) {};
virtual void OnIntrTimerProgress(uint32_t left) {};
};
 
#endif // __HDRCAPTURE_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/menu.cpp
0,0 → 1,39
#include "menu.h"
 
bool Menu::OnInitialState()
{
menuItems[itemSelected].screenItem->Highlight(true);
Screen::Set(screenId);
return true;
};
 
bool Menu::OnEncoderChanged(int8_t value)
{
menuItems[itemSelected].screenItem->Highlight(false);
int8_t new_val = (int8_t)itemSelected + value;
if (new_val < 0)
itemSelected = 0;
else if (new_val >= numItems)
itemSelected = numItems - 1;
else
itemSelected = (uint8_t)new_val;
menuItems[itemSelected].screenItem->Highlight(true);
 
return true;
};
 
bool Menu::OnEncButtonDown()
{
if (menuItems[itemSelected].ptrFunction)
(menuItems[itemSelected].ptrFunction)();
};
 
bool Menu::OnExtButtonDown()
{
if (returnState)
StateMachine::SetState(returnState);
};
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/menu.h
0,0 → 1,200
#if !defined(__MENU_H__)
#define __MENU_H__
 
#include <inttypes.h>
#include "screenitem.h"
#include "screen.h"
#include "controls.h"
 
typedef void (*MenuFunctionPtr)();
 
struct MenuItem
{
ScreenItem *screenItem;
MenuFunctionPtr ptrFunction;
};
 
class Menu : public ControlEvents
{
uint8_t numItems;
uint8_t itemSelected;
uint8_t screenId;
MenuItem *menuItems;
StateMachine *returnState;
public:
Menu(uint8_t scr, uint8_t num_items, MenuItem *items, uint8_t sel = 0, StateMachine *s = NULL) :
screenId(scr),
numItems(num_items),
menuItems(items),
itemSelected(sel),
returnState(s)
{};
void SetReturnState(StateMachine *s) { returnState = s; };
virtual bool OnInitialState();
virtual bool OnEncoderChanged(int8_t value);
virtual bool OnEncButtonDown();
virtual bool OnExtButtonDown();
};
 
typedef void (*SpinFunction)(DataItemBase *data_item);
 
template <class ITEM_TYPE, class VALUE_TYPE>
class IntSpin : public ControlEvents
{
VALUE_TYPE minValue;
VALUE_TYPE maxValue;
VALUE_TYPE incValue;
ITEM_TYPE *dataItem;
StateMachine *returnState;
SpinFunction pFunction;
 
public:
IntSpin(VALUE_TYPE min_val, VALUE_TYPE max_val, VALUE_TYPE inc_val, ITEM_TYPE *item, SpinFunction f) :
minValue(min_val),
maxValue(max_val),
incValue(inc_val),
dataItem(item),
returnState(NULL),
pFunction(f)
{
};
void SetConstraints(VALUE_TYPE min_val, VALUE_TYPE max_val, VALUE_TYPE inc_val)
{
minValue = min_val;
maxValue = max_val;
incValue = inc_val;
};
void SetReturnState(StateMachine *s) { returnState = s; };
virtual bool OnEncoderChanged(int8_t value)
{
int16_t new_val = dataItem->Get() + value * incValue;
if (new_val > maxValue)
new_val = maxValue;
else if (new_val < minValue)
new_val = minValue;
dataItem->Set((VALUE_TYPE)new_val);
dataItem->SetUpdated(true);
return true;
};
 
virtual bool OnEncButtonDown()
{
if (pFunction)
pFunction((DataItemBase*)dataItem);
if (returnState)
StateMachine::SetState(returnState);
return true;
};
};
 
template <class ITEM_TYPE, class VALUE_TYPE>
class EEPROMListIntSpin : public ControlEvents
{
EEPROMByteList *valueList;
ITEM_TYPE *dataItem;
StateMachine *returnState;
SpinFunction pFunction;
public:
EEPROMListIntSpin(EEPROMByteList *list, ITEM_TYPE *item, SpinFunction pf) :
valueList(list),
dataItem(item),
returnState(NULL),
pFunction(pf)
{
};
void SetReturnState(StateMachine *s) { returnState = s; };
virtual bool OnEncoderChanged(int8_t value)
{
if (valueList->GetSize() < 1)
return true;
VALUE_TYPE new_value;
if (value < 0)
new_value = valueList->GetPrev(dataItem->Get(), -value);
else
new_value = valueList->GetNext(dataItem->Get(), value);
dataItem->Set(new_value);
dataItem->SetUpdated(true);
return true;
};
 
virtual bool OnEncButtonDown()
{
if (pFunction)
pFunction((DataItemBase*)dataItem);
if (returnState)
StateMachine::SetState(returnState);
return true;
};
};
 
 
template <class ITEM_TYPE, class VALUE_TYPE, class VALUE_LIST_TYPE>
class SRAMListIntSpin : public ControlEvents
{
VALUE_LIST_TYPE *valueList;
ITEM_TYPE *dataItem;
StateMachine *returnState;
SpinFunction pFunction;
public:
SRAMListIntSpin(VALUE_LIST_TYPE *list, ITEM_TYPE *item, SpinFunction pf) :
valueList(list),
dataItem(item),
returnState(NULL),
pFunction(pf)
{
};
void SetReturnState(StateMachine *s) { returnState = s; };
virtual bool OnEncoderChanged(int8_t value)
{
if (valueList->GetSize() < 1)
return true;
VALUE_TYPE new_value;
if (value < 0)
new_value = valueList->GetPrev(dataItem->Get(), -value);
else
new_value = valueList->GetNext(dataItem->Get(), value);
dataItem->Set(new_value);
dataItem->SetUpdated(true);
return true;
};
 
virtual bool OnEncButtonDown()
{
if (pFunction)
pFunction((DataItemBase*)dataItem);
if (returnState)
StateMachine::SetState(returnState);
return true;
};
};
 
#endif // __MENU_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/screen.cpp
0,0 → 1,43
#include "screen.h"
 
uint8_t Screen::currentScreen = 0;
uint8_t Screen::totalScreens = 0;
bool Screen::screenChanged = true;
 
Screen::Screen(const uint8_t num_items, ScreenItem *pItems) : numItems(num_items)
{
screenItems = (ScreenItem*)pgm_read_word(pItems);
if (totalScreens < MAX_SCREENS)
screenPool2[totalScreens++] = this;
};
 
void Screen::Update(Max_LCD *pLcd, bool initial)
{
for (uint8_t i=0; i<numItems; i++)
screenItems[i].Update(pLcd, initial);
};
 
void Screen::Set(uint8_t screen_id)
{
if (screen_id >= totalScreens)
return;
currentScreen = screen_id;
screenChanged = true;
};
 
void Screen::Run(Max_LCD *pLcd)
{
if (screenChanged)
{
pLcd->clear();
pLcd->home();
}
if (screenPool2[currentScreen])
{
screenPool2[currentScreen]->Update(pLcd, (screenChanged) ? true : false);
screenChanged = false;
}
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/screen.h
0,0 → 1,32
#if !defined(__SCREEN_H__)
#define __SCREEN_H__
 
#include <inttypes.h>
#include "screenitem.h"
 
#define MAX_SCREENS 12
 
class Screen;
 
static Screen *screenPool2[MAX_SCREENS];
 
class Screen
{
static uint8_t currentScreen;
static uint8_t totalScreens;
static bool screenChanged;
ScreenItem *screenItems;
const uint8_t numItems;
public:
Screen(const uint8_t num_items, ScreenItem *pItems);
static void Run(Max_LCD *pLcd);
static void Set(uint8_t screen_id);
static uint8_t Get() { return currentScreen; };
void Update(Max_LCD *pLcd, bool initial);
};
 
#endif // __SCREEN_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/screenitem.cpp
0,0 → 1,89
#include "screenitem.h"
 
void ScreenItem::SetAttribs(uint8_t left, uint8_t top, uint8_t len, bool highlighted, bool pgm)
{
itemAttribs.bmLeft = left;
itemAttribs.bmTop = top;
itemAttribs.bmLen = len;
itemAttribs.bmHighlighted = (highlighted) ? 1 : 0;
itemAttribs.bmHlChanged = 1; // item highlighting changed flag
itemAttribs.bmPgmString = (pgm) ? 1 : 0;
};
 
ScreenItem::ScreenItem(uint8_t left, uint8_t top, uint8_t len, bool highlighted, DataItemBase *item) :
dataItem(item)
{
SetAttribs(left, top, len, highlighted, 0);
}
 
ScreenItem::ScreenItem(uint8_t left, uint8_t top, uint8_t len, bool highlighted, const char *item) :
dataItem((void*)item)
{
SetAttribs(left, top, len, highlighted, 1);
}
 
void ScreenItem::Print(Max_LCD *p)
{
char* str;
bool is_pgm = false;
if (itemAttribs.bmPgmString == 1)
{
is_pgm = true;
str = (char*)dataItem;
}
else
((DataItemBase*)dataItem)->GetText(&str, is_pgm);
if(!str)
return;
uint8_t cnt = 0;
if (is_pgm)
{
char c;
while((c = pgm_read_byte(str++)) && cnt < itemAttribs.bmLen)
{
p->print(c,BYTE);
cnt ++;
}
}
else
{
char *pc = str;
while(*pc && cnt < itemAttribs.bmLen)
{
p->print(*pc++,BYTE);
cnt ++;
}
}
}
 
void ScreenItem::Update(Max_LCD *pLcd, bool initial)
{
if (initial || ( itemAttribs.bmPgmString == 0 && ((DataItemBase*)dataItem)->IsUpdated() ) || itemAttribs.bmHlChanged)
{
pLcd->home();
if (itemAttribs.bmLeft > 0)
{
pLcd->setCursor(itemAttribs.bmLeft-1, itemAttribs.bmTop);
pLcd->print((itemAttribs.bmHighlighted) ? '>' : ' ', BYTE);
}
else
pLcd->setCursor(itemAttribs.bmLeft, itemAttribs.bmTop);
Print(pLcd);
if (itemAttribs.bmLeft + itemAttribs.bmLen < 16)
pLcd->print((itemAttribs.bmHighlighted) ? '<' : ' ', BYTE);
if (itemAttribs.bmPgmString == 0)
((DataItemBase*)dataItem)->SetUpdated(false);
itemAttribs.bmHlChanged = 0;
}
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCamController/screenitem.h
0,0 → 1,36
#if !defined(__SCREENITEM_H__)
#define __SCREENITEM_H__
 
#include <inttypes.h>
#include <Max_LCD.h>
#include "dataitem.h"
 
struct ScreenItemAttributes
{
uint16_t bmLeft : 4;
uint16_t bmTop : 2;
uint16_t bmLen : 5;
uint16_t bmHighlighted : 1;
uint16_t bmHlChanged : 1;
uint16_t bmPgmString : 1;
};
 
class ScreenItem
{
ScreenItemAttributes itemAttribs;
void *dataItem;
void Print(Max_LCD *p);
void SetAttribs(uint8_t left, uint8_t top, uint8_t len, bool highlighted, bool pgm);
public:
ScreenItem(uint8_t left, uint8_t top, uint8_t len, bool highlighted, DataItemBase *item);
ScreenItem(uint8_t left, uint8_t top, uint8_t len, bool highlighted, const char *item);
void Update(Max_LCD *pLcd, bool initial = true);
void Highlight(bool on) { itemAttribs.bmHighlighted = (on) ? 1 : 0; itemAttribs.bmHlChanged = 1; };
bool IsHighlighted() { return (itemAttribs.bmHighlighted == 1); };
};
 
#endif
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSCapture/EOSCapture.pde
0,0 → 1,71
/* Capture command demo */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <canoneos.h>
 
#include <MemoryFree.h>
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public PTPStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
 
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
stateConnected = true;
 
uint16_t rc = Eos.Capture();
if (rc != PTP_RC_OK)
Message(PSTR("Error: "), rc);
delay(5000);
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
}
 
void loop()
{
Eos.Task();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSEventLab/EOSEventLab.pde
0,0 → 1,80
/* EOS event visualizer. Connect camera and start pressing some buttons - the events would be printed on the screen */
/* doesn't work very well with XSI */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <canoneos.h>
#include <simpletimer.h>
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
SimpleTimer PTPPollTimer;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("\r\nDevice disconnected.\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
}
}
 
void OnPTPPollTimer()
{
EOSEventDump hex;
Eos.EventCheck(&hex);
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 500);
}
 
void loop()
{
Eos.Task();
PTPPollTimer.Run();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSEventMonitor/EOSEventMonitor.pde
0,0 → 1,83
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <ptpdebug.h>
#include <canoneos.h>
#include <simpletimer.h>
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
SimpleTimer PTPPollTimer;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("\r\nDevice disconnected.\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
}
}
 
void OnPTPPollTimer()
{
Serial.println("\r\n");
HexDump hex;
Eos.EventCheck(&hex);
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 1000);
}
 
void loop()
{
Eos.Task();
PTPPollTimer.Run();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSFocus/EOSFocus.pde
0,0 → 1,87
/* EOS Focus control demo */
/* Tested with 7D */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <canoneos.h>
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void setup() {
Serial.begin( 115200 );
Serial.println("Start");
Eos.Setup();
delay( 200 );
}
 
void loop()
{
Eos.Task();
}
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
Notify(PSTR("Camera disconnected.\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
 
// Switch LiveView on
Eos.SwitchLiveView(true);
delay(50);
for (uint8_t i=0; i<10; i++)
{
if (i > 4)
Eos.MoveFocus(3);
else
Eos.MoveFocus(0x8003);
 
delay(100);
Eos.Capture();
delay(1500);
}
 
// Switch LiveView off
Eos.SwitchLiveView(false);
}
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSHDRCapture/EOSHDRCapture.pde
0,0 → 1,114
/* Exposure compensation change demo */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
#include <ptp.h>
#include <canoneos.h>
#include <qep_port.h>
 
#include "hdrcapture.h"
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
HDRCapture hdrCapture(Eos);
QEvent msTick;
QEvent secTick;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
Serial.println("Connected");
 
SetEvt setEvt;
setEvt.sig = RUN_SIG;
hdrCapture.PostEvent(&setEvt);
}
hdrCapture.Run();
hdrCapture.PostEvent(&msTick); // post TICK_MILLIS_SIG event
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
 
Eos.Setup();
delay( 200 );
 
hdrCapture.init();
SetEvt setEvt;
setEvt.sig = SET_FRAMES_SIG;
setEvt.value = 3;
hdrCapture.dispatch(&setEvt);
setEvt.sig = SET_FRAME_TIMEOUT_SIG;
setEvt.value = 5;
hdrCapture.dispatch(&setEvt);
setEvt.sig = SET_SELF_TIMEOUT_SIG;
setEvt.value = 3;
hdrCapture.dispatch(&setEvt);
SetBktEvt setBktEvt;
setBktEvt.sig = SET_BRACKETING_SIG;
setBktEvt.step = 2;
setBktEvt.negative = 3;
setBktEvt.positive = 9;
hdrCapture.dispatch(&setBktEvt);
msTick.sig = TICK_MILLIS_SIG;
}
 
void loop()
{
Eos.Task();
delay(1);
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSHDRCapture/expcomp_macro.h
0,0 → 1,9
#if !defined(__EXPCOMP_MACRO_H__)
#define __EXPCOMP_MACRO_H__
 
uint8_t expComp[] = { 0xF0, 0xF3, 0xF5, 0xF8, 0xFB, 0xFD, 0, 0x03, 0x05, 0x08, 0x0B, 0x0D, 0x10 };
 
 
#define EXP_COMP_VALUE(i)((uint32_t)expComp[(i)])
 
#endif // __EXPCOMP_MACRO_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSHDRCapture/hdrcapture.cpp
0,0 → 1,336
#include "hdrcapture.h"
#include "expcomp_macro.h"
 
/* fixes avr-gcc incompatibility with virtual destructors */
void operator delete( void *p ) {}
 
QState HDRCapture::Initial(HDRCapture *me, QEvent const *e)
{
return Q_TRAN(&HDRCapture::Inactive);
}
 
QState HDRCapture::Inactive(HDRCapture *me, QEvent const *e)
{
switch(e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Inactive\r\n");
return Q_HANDLED();
case SET_FRAMES_SIG:
me->frmCount = (uint16_t)((SetEvt*)e)->value;
return Q_HANDLED();
case SET_SELF_TIMEOUT_SIG:
me->selfTimeout = ((SetEvt*)e)->value;
return Q_HANDLED();
case SET_FRAME_TIMEOUT_SIG:
me->frameTimeout = ((SetEvt*)e)->value;
return Q_HANDLED();
case SET_BRACKETING_SIG:
me->bktStep = ((SetBktEvt*)e)->step;
me->bktNegative = ((SetBktEvt*)e)->negative;
me->bktPositive = ((SetBktEvt*)e)->positive;
return Q_HANDLED();
case RUN_SIG:
me->frmCntdn = me->frmCount;
me->bktCntdn = (me->bktStep) ? (me->bktPositive - me->bktNegative) / me->bktStep + 1 : 1;
me->bktPos = me->bktNegative;
return Q_TRAN(&HDRCapture::Active);
}
return Q_SUPER(&QHsm::top);
}
 
QState HDRCapture::Active(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Active\r\n");
return Q_HANDLED();
case Q_EXIT_SIG:
PTPTRACE("::Q_EXIT_SIG\r\n");
return Q_HANDLED();
case Q_INIT_SIG:
PTPTRACE("Q_INIT_SIG\r\n");
return Q_TRAN(&HDRCapture::SaveSettings);
case RUN_SIG:
PTPTRACE("::RUN_SIG\r\n");
return Q_TRAN(&HDRCapture::SaveSettings);
case ABORT_SIG:
PTPTRACE("ABORT_SIG\r\n");
return Q_TRAN(&HDRCapture::RestoreSettings);
case PTP_RC_SIG:
PTPTRACE("::PTP_RC_SIG\r\n");
switch (((PTP_RC_Evt*)e)->rc)
{
case PTP_RC_OK:
me->qpEvt.sig = PTP_RC_OK_SIG;
me->theQueue.Push(&me->qpEvt);
return Q_HANDLED();
case PTP_RC_DeviceBusy:
me->toEvt.timeout = PTP_TIMEOUT;
me->toEvt.attribs = TA_PTP_TIMEOUT;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
default:
return Q_TRAN(&HDRCapture::Inactive);
}
case SET_TIMEOUT_SIG:
PTPTRACE("::SET_TIMEOUT_SIG\r\n");
return Q_HANDLED();
case TIMEOUT_SIG:
PTPTRACE("::TIMEOUT_SIG\r\n");
return Q_TRAN(me->activeHistory);
case PTP_RC_OK_SIG:
PTPTRACE("::PTP_RC_OK_SIG\r\n");
return Q_TRAN(me->activeHistory);
case TICK_MILLIS_SIG:
PTPTRACE("::TICK_MILLIS_SIG\r\n");
return Q_HANDLED();
}
return Q_SUPER(&QHsm::top);
}
 
QState HDRCapture::SaveSettings(HDRCapture *me, QEvent const *e)
{
static bool bSaved = false;
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("SaveSettings\r\n");
me->activeHistory = (QStateHandler)&SaveSettings;
// me->rcEvt.rc = me->Eos.GetProperty(EOS_DPC_ExposureCompensation, me->bktOldVal);
me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
me->bktOldVal = (uint8_t)0;
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
if (me->selfTimeout)
{
me->theQueue.Push((QEvent*)e);
return Q_TRAN(&HDRCapture::SelfTimer);
}
return Q_TRAN(&HDRCapture::PreCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::SelfTimer(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("SelfTimer\r\n");
me->activeHistory = (QStateHandler)&SelfTimer;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
me->toEvt.timeout = me->selfTimeout;
me->toEvt.attribs = TA_SELF_TIMER;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
case TIMEOUT_SIG:
PTPTRACE("TIMEOUT_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::RestoreSettings(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("RestoreSettings\r\n");
me->activeHistory = (QStateHandler)&RestoreSettings;
me->rcEvt.rc = me->Eos.SetProperty(EOS_DPC_ExposureCompensation, me->bktOldVal);
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
return Q_TRAN(&HDRCapture::Inactive);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::PreCapture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("PreCapture\r\n");
me->activeHistory = (QStateHandler)&PreCapture;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
if (!me->bktCntdn)
{
me->bktCntdn = (me->bktStep) ? (me->bktPositive - me->bktNegative) / me->bktStep + 1 : 1;
me->bktPos = me->bktNegative;
}
if (me->bktStep)
return Q_TRAN(&HDRCapture::ExpCompSet);
return Q_TRAN(&HDRCapture::Capture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::Capture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Capture\r\n");
me->activeHistory = (QStateHandler)&Capture;
me->rcEvt.rc = me->Eos.Capture();
// me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
return Q_TRAN(&HDRCapture::PostCapture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::PostCapture(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("PostCapture\r\n");
me->activeHistory = (QStateHandler)&PostCapture;
return Q_HANDLED();
case TICK_MILLIS_SIG:
PTPTRACE("TICK_MILLIS_SIG\r\n");
 
if (!me->bktCntdn)
return Q_TRAN(&HDRCapture::PreCapture);
 
me->bktPos += me->bktStep;
if (--me->bktCntdn == 0)
{
--me->frmCntdn;
me->OnFrameCaptured(me->frmCntdn);
}
me->OnBktFrameCaptured(me->bktCntdn);
 
// if it was the last frame in total
if (!me->frmCntdn)
{
me->qpEvt.sig = ABORT_SIG;
me->theQueue.Push(&me->qpEvt);
return Q_HANDLED();
}
if (me->bktCntdn)
return Q_TRAN(&HDRCapture::PreCapture);
 
// if it was the last frame in bracketing
me->toEvt.timeout = me->frameTimeout;
me->toEvt.attribs = TA_INTR_TIMER;
me->theQueue.Push(&me->toEvt);
return Q_TRAN(&HDRCapture::Timeout);
case TIMEOUT_SIG:
PTPTRACE("TIMEOUT_SIG\r\n");
return Q_TRAN(&HDRCapture::PreCapture);
}
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::ExpCompSet(HDRCapture *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("ExpCompSet\r\n");
me->activeHistory = (QStateHandler)&ExpCompSet;
me->rcEvt.rc = me->Eos.SetProperty(EOS_DPC_ExposureCompensation, EXP_COMP_VALUE(me->bktPos));
// me->rcEvt.rc = PTP_RC_OK;
me->theQueue.Push(&me->rcEvt);
return Q_HANDLED();
case PTP_RC_OK_SIG:
PTPTRACE("PTP_RC_OK_SIG\r\n");
return Q_TRAN(&HDRCapture::Capture);
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
QState HDRCapture::Timeout(HDRCapture *me, QEvent const *e)
{
static uint32_t timeout = 0;
static uint32_t local_time = 0;
static uint32_t seconds_left = 0;
static uint8_t attribs = 0;
static uint16_t sec_cntdn = 1000;
switch (e->sig)
{
case Q_ENTRY_SIG:
PTPTRACE("Timeout\r\n");
return Q_HANDLED();
case SET_TIMEOUT_SIG:
attribs = ((SetTimeoutEvt*)e)->attribs;
timeout = (attribs & 0x01) ? ((SetTimeoutEvt*)e)->timeout * 1000 : ((SetTimeoutEvt*)e)->timeout;
if (attribs & 0x01)
{
seconds_left = ((SetTimeoutEvt*)e)->timeout;
sec_cntdn = 1000;
switch (attribs)
{
case TA_SELF_TIMER:
me->OnSelfTimerProgress(seconds_left);
break;
case TA_INTR_TIMER:
me->OnIntrTimerProgress(seconds_left);
break;
// case TA_BULB_TIMER:
// me->OnBulbTimerProgress(seconds_left);
// break;
} // switch
}
local_time = millis();
return Q_HANDLED();
case TICK_MILLIS_SIG:
uint32_t dt = local_time;
local_time = millis();
dt = local_time - dt;
timeout = (timeout < dt) ? 0 : timeout - dt;
 
if (attribs & 1)
{
bool bTick = (sec_cntdn <= dt);
sec_cntdn = (sec_cntdn > dt) ? sec_cntdn - dt : 1000 - dt;
if (bTick)
{
seconds_left --;
switch (attribs)
{
case TA_SELF_TIMER:
me->OnSelfTimerProgress(seconds_left);
break;
case TA_INTR_TIMER:
me->OnIntrTimerProgress(seconds_left);
break;
} // switch
} // if (--sec_cntdn == 0)
} // if (attribs & 1)
if (!timeout)
{
me->qpEvt.sig = TIMEOUT_SIG;
me->theQueue.Push(&me->qpEvt);
}
return Q_HANDLED();
} // switch
return Q_SUPER(&HDRCapture::Active);
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSHDRCapture/hdrcapture.h
0,0 → 1,130
#if !defined(__HDRCAPTURE_H__)
#define __HDRCAPTURE_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <qep_port.h>
#include <ptp.h>
#include <canoneos.h>
#include <simplefifo.h>
#include <valuelist.h>
 
#define PTP_TIMEOUT 250
 
#define TA_PTP_TIMEOUT 0x00
#define TA_SELF_TIMER 0x03
#define TA_INTR_TIMER 0x05
#define TA_BULB_TIMER 0x07
 
enum HDRCaptureSignals
{
TICK_MILLIS_SIG = Q_USER_SIG,
SET_FRAMES_SIG,
SET_SELF_TIMEOUT_SIG,
SET_FRAME_TIMEOUT_SIG,
SET_BRACKETING_SIG,
RUN_SIG,
ABORT_SIG,
TIMEOUT_SIG,
SET_TIMEOUT_SIG,
PTP_RC_SIG,
PTP_RC_OK_SIG
};
 
struct SetTimeoutEvt : public QEvent
{
uint32_t timeout;
uint8_t attribs;
};
 
struct SetEvt : public QEvent
{
uint32_t value;
};
 
struct SetBktEvt : public QEvent
{
uint8_t step;
uint8_t negative;
uint8_t positive;
};
 
struct PTP_RC_Evt : public QEvent
{
uint16_t rc;
};
 
class HDRCapture : public QHsm
{
uint16_t frmCntdn;
uint16_t frmCount;
uint32_t selfTimeout;
uint32_t frameTimeout;
uint8_t bktStep;
uint8_t bktNegative;
uint8_t bktPositive;
uint8_t bktCntdn;
uint8_t bktPos;
uint8_t bktOldVal;
CanonEOS &Eos;
SetTimeoutEvt toEvt;
PTP_RC_Evt rcEvt;
QEvent qpEvt;
QStateHandler activeHistory;
 
SimpleFIFO<QEvent*, 4> theQueue;
public:
HDRCapture(CanonEOS &eos) :
QHsm((QStateHandler)&HDRCapture::Initial),
frmCount(0),
frmCntdn(0),
selfTimeout(0),
frameTimeout(0),
bktStep(0),
bktNegative(0),
bktPositive(0),
bktCntdn(0),
bktPos(0),
bktOldVal(0),
Eos(eos),
activeHistory(NULL)
{
toEvt.sig = SET_TIMEOUT_SIG;
rcEvt.sig = PTP_RC_SIG;
};
void PostEvent(QEvent *e)
{
theQueue.Push(e);
};
void Run()
{
QEvent *e = NULL;
while ( (e = theQueue.Pop()) )
dispatch(e);
};
 
protected:
static QState Initial(HDRCapture *me, QEvent const *e);
static QState Inactive(HDRCapture *me, QEvent const *e);
static QState Active(HDRCapture *me, QEvent const *e);
static QState SelfTimer(HDRCapture *me, QEvent const *e);
static QState PreCapture(HDRCapture *me, QEvent const *e);
static QState Capture(HDRCapture *me, QEvent const *e);
static QState PostCapture(HDRCapture *me, QEvent const *e);
static QState ExpCompSet(HDRCapture *me, QEvent const *e);
static QState SaveSettings(HDRCapture *me, QEvent const *e);
static QState RestoreSettings(HDRCapture *me, QEvent const *e);
static QState Timeout(HDRCapture *me, QEvent const *e);
virtual void OnFrameCaptured(uint16_t left) {};
virtual void OnBktFrameCaptured(uint16_t left) {};
virtual void OnSelfTimerProgress(uint32_t left) {};
virtual void OnIntrTimerProgress(uint32_t left) {};
};
 
#endif // __HDRCAPTURE_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/EOSConsole.cpp
0,0 → 1,428
#include "eosconsole.h"
#include <eosvaluetitles.h>
#include <valuelist.h>
 
extern CanonEOS Eos;
extern EEPROMByteList vlAperture;
extern EEPROMByteList vlShutterSpeed;
extern EEPROMByteList vlWhiteBalance;
extern EEPROMByteList vlPictureStyle;
extern EEPROMByteList vlIso;
extern EEPROMByteList vlExpCompensation;
 
extern uint8_t dpMode;
extern uint8_t dpAperture;
extern uint8_t dpShutterSpeed;
extern uint8_t dpWb;
extern uint8_t dpPStyle;
extern uint8_t dpIso;
extern uint8_t dpExpComp;
 
/* fixes avr-gcc incompatibility with virtual destructors */
void operator delete( void *p ) {}
 
const char* menuMain[] = {"Capture", "View Settings", "Change Settings"};
const char* menuChangeSettings[] = {"Aperture", "Shutter Speed", "WB", "Pict Style", "ISO", "Exp Comp"};
const char* menuUpDown[] = {"<<", ">>"};
 
void EOSConsole::ShowParams()
{
Notify(PSTR("\r\nMode:"));
Notify((char*)FindTitle<VT_MODE, VT_MODE_TEXT_LEN>(VT_MODE_COUNT, ModeTitles, dpMode));
Notify(PSTR("\r\nF:"));
Notify((char*)FindTitle<VT_APERTURE, VT_APT_TEXT_LEN>(VT_APT_COUNT, ApertureTitles, dpAperture));
Notify(PSTR("\r\nT:"));
Notify((char*)FindTitle<VT_SHSPEED, VT_SHSPEED_TEXT_LEN>(VT_SHSPEED_COUNT, ShutterSpeedTitles, dpShutterSpeed));
Notify(PSTR("\r\nWB:"));
Notify((char*)FindTitle<VT_WB, VT_WB_TEXT_LEN>(VT_WB_COUNT, WbTitles, dpWb));
Notify(PSTR("\r\nPict Style:"));
Notify((char*)FindTitle<VT_PSTYLE, VT_PSTYLE_TEXT_LEN>(VT_PSTYLE_COUNT, PStyleTitles, dpPStyle));
Notify(PSTR("\r\nISO:"));
Notify((char*)FindTitle<VT_ISO, VT_ISO_TEXT_LEN>(VT_ISO_COUNT, IsoTitles, dpIso));
Notify(PSTR("\r\nExp Comp:"));
Notify((char*)FindTitle<VT_EXPCOMP, VT_EXPCOMP_TEXT_LEN>(VT_EXPCOMP_COUNT, ExpCompTitles, dpExpComp));
Notify(PSTR("\r\n"));
}
 
QState EOSConsole::Initial(EOSConsole *me, QEvent const *e)
{
return Q_TRAN(&EOSConsole::Inactive);
}
 
QState EOSConsole::Inactive(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case TICK_SIG:
return Q_TRAN(&EOSConsole::Active);
}
return Q_SUPER(QHsm::top);
}
 
QState EOSConsole::Active(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_INIT_SIG:
return Q_TRAN(&EOSConsole::MainMenu);
case TICK_SIG:
return Q_TRAN(&EOSConsole::Inactive);
}
return Q_SUPER(QHsm::top);
}
 
void EOSConsole::PrintMenuTitles(uint8_t count, const char **menu)
{
Serial.println("");
for (uint8_t i=0; i<=count; i++)
{
Serial.print(i, DEC);
Serial.print(". ");
if (i == 0)
Serial.println("<..>");
else
Serial.println(menu[i-1]);
}
Serial.println("");
}
 
QState EOSConsole::MainMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(3, menuMain);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
PrintMenuTitles(3, menuMain);
return Q_HANDLED();
case 1:
Eos.Capture();
return Q_HANDLED();
case 2:
ShowParams();
PrintMenuTitles(3, menuMain);
return Q_HANDLED();
case 3:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
}
}
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeSettingsMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(6, menuChangeSettings);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::MainMenu);
case 1: // Aperture
return Q_TRAN(&EOSConsole::ChangeApertureMenu);
case 2: // Shutter Speed
return Q_TRAN(&EOSConsole::ChangeShutterSpeedMenu);
case 3: // White Balance
return Q_TRAN(&EOSConsole::ChangeWBMenu);
case 4: // Picture Style
return Q_TRAN(&EOSConsole::ChangePStyleMenu);
case 5: // ISO
return Q_TRAN(&EOSConsole::ChangeIsoMenu);
case 6: // Exposure Compensation
return Q_TRAN(&EOSConsole::ChangeExpCompMenu);
} // switch
}
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeApertureMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlAperture.GetSize() > 0)
{
new_value = vlAperture.GetNext(dpAperture, 1);
Eos.SetProperty(EOS_DPC_Aperture, new_value);
}
return Q_HANDLED();
case 1:
if (vlAperture.GetSize() > 0)
{
new_value = vlAperture.GetPrev(dpAperture, 1);
Eos.SetProperty(EOS_DPC_Aperture, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeShutterSpeedMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlShutterSpeed.GetSize() > 0)
{
new_value = vlShutterSpeed.GetNext(dpShutterSpeed, 1);
Eos.SetProperty(EOS_DPC_ShutterSpeed, new_value);
}
return Q_HANDLED();
case 1:
if (vlShutterSpeed.GetSize() > 0)
{
new_value = vlShutterSpeed.GetPrev(dpShutterSpeed, 1);
Eos.SetProperty(EOS_DPC_ShutterSpeed, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeWBMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlWhiteBalance.GetSize() > 0)
{
new_value = vlWhiteBalance.GetNext(dpWb, 1);
Eos.SetProperty(EOS_DPC_WhiteBalance, new_value);
}
return Q_HANDLED();
case 1:
if (vlAperture.GetSize() > 0)
{
new_value = vlWhiteBalance.GetPrev(dpWb, 1);
Eos.SetProperty(EOS_DPC_WhiteBalance, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeIsoMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlIso.GetSize() > 0)
{
new_value = vlIso.GetNext(dpIso, 1);
Eos.SetProperty(EOS_DPC_Iso, new_value);
}
return Q_HANDLED();
case 1:
if (vlAperture.GetSize() > 0)
{
new_value = vlIso.GetPrev(dpIso, 1);
Eos.SetProperty(EOS_DPC_Iso, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangePStyleMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlPictureStyle.GetSize() > 0)
{
new_value = vlPictureStyle.GetNext(dpPStyle, 1);
Eos.SetProperty(EOS_DPC_PictureStyle, new_value);
}
return Q_HANDLED();
case 1:
if (vlPictureStyle.GetSize() > 0)
{
new_value = vlPictureStyle.GetPrev(dpPStyle, 1);
Eos.SetProperty(EOS_DPC_PictureStyle, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
QState EOSConsole::ChangeExpCompMenu(EOSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(2, menuUpDown);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&EOSConsole::ChangeSettingsMenu);
case 2:
if (vlExpCompensation.GetSize() > 0)
{
new_value = vlExpCompensation.GetNext(dpExpComp, 1);
Eos.SetProperty(EOS_DPC_ExposureCompensation, new_value);
}
return Q_HANDLED();
case 1:
if (vlExpCompensation.GetSize() > 0)
{
new_value = vlExpCompensation.GetPrev(dpExpComp, 1);
Eos.SetProperty(EOS_DPC_ExposureCompensation, new_value);
}
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&EOSConsole::Active);
}
 
//static EOSConsole menu;
static TickEvt tick_evt;
//static MenuSelectEvt menu_sel_evt;
 
//............................................................................
 
//void setup()
//{
// Serial.begin( 115200 );
//
// menu.init(); // take the initial transition
//
// tick_evt.sig = TICK_SIG;
// tick_evt.fine_time = 0;
//}
 
int8_t EOSConsole::MenuSelect()
{
if( !Serial.available())
return -1;
uint8_t char_count = 0;
uint8_t index = 0;
while (Serial.available() > 0 && char_count < 2)
{
uint8_t key = Serial.read();
key -= '0';
if (index)
{
uint8_t tmp = index;
// index *= 10;
index <<= 3;
index += tmp;
index += tmp;
}
index += key;
char_count ++;
}
return (char_count) ? (int8_t)index : (int8_t)-1;
}
 
//void loop()
//{
// delay(100); // 100 ms delay
//
// if (++tick_evt.fine_time == 10)
// tick_evt.fine_time = 0;
//
// menu.dispatch(&tick_evt); // dispatch TICK event
//
// int8_t index = MenuSelect();
//
// if (index >= 0)
// {
// menu_sel_evt.sig = MENU_SELECT_SIG;
// menu_sel_evt.item_index = index;
// menu.dispatch(&menu_sel_evt); // dispatch the event
// }
//}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/EOSConsole.h
0,0 → 1,51
#if !defined(__EOSCONSOLE_H__)
#define __EOSCONSOLE_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <qep_port.h>
#include <WProgram.h>
#include <canoneos.h>
 
enum TextMenuSignals
{
MENU_SELECT_SIG = Q_USER_SIG,
TICK_SIG
};
 
struct TickEvt : public QEvent
{
uint8_t fine_time; // the fine 1/10 s counter
};
 
struct MenuSelectEvt : public QEvent
{
uint8_t item_index;
};
 
class EOSConsole : public QHsm
{
static void PrintMenuTitles(uint8_t count, const char **menu);
static void ShowParams();
public:
EOSConsole()
: QHsm((QStateHandler)&EOSConsole::Initial)
{};
int8_t MenuSelect();
 
protected:
static QState Initial(EOSConsole *me, QEvent const *e);
static QState Inactive(EOSConsole *me, QEvent const *e);
static QState Active(EOSConsole *me, QEvent const *e);
static QState MainMenu(EOSConsole *me, QEvent const *e);
static QState ChangeSettingsMenu(EOSConsole *me, QEvent const *e);
static QState ChangeApertureMenu(EOSConsole *me, QEvent const *e);
static QState ChangeShutterSpeedMenu(EOSConsole *me, QEvent const *e);
static QState ChangeWBMenu(EOSConsole *me, QEvent const *e);
static QState ChangePStyleMenu(EOSConsole *me, QEvent const *e);
static QState ChangeExpCompMenu(EOSConsole *me, QEvent const *e);
static QState ChangeIsoMenu(EOSConsole *me, QEvent const *e);
};
 
#endif // __EOSCONSOLE_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/EOSRemote.pde
0,0 → 1,147
/* EOS control terminal */
//#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <simpletimer.h>
#include <ptp.h>
#include <canoneos.h>
#include <qep_port.h>
#include <valuelist.h>
#include <eosvaluetitles.h>
 
#include "eoseventparser.h"
#include "eosconsole.h"
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
#define EEP_APERTURE_LIST_OFFSET 0
#define EEP_APERTURE_LIST_SIZE 32
 
#define EEP_SHTSPEED_LIST_OFFSET (EEP_APERTURE_LIST_OFFSET + EEP_APERTURE_LIST_SIZE)
#define EEP_SHTSPEED_LIST_SIZE 64
 
#define EEP_WBALANCE_LIST_OFFSET (EEP_SHTSPEED_LIST_OFFSET + EEP_SHTSPEED_LIST_SIZE)
#define EEP_WBALANCE_LIST_SIZE 12
 
#define EEP_PICSTYLE_LIST_OFFSET (EEP_WBALANCE_LIST_OFFSET + EEP_WBALANCE_LIST_SIZE)
#define EEP_PICSTYLE_LIST_SIZE 12
 
#define EEP_EXPOCOR_LIST_OFFSET (EEP_PICSTYLE_LIST_OFFSET + EEP_PICSTYLE_LIST_SIZE)
#define EEP_EXPOCOR_LIST_SIZE 48
 
#define EEP_ISO_LIST_OFFSET (EEP_EXPOCOR_LIST_OFFSET + EEP_EXPOCOR_LIST_SIZE)
#define EEP_ISO_LIST_SIZE 8
 
EEPROMByteList vlAperture(EEP_APERTURE_LIST_OFFSET, EEP_APERTURE_LIST_SIZE);
EEPROMByteList vlShutterSpeed(EEP_SHTSPEED_LIST_OFFSET, EEP_SHTSPEED_LIST_SIZE);
EEPROMByteList vlWhiteBalance(EEP_WBALANCE_LIST_OFFSET, EEP_WBALANCE_LIST_SIZE);
EEPROMByteList vlPictureStyle(EEP_PICSTYLE_LIST_OFFSET, EEP_PICSTYLE_LIST_SIZE);
EEPROMByteList vlIso(EEP_EXPOCOR_LIST_OFFSET, EEP_EXPOCOR_LIST_SIZE);
EEPROMByteList vlExpCompensation(EEP_EXPOCOR_LIST_OFFSET, EEP_EXPOCOR_LIST_SIZE);
 
class CamStateHandlers : public EOSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
SimpleTimer ControlTimer, PTPPollTimer;
 
CanonEOS Eos(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
QEvent evtTick, evtAbort;
EOSConsole eosConsole;
 
uint8_t dpMode = 0;
uint8_t dpAperture = 0;
uint8_t dpShutterSpeed = 0;
uint8_t dpWb = 0;
uint8_t dpPStyle = 0;
uint8_t dpIso = 0;
uint8_t dpExpComp = 0;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("Camera disconnected.\r\n"));
if (stateConnected == stConnected)
eosConsole.dispatch(&evtTick);
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
eosConsole.dispatch(&evtTick);
}
int8_t index = eosConsole.MenuSelect();
if (index >= 0)
{
MenuSelectEvt menu_sel_evt;
menu_sel_evt.sig = MENU_SELECT_SIG;
menu_sel_evt.item_index = index;
eosConsole.dispatch(&menu_sel_evt); // dispatch the event
}
}
 
void OnControlTimer()
{
// ExtControls.CheckControls();
// hdrCapture.PostEvent(&evtTick);
// Screen::Run(&LCD);
}
 
void OnPTPPollTimer()
{
EOSEventParser prs;
Eos.EventCheck(&prs);
}
 
void setup()
{
Serial.begin(115200);
Eos.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 300);
// 1ms is the perfect interval for encoder polling
ControlTimer.Set(OnControlTimer, 1);
ControlTimer.Enable();
evtTick.sig = TICK_SIG;
// evtAbort.sig = ABORT_SIG;
eosConsole.init();
 
Serial.println("Start");
}
 
void loop()
{
Eos.Task();
PTPPollTimer.Run();
ControlTimer.Run();
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/eoseventparser.cpp
0,0 → 1,212
#include "eoseventparser.h"
#include <eosvaluetitles.h>
 
extern EEPROMByteList vlAperture;
extern EEPROMByteList vlShutterSpeed;
extern EEPROMByteList vlWhiteBalance;
extern EEPROMByteList vlPictureStyle;
extern EEPROMByteList vlExpCompensation;
extern EEPROMByteList vlIso;
 
extern uint8_t dpMode;
extern uint8_t dpAperture;
extern uint8_t dpShutterSpeed;
extern uint8_t dpWb;
extern uint8_t dpPStyle;
extern uint8_t dpIso;
extern uint8_t dpExpComp;
 
 
bool EOSEventParser::EventRecordParse(uint8_t **pp, uint16_t *pcntdn)
{
switch (nRecStage)
{
case 0:
// Retrieves the size of the event record
if (!valueParser.Parse(pp, pcntdn))
return false;
 
nRecSize = (uint16_t)varBuffer;
 
// calculates the number of event parameters ( size / 4 - 1 )
paramCountdown = (nRecSize >> 2) - 1;
paramCount = 1;
nRecSize -= 4;
nRecStage ++;
case 1:
for (; paramCountdown; paramCountdown--, paramCount++, nRecSize -= 4)
{
if (!valueParser.Parse(pp, pcntdn))
return false;
 
switch (paramCount)
{
// Event Code
case 1:
eosEvent.eventCode = (uint16_t)varBuffer;
break;
// Property Code
case 2:
// if (eosEvent.eventCode == EOS_EC_ObjectCreated)
// {
// }
eosEvent.propCode = (uint16_t)varBuffer;
break;
// C189 - Property Value, C18A - Enumerator Type
case 3:
eosEvent.propValue = varBuffer;
if (eosEvent.eventCode == EOS_EC_DevPropChanged)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
dpAperture = (uint8_t) varBuffer;
Notify(PSTR("F:"));
Notify((char*)FindTitle<VT_APERTURE, VT_APT_TEXT_LEN>(VT_APT_COUNT, ApertureTitles, dpAperture));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_ShutterSpeed:
dpShutterSpeed = (uint8_t) varBuffer;
Notify(PSTR("T:"));
Notify((char*)FindTitle<VT_SHSPEED, VT_SHSPEED_TEXT_LEN>(VT_SHSPEED_COUNT, ShutterSpeedTitles, dpShutterSpeed));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_ShootingMode:
dpMode = (uint8_t) varBuffer;
Notify(PSTR("Mode:"));
Notify((char*)FindTitle<VT_MODE, VT_MODE_TEXT_LEN>(VT_MODE_COUNT, ModeTitles, dpMode));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_WhiteBalance:
dpWb = (uint8_t) varBuffer;
Notify(PSTR("WB:"));
Notify((char*)FindTitle<VT_WB, VT_WB_TEXT_LEN>(VT_WB_COUNT, WbTitles, dpWb));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_PictureStyle:
dpPStyle = (uint8_t) varBuffer;
Notify(PSTR("Pict Style:"));
Notify((char*)FindTitle<VT_PSTYLE, VT_PSTYLE_TEXT_LEN>(VT_PSTYLE_COUNT, PStyleTitles, dpPStyle));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_Iso:
dpIso = (uint8_t) varBuffer;
Notify(PSTR("ISO:"));
Notify((char*)FindTitle<VT_ISO, VT_ISO_TEXT_LEN>(VT_ISO_COUNT, IsoTitles, dpIso));
Notify(PSTR("\r\n"));
break;
case EOS_DPC_ExposureCompensation:
dpExpComp = (uint8_t) varBuffer;
Notify(PSTR("Exp Comp:"));
Notify((char*)FindTitle<VT_EXPCOMP, VT_EXPCOMP_TEXT_LEN>(VT_EXPCOMP_COUNT, ExpCompTitles, dpExpComp));
Notify(PSTR("\r\n"));
break;
};
}
break;
// C18A/enumType == 3 - Size of enumerator array
case 4:
if (eosEvent.eventCode == EOS_EC_DevPropValuesAccepted)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
vlAperture.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_ShutterSpeed:
vlShutterSpeed.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_WhiteBalance:
vlWhiteBalance.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_PictureStyle:
vlPictureStyle.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_Iso:
vlIso.SetSize((uint8_t)varBuffer);
break;
case EOS_DPC_ExposureCompensation:
vlExpCompensation.SetSize((uint8_t)varBuffer);
break;
};
}
break;
// C18A/enumType == 3 - Enumerator Values
default:
if (eosEvent.eventCode == EOS_EC_DevPropValuesAccepted)
{
switch (eosEvent.propCode)
{
case EOS_DPC_Aperture:
vlAperture.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_ShutterSpeed:
vlShutterSpeed.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_WhiteBalance:
vlWhiteBalance.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_PictureStyle:
vlPictureStyle.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_ExposureCompensation:
vlExpCompensation.Set(paramCount-5, (uint8_t)varBuffer);
break;
case EOS_DPC_Iso:
vlIso.Set(paramCount-5, (uint8_t)varBuffer);
break;
} // switch (eosEvent.propCode)
}
} // switch (paramCount)
} // for
nRecStage ++;
case 2:
if (nRecSize)
if (!byteSkipper.Skip(pp, pcntdn, nRecSize))
return false;
 
nRecSize = 0;
nRecStage = 0;
}
return true;
}
 
void EOSEventParser::InitEOSEventStruct()
{
eosEvent.eventCode = constInitialEventCode;
eosEvent.propCode = 0;
eosEvent.propValue = 0;
}
 
 
void EOSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint8_t *p = (uint8_t*) pbuf;
uint16_t cntdn = len;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
InitEOSEventStruct();
nStage ++;
case 2:
while (1)
{
if (!EventRecordParse(&p, &cntdn))
return;
if (IsLastEventRecord())
break;
InitEOSEventStruct();
}
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/eoseventparser.h
0,0 → 1,74
#ifndef __EOSEVENTPARSER_H__
#define __EOSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <ptpcallback.h>
#include <canoneos.h>
 
 
struct EOSParamValues
{
uint8_t upperValue;
uint8_t currentValue;
uint8_t lowerValue;
};
 
#define MAX_OBJ_IN_LIST 8
 
class EOSEventParser : public PTPReadParser
{
const uint16_t constInitialEventCode;
 
uint8_t paramsChanged;
 
struct EOSEvent
{
uint16_t eventCode;
uint16_t propCode;
uint32_t propValue;
};
 
uint8_t nStage;
uint8_t nRecStage;
uint16_t nRecSize;
MultiValueBuffer theBuffer;
uint32_t varBuffer;
EOSEvent eosEvent;
uint16_t paramCountdown;
uint16_t paramCount;
 
MultiByteValueParser valueParser;
ByteSkipper byteSkipper;
 
bool EventRecordParse(uint8_t **pp, uint16_t *pcntdn);
bool IsLastEventRecord() { return (eosEvent.eventCode == 0); };
void InitEOSEventStruct();
 
public:
EOSEventParser() :
constInitialEventCode(0xFFFF),
nStage(0),
nRecStage(0),
nRecSize(0),
varBuffer(0),
paramCountdown(0),
paramsChanged(0)
{
theBuffer.pValue = &varBuffer;
};
 
void Reset()
{
nStage = 0;
nRecStage = 0;
nRecSize = 0;
varBuffer = 0;
paramCountdown = 0;
paramsChanged = 0;
};
 
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __EOSEVENTPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/EOSRemote/valuetitles.h
0,0 → 1,263
/* Camera controller header */
#ifndef __VALUETITLES_H__
#define __VALUETITLES_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
 
#include <canoneos.h>
#include <valuelist.h>
 
#define VT_MODE_COUNT 16
#define VT_APT_COUNT 54
#define VT_WB_COUNT 7
#define VT_SHSPEED_COUNT 74
#define VT_PSTYLE_COUNT 9
#define VT_ISO_COUNT 19
#define VT_EXPCOR_COUNT 37
 
const ValueTitle<uint8_t, 4> ApertureTitles[] PROGMEM =
{
{0x00, {' ', ' ', '0', 0 } },
{0x08, {' ', ' ', '1', 0 } },
{0x0B, {'1', '.', '1', 0 } },
{0x0C, {'1', '.', '2', 0 } },
{0x0D, {'1', '.', '2', 0 } },
{0x10, {'1', '.', '4', 0 } },
{0x13, {'1', '.', '6', 0 } },
{0x14, {'1', '.', '8', 0 } },
{0x15, {'1', '.', '8', 0 } },
{0x18, {'2', '.', '0', 0 } },
{0x1B, {'2', '.', '2', 0 } },
{0x1C, {'2', '.', '5', 0 } },
{0x1D, {'2', '.', '5', 0 } },
{0x20, {'2', '.', '8', 0 } },
{0x23, {'3', '.', '2', 0 } },
{0x24, {'3', '.', '5', 0 } },
{0x25, {'3', '.', '5', 0 } },
{0x28, {'4', '.', '0', 0 } },
{0x2B, {'4', '.', '5', 0 } },
{0x2C, {'4', '.', '5', 0 } },
{0x2D, {'5', '.', '0', 0 } },
{0x30, {'5', '.', '6', 0 } },
{0x33, {'6', '.', '3', 0 } },
{0x34, {'6', '.', '7', 0 } },
{0x35, {'7', '.', '1', 0 } },
{0x38, {'8', '.', '0', 0 } },
{0x3B, {'9', '.', '0', 0 } },
{0x3C, {'9', '.', '5', 0 } },
{0x3D, {' ', '1', '0', 0 } },
{0x40, {' ', '1', '1', 0 } },
{0x43, {' ', '1', '3', 0 } },
{0x44, {' ', '1', '3', 0 } },
{0x45, {' ', '1', '4', 0 } },
{0x48, {' ', '1', '6', 0 } },
{0x4B, {' ', '1', '8', 0 } },
{0x4C, {' ', '1', '9', 0 } },
{0x4D, {' ', '2', '0', 0 } },
{0x50, {' ', '2', '2', 0 } },
{0x53, {' ', '2', '5', 0 } },
{0x54, {' ', '2', '7', 0 } },
{0x55, {' ', '2', '9', 0 } },
{0x58, {' ', '3', '2', 0 } },
{0x5B, {' ', '3', '6', 0 } },
{0x5C, {' ', '3', '8', 0 } },
{0x5D, {' ', '4', '0', 0 } },
{0x60, {' ', '4', '5', 0 } },
{0x63, {' ', '5', '1', 0 } },
{0x64, {' ', '5', '4', 0 } },
{0x65, {' ', '5', '7', 0 } },
{0x68, {' ', '6', '4', 0 } },
{0x6B, {' ', '7', '2', 0 } },
{0x6C, {' ', '7', '6', 0 } },
{0x6D, {' ', '8', '0', 0 } },
{0x70, {' ', '9', '1', 0 } }
};
 
const ValueTitle<uint8_t, 5> ShutterSpeedTitles[] PROGMEM =
{
{0x0c, {'B','u','l','b',0} },
{0x10, {' ','3','0','"',0} },
{0x13, {' ','2','5','"',0} },
{0x14, {' ','2','0','"',0} },
{0x15, {' ','2','0','"',0} },
{0x18, {' ','1','5','"',0} },
{0x1B, {' ','1','3','"',0} },
{0x1C, {' ','1','0','"',0} },
{0x1D, {' ','1','0','"',0} },
{0x20, {' ',' ','8','"',0} },
{0x23, {' ',' ','6','"',0} },
{0x24, {' ',' ','6','"',0} },
{0x25, {' ',' ','5','"',0} },
{0x28, {' ',' ','4','"',0} },
{0x2B, {' ','3','"','2',0} },
{0x2C, {' ',' ','3','"',0} },
{0x2D, {' ','2','"','5',0} },
{0x30, {' ',' ','2','"',0} },
{0x33, {' ','1','"','6',0} },
{0x34, {' ','1','"','5',0} },
{0x35, {' ','1','"','3',0} },
{0x38, {' ',' ','1','"',0} },
{0x3B, {' ','0','"','8',0} },
{0x3C, {' ','0','"','7',0} },
{0x3D, {' ','0','"','6',0} },
{0x40, {' ','0','"','5',0} },
{0x43, {' ','0','"','4',0} },
{0x44, {' ','0','"','3',0} },
{0x45, {' ','0','"','3',0} },
{0x48, {' ',' ',' ','4',0} },
{0x4B, {' ',' ',' ','5',0} },
{0x4C, {' ',' ',' ','6',0} },
{0x4D, {' ',' ',' ','6',0} },
{0x50, {' ',' ',' ','8',0} },
{0x53, {' ',' ','1','0',0} },
{0x54, {' ',' ','1','0',0} },
{0x55, {' ',' ','1','3',0} },
{0x58, {' ',' ','1','5',0} },
{0x5B, {' ',' ','2','0',0} },
{0x5C, {' ',' ','2','0',0} },
{0x5D, {' ',' ','2','5',0} },
{0x60, {' ',' ','3','0',0} },
{0x63, {' ',' ','4','0',0} },
{0x64, {' ',' ','4','5',0} },
{0x65, {' ',' ','5','0',0} },
{0x68, {' ',' ','6','0',0} },
{0x6B, {' ',' ','8','0',0} },
{0x6C, {' ',' ','9','0',0} },
{0x6D, {' ','1','0','0',0} },
{0x70, {' ','1','2','5',0} },
{0x73, {' ','1','6','0',0} },
{0x74, {' ','1','8','0',0} },
{0x75, {' ','2','0','0',0} },
{0x78, {' ','2','5','0',0} },
{0x7B, {' ','3','2','0',0} },
{0x7C, {' ','3','5','0',0} },
{0x7D, {' ','4','0','0',0} },
{0x80, {' ','5','0','0',0} },
{0x83, {' ','6','4','0',0} },
{0x84, {' ','7','5','0',0} },
{0x85, {' ','8','0','0',0} },
{0x88, {'1','0','0','0',0} },
{0x8B, {'1','2','5','0',0} },
{0x8C, {'1','5','0','0',0} },
{0x8D, {'1','6','0','0',0} },
{0x90, {'2','0','0','0',0} },
{0x93, {'2','5','0','0',0} },
{0x94, {'3','0','0','0',0} },
{0x95, {'3','2','0','0',0} },
{0x98, {'4','0','0','0',0} },
{0x9B, {'5','0','0','0',0} },
{0x9C, {'6','0','0','0',0} },
{0x9D, {'6','4','0','0',0} },
{0xA0, {'8','0','0','0',0} }
};
 
const ValueTitle<uint8_t, 5> IsoTitles[] PROGMEM =
{
{0x28, {'6',' ',' ',' ',0} },
{0x30, {'1','2',' ',' ',0} },
{0x38, {'2','5',' ',' ',0} },
{0x40, {'5','0',' ',' ',0} },
{0x48, {'1','0','0',' ',0} },
{0x4b, {'1','2','5',' ',0} },
{0x4d, {'1','6','0',' ',0} },
{0x50, {'2','0','0',' ',0} },
{0x53, {'2','5','0',' ',0} },
{0x55, {'3','2','0',' ',0} },
{0x58, {'4','0','0',' ',0} },
{0x5b, {'5','0','0',' ',0} },
{0x5d, {'6','4','0',' ',0} },
{0x60, {'8','0','0',' ',0} },
{0x63, {'1','0','0','0',0} },
{0x65, {'1','2','5','0',0} },
{0x68, {'1','6','0','0',0} },
{0x70, {'3','2','0','0',0} },
{0x78, {'6','4','0','0',0} }
};
 
const ValueTitle<uint8_t, 7> ExpCorTitles[] PROGMEM =
{
{0x28, {'+','5',' ',' ',' ',' ',0} },
{0x25, {'+','4',' ','2','/','3',0} },
{0x23, {'+','4',' ','1','/','3',0} },
{0x20, {'+','4',' ',' ',' ',' ',0} },
{0x1d, {'+','3',' ','2','/','3',0} },
{0x1b, {'+','3',' ','1','/','3',0} },
{0x18, {'+','3',' ',' ',' ',' ',0} },
{0x15, {'+','2',' ','2','/','3',0} },
{0x14, {'+','2',' ','1','/','2',0} },
{0x13, {'+','2',' ','1','/','3',0} },
{0x10, {'+','2',' ',' ',' ',' ',0} },
{0x0d, {'+','1',' ','2','/','3',0} },
{0x0c, {'+','1',' ','1','/','2',0} },
{0x0b, {'+','1',' ','1','/','3',0} },
{0x08, {'+','1',' ',' ',' ',' ',0} },
{0x05, {'+','2','/','3',' ',' ',0} },
{0x04, {'+','1','/','2',' ',' ',0} },
{0x03, {'+','1','/','3',' ',' ',0} },
{0x00, {'0',' ',' ',' ',' ',' ',0} },
{0xfd, {'-','1','/','3',' ',' ',0} },
{0xfc, {'-','1','/','2',' ',' ',0} },
{0xfb, {'-','2','/','3',' ',' ',0} },
{0xf8, {'-','1',' ',' ',' ',' ',0} },
{0xf5, {'-','1',' ','1','/','3',0} },
{0xf4, {'-','1',' ','1','/','2',0} },
{0xf3, {'-','1',' ','2','/','3',0} },
{0xf0, {'-','2',' ',' ',' ',' ',0} },
{0xed, {'-','2',' ','1','/','3',0} },
{0xec, {'-','2',' ','1','/','2',0} },
{0xeb, {'-','2',' ','2','/','3',0} },
{0xe8, {'-','3',' ',' ',' ',' ',0} },
{0xe5, {'-','3',' ','1','/','3',0} },
{0xe3, {'-','3',' ','2','/','3',0} },
{0xe0, {'-','4',' ',' ',' ',' ',0} },
{0xdd, {'-','4',' ','1','/','3',0} },
{0xdb, {'-','3',' ','2','/','3',0} },
{0xd8, {'-','5',' ',' ',' ',' ',0} }
};
 
const ValueTitle<uint8_t, 4> ModeTitles[] PROGMEM =
{
{0, {'P',' ',' ',0} },
{1, {'T','v',' ',0} },
{2, {'A','v',' ',0} },
{3, {'M',' ',' ',0} },
{4, {'B','l','b',0} },
{5, {'A','-','D',0} },
{6, {'D','E','P',0} },
{7, {'C',' ',' ',0} },
{8, {'L','c','k',0} },
{9, {'G','r','n',0} },
{10, {'N','g','h',0} },
{11, {'S','p','r',0} },
{13, {'L','n','d',0} },
{14, {'C','l','s',0} },
{15, {'N','/','F',0} }
};
 
const ValueTitle<uint8_t, 4> WbTitles[] PROGMEM =
{
{0, {'A','W','B',0} },
{1, {'D','a','y',0} },
{2, {'C','l','d',0} },
{3, {'T','n','g',0} },
{4, {'F','l','r',0} },
{5, {'S','t','r',0} },
{6, {'W','/','P',0} },
{8, {'S','h','d',0} }
};
 
const ValueTitle<uint8_t, 4> PStyleTitles[] PROGMEM =
{
{0x21, {'U','s','1',0} },
{0x22, {'U','s','2',0} },
{0x23, {'U','s','3',0} },
{0x81, {'S','t','d',0} },
{0x82, {'P','r','t',0} },
{0x83, {'L','n','d',0} },
{0x84, {'N','t','l',0} },
{0x85, {'F','t','h',0} },
{0x86, {'M','o','n',0} }
};
 
#endif //__VALUETITLES_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/PSCapture.pde
0,0 → 1,106
/* Canon Powershot Capture Demo */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <ptpdebug.h>
#include <canonps.h>
#include <simpletimer.h>
#include "pseventparser.h"
#include "ptpobjinfoparser.h"
 
#define DEV_ADDR 1
 
// Canon PowerShot S3 IS
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
void setup();
void loop();
 
class CamStateHandlers : public PSStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
 
CanonPS Ps(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
SimpleTimer eventTimer, captureTimer;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
eventTimer.Disable();
captureTimer.Disable();
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
{
Notify(PSTR("stateConnected\r\n"));
stateConnected = true;
eventTimer.Enable();
captureTimer.Enable();
}
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Ps.Setup();
eventTimer.Set(&OnEventTimer, 200);
captureTimer.Set(&OnCaptureTimer, 5000);
delay( 200 );
}
 
void loop()
{
eventTimer.Run();
captureTimer.Run();
Ps.Task();
}
 
void OnCaptureTimer()
{
Ps.SetDevicePropValue(PS_DPC_CaptureTransferMode, (uint16_t)0x0D);
uint16_t rc = Ps.Capture();
if (rc != PTP_RC_OK)
Message(PSTR("Error: "), rc);
}
 
void OnEventTimer()
{
PSEventParser prs;
Ps.EventCheck(&prs);
if (uint32_t handle = prs.GetObjHandle())
{
PTPObjInfoParser inf;
Ps.GetObjectInfo(handle, &inf);
}
}
 
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/pseventparser.cpp
0,0 → 1,86
#include "pseventparser.h"
 
void PSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
 
if (!cntdn)
return;
nStage ++;
 
case 1:
//Notify(PSTR("\r\nEvent Block Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
//Notify(PSTR("\r\nNumber of Fields:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
//Notify(PSTR("\r\nEvent Code:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
 
eventCode = *((uint16_t*)theBuffer.pValue);
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
//Notify(PSTR("\r\nTransaction ID:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
if (eventCode == PTP_EC_ObjectAdded)
Notify(PSTR("\r\nObject Added:\t\t"));
 
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (eventCode == PTP_EC_ObjectAdded)
{
if (!valueParser.Parse(&p, &cntdn))
return;
 
objHandle = *((uint32_t*)theBuffer.pValue);
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
Notify(PSTR("\r\n"));
}
if (eventCode == PTP_EC_CaptureComplete)
Notify(PSTR("\r\nCapture complete.\r\n"));
nStage ++;
case 11:
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/pseventparser.h
0,0 → 1,29
#ifndef __PSEVENTPARSER_H__
#define __PSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "ptpcallback.h"
#include "ptpdebug.h"
#include "canonps.h"
 
class PSEventParser : public PTPReadParser
{
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
uint16_t eventCode;
uint32_t objHandle;
 
MultiByteValueParser valueParser;
 
public:
PSEventParser() : nStage(0), varBuffer(0), objHandle(0)
{
theBuffer.pValue = &varBuffer;
};
uint32_t GetObjHandle() { return objHandle; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PSEVENTPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/ptpobjinfoparser.cpp
0,0 → 1,298
#include "ptpobjinfoparser.h"
 
const char* PTPObjInfoParser::acNames[] PROGMEM =
{
msgUndefined,
msgAssociation,
msgScript,
msgExecutable,
msgText,
msgHTML,
msgDPOF,
msgAIFF,
msgWAV,
msgMP3,
msgAVI,
msgMPEG,
msgASF,
msgQT
};
 
const char* PTPObjInfoParser::imNames[] PROGMEM =
{
msgUndefined,
msgEXIF_JPEG,
msgTIFF_EP,
msgFlashPix,
msgBMP,
msgCIFF,
msgUndefined_0x3806,
msgGIF,
msgJFIF,
msgPCD,
msgPICT,
msgPNG,
msgUndefined_0x380C,
msgTIFF,
msgTIFF_IT,
msgJP2,
msgJPX,
};
 
void PTPObjInfoParser::PrintFormat(uint16_t op)
{
Serial.print(op, HEX);
Serial.print("\t");
//Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x30) && ((op & 0xFF) <= (PTP_OFC_QT & 0xFF)))
Notify((char*)pgm_read_word(&acNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0x38) && ((op & 0xFF) <= (PTP_OFC_JPX & 0xFF)))
Notify((char*)pgm_read_word(&imNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OFC_Undefined_Firmware:
Notify(msgUndefined_Firmware);
break;
case MTP_OFC_Windows_Image_Format:
Notify(msgWindows_Image_Format);
break;
case MTP_OFC_Undefined_Audio:
Notify(msgUndefined_Audio);
break;
case MTP_OFC_WMA:
Notify(msgWMA);
break;
case MTP_OFC_OGG:
Notify(msgOGG);
break;
case MTP_OFC_AAC:
Notify(msgAAC);
break;
case MTP_OFC_Audible:
Notify(msgAudible);
break;
case MTP_OFC_FLAC:
Notify(msgFLAC);
break;
case MTP_OFC_Undefined_Video:
Notify(msgUndefined_Video);
break;
case MTP_OFC_WMV:
Notify(msgWMV);
break;
case MTP_OFC_MP4_Container:
Notify(msgMP4_Container);
break;
case MTP_OFC_MP2:
Notify(msgMP2);
break;
case MTP_OFC_3GP_Container:
Notify(msg3GP_Container);
break;
default:
Notify(PSTR("Vendor defined"));
}
}
Notify(PSTR("\r\n"));
}
 
void PTPObjInfoParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
Notify(PSTR("Storage ID:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
Notify(PSTR("\r\nObject Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
Notify(PSTR("Protection Status:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
Notify(PSTR("\r\nObject Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
Notify(PSTR("\r\nThumb Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 11:
Notify(PSTR("Thumb Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 12:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 13:
Notify(PSTR("\r\nThumb Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 14:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 15:
Notify(PSTR("\r\nThumb Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 16:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 17:
Notify(PSTR("\r\nImage Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 18:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 19:
Notify(PSTR("\r\nImage Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 20:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 21:
Notify(PSTR("\r\nImage Bit Depth:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 22:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 23:
Notify(PSTR("\r\nParent Object:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 24:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 25:
Notify(PSTR("\r\nAssociation Type:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 26:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 27:
Notify(PSTR("\r\nAssociation Desc:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 28:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 29:
Notify(PSTR("\r\nSequence Number:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 30:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 31:
Notify(PSTR("\r\nFile Name:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 32:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 33:
Notify(PSTR("\r\nCapture Date:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 34:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 35:
Notify(PSTR("\r\nModification Date:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 36:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 37:
Notify(PSTR("\r\nKeywords:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 38:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
Notify(PSTR("\r\n"));
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/ptpobjinfoparser.h
0,0 → 1,83
#ifndef __PTPOBJINFOPARSER_H__
#define __PTPOBJINFOPARSER_H__
 
#include <ptp.h>
#include <mtpconst.h>
#include <ptpcallback.h>
 
const char msgUndefined [] PROGMEM = "Undefined";
 
// Ancillary formats
const char msgAssociation [] PROGMEM = "Association";
const char msgScript [] PROGMEM = "Script";
const char msgExecutable [] PROGMEM = "Executable";
const char msgText [] PROGMEM = "Text";
const char msgHTML [] PROGMEM = "HTML";
const char msgDPOF [] PROGMEM = "DPOF";
const char msgAIFF [] PROGMEM = "AIFF";
const char msgWAV [] PROGMEM = "WAV";
const char msgMP3 [] PROGMEM = "MP3";
const char msgAVI [] PROGMEM = "AVI";
const char msgMPEG [] PROGMEM = "MPEG";
const char msgASF [] PROGMEM = "ASF";
const char msgQT [] PROGMEM = "QT";
 
// Image formats
const char msgEXIF_JPEG [] PROGMEM = "EXIF_JPEG";
const char msgTIFF_EP [] PROGMEM = "TIFF_EP";
const char msgFlashPix [] PROGMEM = "FlashPix";
const char msgBMP [] PROGMEM = "BMP";
const char msgCIFF [] PROGMEM = "CIFF";
const char msgUndefined_0x3806 [] PROGMEM = "Undefined_0x3806";
const char msgGIF [] PROGMEM = "GIF";
const char msgJFIF [] PROGMEM = "JFIF";
const char msgPCD [] PROGMEM = "PCD";
const char msgPICT [] PROGMEM = "PICT";
const char msgPNG [] PROGMEM = "PNG";
const char msgUndefined_0x380C [] PROGMEM = "Undefined_0x380C";
const char msgTIFF [] PROGMEM = "TIFF";
const char msgTIFF_IT [] PROGMEM = "TIFF_IT";
const char msgJP2 [] PROGMEM = "JP2";
const char msgJPX [] PROGMEM = "JPX";
 
// MTP Object Formats
const char msgUndefined_Firmware [] PROGMEM = "Undefined_Firmware";
const char msgWindows_Image_Format [] PROGMEM = "Windows_Image_Format";
const char msgUndefined_Audio [] PROGMEM = "Undefined_Audio";
const char msgWMA [] PROGMEM = "WMA";
const char msgOGG [] PROGMEM = "OGG";
const char msgAAC [] PROGMEM = "AAC";
const char msgAudible [] PROGMEM = "Audible";
const char msgFLAC [] PROGMEM = "FLAC";
const char msgUndefined_Video [] PROGMEM = "Undefined_Video";
const char msgWMV [] PROGMEM = "WMV";
const char msgMP4_Container [] PROGMEM = "MP4_Container";
const char msgMP2 [] PROGMEM = "MP2";
const char msg3GP_Container [] PROGMEM = "3GP_Container";
 
 
class PTPObjInfoParser : public PTPReadParser
{
static const char* acNames[];
static const char* imNames[];
 
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
 
MultiByteValueParser valueParser;
PTPListParser arrayParser;
 
static void PrintChar(MultiValueBuffer *p)
{
if (((unsigned char*)p->pValue)[0])
Serial.print(((unsigned char*)p->pValue)[0]);
};
void PrintFormat(uint16_t op);
 
public:
PTPObjInfoParser() : nStage(0) { theBuffer.pValue = (uint8_t*)&varBuffer; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PTPOBJINFOPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSCapture/sample_output.txt
0,0 → 1,96
Session opened
stateConnected
 
Object Added: 00000005
Storage ID: 00010001
Object Format: 3801 EXIF_JPEG
Protection Status: 0000
Object Compressed Size: 00315A1A
Thumb Format: 3808 JFIF
Thumb Compressed Size: 0000107A
Thumb Pix Width: 000000A0
Thumb Pix Height: 00000078
Image Pix Width: 00000E40
Image Pix Height: 00000AB0
Image Bit Depth: 00000000
Parent Object: 00000004
Association Type: 0000
Association Desc: 00000001
Sequence Number: 00000000
File Name: IMG_0991.JPG
Capture Date: 20110115T010141.0
Modification Date:
Keywords:
 
Capture complete.
 
Object Added: 00000006
Storage ID: 00010001
Object Format: 3801 EXIF_JPEG
Protection Status: 0000
Object Compressed Size: 002F6B25
Thumb Format: 3808 JFIF
Thumb Compressed Size: 0000106B
Thumb Pix Width: 000000A0
Thumb Pix Height: 00000078
Image Pix Width: 00000E40
Image Pix Height: 00000AB0
Image Bit Depth: 00000000
Parent Object: 00000004
Association Type: 0000
Association Desc: 00000001
Sequence Number: 00000000
File Name: IMG_0992.JPG
Capture Date: 20110115T010146.0
Modification Date:
Keywords:
 
Capture complete.
 
Object Added: 00000007
Storage ID: 00010001
Object Format: 3801 EXIF_JPEG
Protection Status: 0000
Object Compressed Size: 002FE0BF
Thumb Format: 3808 JFIF
Thumb Compressed Size: 00001085
Thumb Pix Width: 000000A0
Thumb Pix Height: 00000078
Image Pix Width: 00000E40
Image Pix Height: 00000AB0
Image Bit Depth: 00000000
Parent Object: 00000004
Association Type: 0000
Association Desc: 00000001
Sequence Number: 00000000
File Name: IMG_0993.JPG
Capture Date: 20110115T010151.0
Modification Date:
Keywords:
 
Capture complete.
 
Object Added: 00000008
Storage ID: 00010001
Object Format: 3801 EXIF_JPEG
Protection Status: 0000
Object Compressed Size: 002EDF53
Thumb Format: 3808 JFIF
Thumb Compressed Size: 00001082
Thumb Pix Width: 000000A0
Thumb Pix Height: 00000078
Image Pix Width: 00000E40
Image Pix Height: 00000AB0
Image Bit Depth: 00000000
Parent Object: 00000004
Association Type: 0000
Association Desc: 00000001
Sequence Number: 00000000
File Name: IMG_0994.JPG
Capture Date: 20110115T010157.0
Modification Date:
Keywords:
 
Capture complete.
Camera disconnected
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSDevProp/PSDevProp.pde
0,0 → 1,105
/* Canon Powershot Device Property Parser */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <ptpdebug.h>
#include <canonps.h>
#include <ptpdpparser.h>
#include <psvaluetitles.h>
#include "devpropparser.h"
 
#define DEV_ADDR 1
 
// Canon PowerShot S3 IS
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public PSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
CanonPS Ps(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected || stateConnected == stInitial)
{
stateConnected = stConnected;
uint16_t prefix = 0xD000;
uint16_t shoot_mode[] = {0x01, 0x02, 0x03, 0x04};
for (uint8_t i=0; i<4; i++)
{
Ps.SetDevicePropValue(PS_DPC_ShootingMode, (uint16_t)shoot_mode[i]);
delay(10);
 
Notify(PSTR("Mode:"));
PrintValueTitle<uint8_t, VT_MODE, VT_MODE_COUNT, VT_MODE_TEXT_LEN>((PTP*)ptp, PS_DPC_ShootingMode, ModeTitles);
Notify(PSTR("\r\n"));
for (uint8_t j=0; j<128; j++)
{
HexDump dmp;
if (Ps.GetDevicePropDesc((prefix | j), &dmp) == PTP_RC_OK)
{
Notify(PSTR("\r\n"));
DevPropParser prs;
if (Ps.GetDevicePropDesc((prefix | j), &prs) == PTP_RC_OK)
Notify(PSTR("\r\n"));
}
}
Notify(PSTR("\r\n"));
 
} // for (uint8_t i=0; i<4; i++)
 
} // if (stateConnected == stDisconnected || stateConnected == stInitial)
}
 
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
Ps.Setup();
delay( 200 );
}
 
void loop()
{
Ps.Task();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSDevProp/devpropparser.cpp
0,0 → 1,368
#include "devpropparser.h"
 
const char* DevPropParser::dtNames1[] PROGMEM =
{
msgUNDEF,
msgINT8,
msgUINT8,
msgINT16,
msgUINT16,
msgINT32,
msgUINT32,
msgINT64,
msgUINT64,
msgINT128,
msgUINT128
};
 
const char* DevPropParser::dtNames2[] PROGMEM =
{
msgUNDEF,
msgAINT8,
msgAUINT8,
msgAINT16,
msgAUINT16,
msgAINT32,
msgAUINT32,
msgAINT64,
msgAUINT64,
msgAINT128,
msgAUINT128
};
 
const char* DevPropParser::prNames[] PROGMEM =
{
msgUndefined,
msgBatteryLevel,
msgFunctionalMode,
msgImageSize,
msgCompressionSetting,
msgWhiteBalance,
msgRGBGain,
msgFNumber,
msgFocalLength,
msgFocusDistance,
msgFocusMode,
msgExposureMeteringMode,
msgFlashMode,
msgExposureTime,
msgExposureProgramMode,
msgExposureIndex,
msgExposureBiasCompensation,
msgDateTime,
msgCaptureDelay,
msgStillCaptureMode,
msgContrast,
msgSharpness,
msgDigitalZoom,
msgEffectMode,
msgBurstNumber,
msgBurstInterval,
msgTimelapseNumber,
msgTimelapseInterval,
msgFocusMeteringMode,
msgUploadURL,
msgArtist,
msgCopyrightInfo
};
 
void DevPropParser::PrintDataType(uint8_t **pp, uint16_t *pcntdn)
{
dataType = *((uint16_t*)(*pp));
bytesSize = GetDataSize();
Notify(PSTR("Data Type:\t\t"));
 
switch (((dataType >> 8) & 0xFF))
{
case 0x00:
if ((dataType & 0xFF) <= (PTP_DTC_UINT128 & 0xFF))
Notify((char*)pgm_read_word(&dtNames1[(dataType & 0xFF)]));
break;
case 0x40:
if ((dataType & 0xFF) <= (PTP_DTC_AUINT128 & 0xFF))
Notify((char*)pgm_read_word(&dtNames2[(dataType & 0xFF)]));
break;
case 0xFF:
Notify(PSTR("STR"));
break;
default:
Notify(PSTR("Unknown"));
}
Notify(PSTR("\r\n"));
(*pp) += 2;
(*pcntdn) -= 2;
}
 
void DevPropParser::PrintDevProp(uint8_t **pp, uint16_t *pcntdn)
{
uint16_t op = *((uint16_t*)(*pp));
 
Notify(PSTR("\r\nDevice Property:\t"));
 
if ((((op >> 8) & 0xFF) == 0x50) && ((op & 0xFF) <= (PTP_DPC_CopyrightInfo & 0xFF)))
{
PrintHex<uint16_t>(op);
Notify(PSTR("\t"));
Notify((char*)pgm_read_word(&prNames[(op & 0xFF)]));
Notify(PSTR("\r\n"));
}
else
{
PrintHex<uint16_t>(op);
Notify(PSTR(" (Vendor defined)\r\n"));
}
(*pp) += 2;
(*pcntdn) -= 2;
}
 
void DevPropParser::PrintGetSet(uint8_t **pp, uint16_t *pcntdn)
{
Notify(PSTR("Get/Set:\t\t"));
Notify(((**pp) == 0x01) ? PSTR("Get/Set\r\n") : (!(**pp)) ? PSTR("Get\r\n") : PSTR("Illegal\r\n"));
(*pp) ++;
(*pcntdn) --;
}
 
uint8_t DevPropParser::GetDataSize()
{
switch (dataType)
{
case PTP_DTC_INT8:
case PTP_DTC_UINT8:
bytesSize = 1;
break;
case PTP_DTC_AINT8:
case PTP_DTC_AUINT8:
bytesSize = 1;
enumParser.Initialize(4, bytesSize, &theBuffer);
break;
case PTP_DTC_INT16:
case PTP_DTC_UINT16:
bytesSize = 2;
enumParser.Initialize(4, bytesSize, &theBuffer);
break;
case PTP_DTC_AINT16:
case PTP_DTC_AUINT16:
bytesSize = 2;
break;
case PTP_DTC_STR:
bytesSize = 2;
enumParser.Initialize(1, bytesSize, &theBuffer);
break;
case PTP_DTC_INT32:
case PTP_DTC_UINT32:
bytesSize = 4;
break;
case PTP_DTC_AINT32:
case PTP_DTC_AUINT32:
bytesSize = 4;
enumParser.Initialize(4, bytesSize, &theBuffer);
break;
case PTP_DTC_INT64:
case PTP_DTC_UINT64:
bytesSize = 8;
break;
case PTP_DTC_AINT64:
case PTP_DTC_AUINT64:
bytesSize = 8;
enumParser.Initialize(4, bytesSize, &theBuffer);
break;
case PTP_DTC_INT128:
case PTP_DTC_UINT128:
bytesSize = 16;
break;
case PTP_DTC_AINT128:
case PTP_DTC_AUINT128:
bytesSize = 16;
enumParser.Initialize(4, bytesSize, &theBuffer);
break;
}
return bytesSize;
}
 
bool DevPropParser::PrintValue(uint8_t **pp, uint16_t *pcntdn)
{
switch (dataType)
{
case PTP_DTC_INT8:
case PTP_DTC_UINT8:
PrintHex<uint8_t>(**pp);
(*pp) ++;
(*pcntdn) --;
break;
case PTP_DTC_AINT8:
case PTP_DTC_AUINT8:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintByte))
return false;
break;
case PTP_DTC_INT16:
case PTP_DTC_UINT16:
PrintHex<uint16_t>(*((uint16_t*)*pp));
(*pp) += 2;
(*pcntdn) -= 2;
break;
case PTP_DTC_AINT16:
case PTP_DTC_AUINT16:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintTwoBytes))
return false;
break;
case PTP_DTC_INT32:
case PTP_DTC_UINT32:
PrintHex<uint32_t>(*((uint32_t*)*pp));
(*pp) += 4;
(*pcntdn) -= 4;
break;
case PTP_DTC_AINT32:
case PTP_DTC_AUINT32:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintFourBytes))
return false;
break;
case PTP_DTC_INT64:
case PTP_DTC_UINT64:
(*pp) += 8;
(*pcntdn) -= 8;
break;
case PTP_DTC_AINT64:
case PTP_DTC_AUINT64:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintEightBytes))
return false;
break;
case PTP_DTC_INT128:
case PTP_DTC_UINT128:
(*pp) += 16;
(*pcntdn) -= 16;
break;
case PTP_DTC_AINT128:
case PTP_DTC_AUINT128:
if (!enumParser.Parse(pp, pcntdn, NULL))
return false;
break;
case PTP_DTC_STR:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return false;
break;
}
return true;
}
 
bool DevPropParser::ParseEnum(uint8_t **pp, uint16_t *pcntdn)
{
if ((dataType & 0xFF00) == 0)
return ParseEnumSingle(pp, pcntdn);
else
return ParseEnumArray(pp, pcntdn);
}
 
bool DevPropParser::ParseEnumArray(uint8_t **pp, uint16_t *pcntdn)
{
switch(enStage)
{
case 0:
theBuffer.valueSize = 2;
valParser.Initialize(&theBuffer);
enStage = 1;
case 1:
if (!valParser.Parse(pp, pcntdn))
return false;
enLen = 0;
enLen = *((uint16_t*)theBuffer.pValue);
enLenCntdn = enLen;
enumParser.Initialize(4, bytesSize, &theBuffer);
enStage = 2;
case 2:
for (; enLenCntdn; enLenCntdn--)
{
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintEnumValue), PTPListParser::modeArray, this)
return false;
Notify(PSTR("\r\n"));
enumParser.Initialize(4, bytesSize, &theBuffer);
}
enStage = 0;
} // switch
return true;
}
 
bool DevPropParser::ParseEnumSingle(uint8_t **pp, uint16_t *pcntdn)
{
switch(enStage)
{
case 0:
enumParser.Initialize(2, bytesSize, &theBuffer);
// Serial.println(bytesSize, DEC);
enStage = 1;
case 1:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PrintEnumValue, this))
return false;
enStage = 0;
} // switch
return true;
}
 
void DevPropParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage = 1;
case 1:
PrintDevProp(&p, &cntdn);
nStage = 2; //++;
case 2:
PrintDataType(&p, &cntdn);
nStage = 3; //++;
case 3:
PrintGetSet(&p, &cntdn);
nStage = 4; //++;
case 4:
Notify(PSTR("Default Value:\t\t"));
nStage = 5; //++;
case 5:
if (!PrintValue(&p, &cntdn))
return;
Notify(PSTR("\r\n"));
nStage = 6; //++;
case 6:
Notify(PSTR("Current Value:\t\t"));
nStage = 7; //++;
case 7:
if (!PrintValue(&p, &cntdn))
return;
Notify(PSTR("\r\n"));
nStage = 8; //++;
case 8:
formFlag = (*p);
p ++;
cntdn --;
nStage = 9; //++;
case 9:
if (formFlag == 1)
{
Notify(PSTR("Range (Min,Max,Step):\t\t{"));
enumParser.Initialize(2, bytesSize, &theBuffer, PTPListParser::modeRange);
}
if (formFlag == 2)
Notify(PSTR("Enumeration:\t\t{"));
nStage = 10; //++;
case 10:
if (formFlag == 1)
if (!enumParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintEnumValue))
return;
 
if (formFlag == 2)
if (!ParseEnum(&p, &cntdn))
return;
 
if (formFlag)
Notify(PSTR("}\r\n"));
nStage = 0;
}
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSDevProp/devpropparser.h
0,0 → 1,167
#ifndef __DEVPROPPARSER_H__
#define __DEVPROPPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <../ptp/ptpconst.h>
#include <../ptp/ptp.h>
 
// Device properties
const char msgUndefined [] PROGMEM = "Undefined";
const char msgBatteryLevel [] PROGMEM = "BatteryLevel";
const char msgFunctionalMode [] PROGMEM = "FunctionalMode";
const char msgImageSize [] PROGMEM = "ImageSize";
const char msgCompressionSetting [] PROGMEM = "CompressionSetting";
const char msgWhiteBalance [] PROGMEM = "WhiteBalance";
const char msgRGBGain [] PROGMEM = "RGBGain";
const char msgFNumber [] PROGMEM = "FNumber";
const char msgFocalLength [] PROGMEM = "FocalLength";
const char msgFocusDistance [] PROGMEM = "FocusDistance";
const char msgFocusMode [] PROGMEM = "FocusMode";
const char msgExposureMeteringMode [] PROGMEM = "ExposureMeteringMode";
const char msgFlashMode [] PROGMEM = "FlashMode";
const char msgExposureTime [] PROGMEM = "ExposureTime";
const char msgExposureProgramMode [] PROGMEM = "ExposureProgramMode";
const char msgExposureIndex [] PROGMEM = "ExposureIndex";
const char msgExposureBiasCompensation [] PROGMEM = "ExposureBiasCompensation";
const char msgDateTime [] PROGMEM = "DateTime";
const char msgCaptureDelay [] PROGMEM = "CaptureDelay";
const char msgStillCaptureMode [] PROGMEM = "StillCaptureMode";
const char msgContrast [] PROGMEM = "Contrast";
const char msgSharpness [] PROGMEM = "Sharpness";
const char msgDigitalZoom [] PROGMEM = "DigitalZoom";
const char msgEffectMode [] PROGMEM = "EffectMode";
const char msgBurstNumber [] PROGMEM = "BurstNumber";
const char msgBurstInterval [] PROGMEM = "BurstInterval";
const char msgTimelapseNumber [] PROGMEM = "TimelapseNumber";
const char msgTimelapseInterval [] PROGMEM = "TimelapseInterval";
const char msgFocusMeteringMode [] PROGMEM = "FocusMeteringMode";
const char msgUploadURL [] PROGMEM = "UploadURL";
const char msgArtist [] PROGMEM = "Artist";
const char msgCopyrightInfo [] PROGMEM = "CopyrightInfo";
 
// Data Types
const char msgUNDEF [] PROGMEM = "UNDEF";
const char msgINT8 [] PROGMEM = "INT8";
const char msgUINT8 [] PROGMEM = "UINT8";
const char msgINT16 [] PROGMEM = "INT16";
const char msgUINT16 [] PROGMEM = "UINT16";
const char msgINT32 [] PROGMEM = "INT32";
const char msgUINT32 [] PROGMEM = "UINT32";
const char msgINT64 [] PROGMEM = "INT64";
const char msgUINT64 [] PROGMEM = "UINT64";
const char msgINT128 [] PROGMEM = "INT128";
const char msgUINT128 [] PROGMEM = "UINT128";
const char msgAINT8 [] PROGMEM = "AINT8";
const char msgAUINT8 [] PROGMEM = "AUINT8";
const char msgAINT16 [] PROGMEM = "AINT16";
const char msgAUINT16 [] PROGMEM = "AUINT16";
const char msgAINT32 [] PROGMEM = "AINT32";
const char msgAUINT32 [] PROGMEM = "AUINT32";
const char msgAINT64 [] PROGMEM = "AINT64";
const char msgAUINT64 [] PROGMEM = "AUINT64";
const char msgAINT128 [] PROGMEM = "AINT128";
const char msgAUINT128 [] PROGMEM = "AUINT128";
const char msgSTR [] PROGMEM = "STR";
 
 
class DevPropParser : public PTPReadParser
{
static const char* dtNames1[];
static const char* dtNames2[];
static const char* prNames[];
 
uint8_t nStage;
uint8_t enStage;
uint16_t dataType;
uint8_t formFlag;
uint8_t bytesSize;
MultiValueBuffer theBuffer;
uint8_t varBuffer[16];
uint16_t enLen;
uint16_t enLenCntdn;
MultiByteValueParser valParser;
 
void PrintDevProp (uint8_t **pp, uint16_t *pcntdn);
void PrintDataType (uint8_t **pp, uint16_t *pcntdn);
void PrintGetSet (uint8_t **pp, uint16_t *pcntdn);
bool PrintValue (uint8_t **pp, uint16_t *pcntdn);
bool PrintEnum (uint8_t **pp, uint16_t *pcntdn);
bool ParseEnum (uint8_t **pp, uint16_t *pcntdn);
bool ParseEnumSingle (uint8_t **pp, uint16_t *pcntdn);
bool ParseEnumArray (uint8_t **pp, uint16_t *pcntdn);
static void PrintChar(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (((unsigned char*)p->pValue)[0])
Serial.print(((unsigned char*)p->pValue)[0]);
};
static void PrintByte(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (count)
Notify(PSTR(","));
PrintHex<uint8_t>(((uint8_t*)p->pValue)[0]);
};
static void PrintTwoBytes(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (count)
Notify(PSTR(","));
PrintHex<uint16_t>(((uint16_t*)p->pValue)[0]);
};
static void PrintFourBytes(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (count)
Notify(PSTR(","));
PrintHex<uint32_t>(((uint32_t*)p->pValue)[0]);
};
static void PrintEightBytes(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (count)
Notify(PSTR(","));
for (uint8_t i=p->valueSize; i; i--)
PrintHex<uint8_t>(((uint8_t*)p->pValue)[i-1]);
};
static void PrintEnumValue(const MultiValueBuffer * const p, uint32_t count, const void *me)
{
if (count)
Serial.print(", ");
switch (((MultiValueBuffer*)p)->valueSize)
{
case 1:
PrintHex<uint8_t>(*((uint8_t*)p->pValue));
break;
case 2:
PrintHex<uint16_t>(*((uint16_t*)p->pValue));
break;
case 4:
PrintHex<uint32_t>(*((uint32_t*)p->pValue));
break;
default:
for (uint8_t i=p->valueSize; i; i--)
PrintHex<uint8_t>(((uint8_t*)p->pValue)[i-1]);
}
count++;
};
PTPListParser enumParser;
uint8_t GetDataSize();
public:
DevPropParser() :
nStage(0),
enStage(0),
dataType(0),
formFlag(0),
bytesSize(0),
enLen(0),
enLenCntdn(0)
{
theBuffer.pValue = varBuffer;
}
virtual void Parse(const uint16_t len, const uint8_t * const pbuf, const uint32_t &offset);
};
 
#endif // __DEVPROPPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSDevProp/sample_output_a640.txt
0,0 → 1,2290
Start
Camera disconnected
Session opened
Mode:P
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 08 00 00 00 02 D0 04 00
0010: 00 00 00 00 00 02 06 00 00 00 01 00 02 00 03 00
0020: 04 00 05 00
 
Device Property: D002 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001, 0002, 0003, 0004, 0005}
 
0000: 2C 00 00 00 02 00 14 10 0A 00 00 00 03 D0 06 00
0010: 00 01 00 00 00 01 00 00 00 02 04 00 00 00 00 00
0020: 01 00 00 00 02 00 00 00 03 00 00 00
 
Device Property: D003 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000001
Current Value: 00000001
Enumeration: {00000000, 00000001, 00000002, 00000003}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 0E 00 00 00 06 D0 02 00
0010: 01 05 05 02 03 00 05 03 02
 
Device Property: D006 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 05
Current Value: 05
Enumeration: {05, 03, 02}
 
0000: 16 00 00 00 02 00 14 10 10 00 00 00 07 D0 02 00
0010: 00 01 01 02 00 00
 
Device Property: D007 (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 01
Current Value: 01
Enumeration: {}
 
0000: 1B 00 00 00 02 00 14 10 12 00 00 00 08 D0 02 00
0010: 01 00 00 02 05 00 00 01 03 07 02
 
Device Property: D008 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 03, 07, 02}
 
Transaction: Response recieve error: 2006
0000: 1C 00 00 00 02 00 14 10 15 00 00 00 0A D0 02 00
0010: 01 02 02 02 06 00 00 01 02 05 06 04
 
Device Property: D00A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 02
Current Value: 02
Enumeration: {00, 01, 02, 05, 06, 04}
 
Transaction: Response recieve error: 2006
0000: 1A 00 00 00 02 00 14 10 18 00 00 00 0C D0 02 00
0010: 01 01 01 02 04 00 01 02 03 04
 
Device Property: D00C (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 01
Enumeration: {01, 02, 03, 04}
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 1B 00 00 00 0E D0 02 00
0010: 00 00 00 02 00 00
 
Device Property: D00E (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 00
Current Value: 00
Enumeration: {}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 1E 00 00 00 10 D0 02 00
0010: 01 03 03 02 03 00 03 00 01
 
Device Property: D010 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {03, 00, 01}
 
0000: 18 00 00 00 02 00 14 10 20 00 00 00 11 D0 02 00
0010: 01 01 01 02 02 00 01 03
 
Device Property: D011 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 01
Enumeration: {01, 03}
 
0000: 1C 00 00 00 02 00 14 10 22 00 00 00 12 D0 04 00
0010: 01 01 30 01 30 02 02 00 01 30 03 30
 
Device Property: D012 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 3001
Current Value: 3001
Enumeration: {3001, 3003}
 
0000: 1D 00 00 00 02 00 14 10 24 00 00 00 13 D0 02 00
0010: 01 00 00 02 07 00 00 01 02 03 04 07 06
 
Device Property: D013 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03, 04, 07, 06}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 2E 00 00 00 1C D0 04 00
0010: 01 00 00 00 00 02 06 00 00 00 45 00 48 00 50 00
0020: 58 00 60 00
 
Device Property: D01C (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0045, 0048, 0050, 0058, 0060}
 
0000: 18 00 00 00 02 00 14 10 30 00 00 00 1D D0 04 00
0010: 00 28 00 28 00 02 00 00
 
Device Property: D01D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0028
Current Value: 0028
Enumeration: {}
 
0000: 18 00 00 00 02 00 14 10 32 00 00 00 1E D0 04 00
0010: 00 60 00 60 00 02 00 00
 
Device Property: D01E (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0060
Current Value: 0060
Enumeration: {}
 
0000: 23 00 00 00 02 00 14 10 34 00 00 00 1F D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D01F (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
0000: 23 00 00 00 02 00 14 10 36 00 00 00 20 D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D020 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 2E 00 00 00 02 00 14 10 40 00 00 00 29 D0 04 00
0010: 01 03 00 03 00 02 0B 00 01 00 02 00 03 00 08 00
0020: 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00
 
Device Property: D029 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0003
Current Value: 0003
Enumeration: {0001, 0002, 0003, 0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F}
 
0000: 1C 00 00 00 02 00 14 10 42 00 00 00 2A D0 04 00
0010: 01 00 00 00 00 01 00 00 0E 00 01 00
 
Device Property: D02A (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Range (Min,Max,Step): {0000, 000E, 0001}
 
Transaction: Response recieve error: 2006
0000: F0 01 00 00 02 00 14 10 45 00 00 00 2C D0 06 40
0010: 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 02 0F 00 06 00 00 00
0050: B0 0A 00 00 40 0E 00 00 01 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 06 00 00 00 B0 0A 00 00
0070: 40 0E 00 00 06 00 00 00 00 00 00 00 00 00 00 00
0080: 00 00 00 00 06 00 00 00 B0 0A 00 00 40 0E 00 00
0090: 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0: 06 00 00 00 40 08 00 00 00 0B 00 00 02 00 00 00
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
00C0: 40 08 00 00 00 0B 00 00 07 00 00 00 00 00 00 00
00D0: 00 00 00 00 00 00 00 00 06 00 00 00 40 08 00 00
00E0: 00 0B 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00F0: 00 00 00 00 06 00 00 00 A8 06 00 00 E0 08 00 00
0100: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0110: 06 00 00 00 A8 06 00 00 E0 08 00 00 08 00 00 00
0120: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
0130: A8 06 00 00 E0 08 00 00 0D 00 00 00 00 00 00 00
0140: 00 00 00 00 00 00 00 00 06 00 00 00 B0 04 00 00
0150: 40 06 00 00 11 00 00 00 00 00 00 00 00 00 00 00
0160: 00 00 00 00 06 00 00 00 B0 04 00 00 40 06 00 00
0170: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0180: 06 00 00 00 B0 04 00 00 40 06 00 00 13 00 00 00
0190: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
01A0: E0 01 00 00 80 02 00 00 05 00 00 00 00 00 00 00
01B0: 00 00 00 00 00 00 00 00 06 00 00 00 E0 01 00 00
01C0: 80 02 00 00 0A 00 00 00 00 00 00 00 00 00 00 00
01D0: 00 00 00 00 06 00 00 00 E0 01 00 00 80 02 00 00
01E0: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
 
Device Property: D02C (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000000,00000000,00000000,00000000,00000000,00000000
Current Value: 00000000,00000000,00000000,00000000,00000000,00000000
Enumeration: {00000AB0, 00000E40, 00000001, 00000000, 00000000, 0000000000000B00, 00000007, 00000000, 00000000, 00000000, 00000006, 00000840, 00000B00, 0000000C, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000003, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000008, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 0000000D, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000011, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000012, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000013, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 00000005, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000A, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000F, 00000000, 00000000, 00000000
0000: 3A 00 00 00 02 00 14 10 47 00 00 00 2D D0 06 40
0010: 00 04 00 00 00 77 00 00 00 00 00 00 00 9F 00 00
0020: 00 00 00 00 00 04 00 00 00 77 00 00 00 00 00 00
0030: 00 9F 00 00 00 00 00 00 00 00
 
Device Property: D02D (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000077,00000000,0000009F,00000000
Current Value: 00000077,00000000,0000009F,00000000
 
0000: 1A 00 00 00 02 00 14 10 49 00 00 00 2E D0 06 00
0010: 00 00 00 08 00 00 00 08 00 00
 
Device Property: D02E (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00080000
Current Value: 00080000
 
0000: 1A 00 00 00 02 00 14 10 4B 00 00 00 2F D0 06 00
0010: 00 00 00 04 00 00 00 04 00 00
 
Device Property: D02F (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00040000
Current Value: 00040000
 
0000: 1A 00 00 00 02 00 14 10 4D 00 00 00 30 D0 06 00
0010: 00 00 01 00 00 00 01 00 00 00
 
Device Property: D030 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000100
Current Value: 00000100
 
0000: 1A 00 00 00 02 00 14 10 4F 00 00 00 31 D0 06 00
0010: 00 00 00 00 01 00 00 00 01 00
 
Device Property: D031 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 01000000
Current Value: 01000000
 
0000: 68 00 00 00 02 00 14 10 51 00 00 00 32 D0 FF FF
0010: 00 15 43 00 61 00 6E 00 6F 00 6E 00 20 00 50 00
0020: 6F 00 77 00 65 00 72 00 53 00 68 00 6F 00 74 00
0030: 20 00 41 00 36 00 34 00 30 00 00 00 15 43 00 61
0040: 00 6E 00 6F 00 6E 00 20 00 50 00 6F 00 77 00 65
0050: 00 72 00 53 00 68 00 6F 00 74 00 20 00 41 00 36
0060: 00 34 00 30 00 00 00 00
 
Device Property: D032 (Vendor defined)
Data Type: STR
Get/Set: Get
Default Value: Canon PowerShot A640
Current Value: Canon PowerShot A640
 
0000: 1C 00 00 00 02 00 14 10 53 00 00 00 33 D0 02 40
0010: 01 01 00 00 00 00 01 00 00 00 00 00
 
Device Property: D033 (Vendor defined)
Data Type: AUINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
 
0000: 1A 00 00 00 02 00 14 10 55 00 00 00 34 D0 06 00
0010: 01 E8 F7 30 4D E8 F7 30 4D 00
 
Device Property: D034 (Vendor defined)
Data Type: UINT32
Get/Set: Get/Set
Default Value: 4D30F7E8
Current Value: 4D30F7E8
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 58 00 00 00 36 D0 02 00
0010: 01 03 03 02 03 00 01 02 03
 
Device Property: D036 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {01, 02, 03}
 
0000: 16 00 00 00 02 00 14 10 5A 00 00 00 37 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D037 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 5C 00 00 00 38 D0 04 00
0010: 00 20 00 20 00 00
 
Device Property: D038 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0020
Current Value: 0020
 
0000: 16 00 00 00 02 00 14 10 5E 00 00 00 39 D0 04 00
0010: 00 40 0E 40 0E 00
 
Device Property: D039 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0E40
Current Value: 0E40
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 61 00 00 00 3B D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D03B (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 63 00 00 00 3C D0 04 00
0010: 00 38 00 38 00 00
 
Device Property: D03C (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0038
Current Value: 0038
 
0000: 16 00 00 00 02 00 14 10 65 00 00 00 3D D0 04 00
0010: 00 09 00 09 00 00
 
Device Property: D03D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0009
Current Value: 0009
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 1C 00 00 00 02 00 14 10 6A 00 00 00 41 D0 04 00
0010: 01 01 00 01 00 02 02 00 01 00 00 00
 
Device Property: D041 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0001
Current Value: 0001
Enumeration: {0001, 0000}
 
0000: 18 00 00 00 02 00 14 10 6C 00 00 00 42 D0 04 00
0010: 00 02 00 02 00 02 00 00
 
Device Property: D042 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0002
Current Value: 0002
Enumeration: {}
 
0000: 16 00 00 00 02 00 14 10 6E 00 00 00 43 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D043 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 1C 00 00 00 02 00 14 10 70 00 00 00 44 D0 04 00
0010: 01 00 00 00 00 02 02 00 00 00 01 00
 
Device Property: D044 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001}
 
0000: 26 00 00 00 02 00 14 10 72 00 00 00 45 D0 04 00
0010: 01 02 00 04 00 02 07 00 01 00 02 00 03 00 04 00
0020: 05 00 06 00 07 00
 
Device Property: D045 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0002
Current Value: 0004
Enumeration: {0001, 0002, 0003, 0004, 0005, 0006, 0007}
 
0000: 16 00 00 00 02 00 14 10 74 00 00 00 46 D0 04 00
0010: 00 01 01 01 01 00
 
Device Property: D046 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0101
Current Value: 0101
 
0000: 16 00 00 00 02 00 14 10 76 00 00 00 47 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D047 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: B2 00 00 00 02 00 14 10 78 00 00 00 48 D0 06 40
0010: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0020: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0030: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0040: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
0050: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
0060: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0070: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0080: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0090: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
00A0: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
00B0: 00 00
 
Device Property: D048 (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
Current Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
 
0000: 1A 00 00 00 02 00 14 10 7A 00 00 00 49 D0 06 00
0010: 00 00 00 03 02 00 00 03 02 00
 
Device Property: D049 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 02030000
Current Value: 02030000
 
0000: 1A 00 00 00 02 00 14 10 7C 00 00 00 4A D0 02 00
0010: 01 00 00 02 04 00 00 01 02 03
 
Device Property: D04A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
 
Mode:Tv
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 B7 00 00 00 02 D0 04 00
0010: 00 00 00 00 00 02 06 00 00 00 01 00 02 00 03 00
0020: 04 00 05 00
 
Device Property: D002 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001, 0002, 0003, 0004, 0005}
 
0000: 2C 00 00 00 02 00 14 10 B9 00 00 00 03 D0 06 00
0010: 00 01 00 00 00 01 00 00 00 02 04 00 00 00 00 00
0020: 01 00 00 00 02 00 00 00 03 00 00 00
 
Device Property: D003 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000001
Current Value: 00000001
Enumeration: {00000000, 00000001, 00000002, 00000003}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 BD 00 00 00 06 D0 02 00
0010: 01 05 05 02 03 00 05 03 02
 
Device Property: D006 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 05
Current Value: 05
Enumeration: {05, 03, 02}
 
0000: 16 00 00 00 02 00 14 10 BF 00 00 00 07 D0 02 00
0010: 00 01 01 02 00 00
 
Device Property: D007 (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 01
Current Value: 01
Enumeration: {}
 
0000: 1B 00 00 00 02 00 14 10 C1 00 00 00 08 D0 02 00
0010: 01 00 00 02 05 00 00 01 03 07 02
 
Device Property: D008 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 03, 07, 02}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 C4 00 00 00 0A D0 02 00
0010: 01 02 02 02 03 00 00 02 06
 
Device Property: D00A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 02
Current Value: 02
Enumeration: {00, 02, 06}
 
Transaction: Response recieve error: 2006
0000: 1A 00 00 00 02 00 14 10 C7 00 00 00 0C D0 02 00
0010: 01 01 02 02 04 00 01 02 03 04
 
Device Property: D00C (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 02
Enumeration: {01, 02, 03, 04}
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 CA 00 00 00 0E D0 02 00
0010: 00 00 00 02 00 00
 
Device Property: D00E (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 00
Current Value: 00
Enumeration: {}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 CD 00 00 00 10 D0 02 00
0010: 01 03 03 02 03 00 03 00 01
 
Device Property: D010 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {03, 00, 01}
 
0000: 18 00 00 00 02 00 14 10 CF 00 00 00 11 D0 02 00
0010: 01 01 01 02 02 00 01 03
 
Device Property: D011 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 01
Enumeration: {01, 03}
 
0000: 1C 00 00 00 02 00 14 10 D1 00 00 00 12 D0 04 00
0010: 01 01 30 01 30 02 02 00 01 30 03 30
 
Device Property: D012 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 3001
Current Value: 3001
Enumeration: {3001, 3003}
 
0000: 1D 00 00 00 02 00 14 10 D3 00 00 00 13 D0 02 00
0010: 01 00 00 02 07 00 00 01 02 03 04 07 06
 
Device Property: D013 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03, 04, 07, 06}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 DD 00 00 00 1C D0 04 00
0010: 01 00 00 00 00 02 06 00 00 00 45 00 48 00 50 00
0020: 58 00 60 00
 
Device Property: D01C (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0045, 0048, 0050, 0058, 0060}
 
0000: 18 00 00 00 02 00 14 10 DF 00 00 00 1D D0 04 00
0010: 00 28 00 28 00 02 00 00
 
Device Property: D01D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0028
Current Value: 0028
Enumeration: {}
 
0000: 76 00 00 00 02 00 14 10 E1 00 00 00 1E D0 04 00
0010: 01 60 00 60 00 02 2F 00 18 00 1B 00 1D 00 20 00
0020: 23 00 25 00 28 00 2B 00 2D 00 30 00 33 00 35 00
0030: 38 00 3B 00 3D 00 40 00 43 00 45 00 48 00 4B 00
0040: 4D 00 50 00 53 00 55 00 58 00 5B 00 5D 00 60 00
0050: 63 00 65 00 68 00 6B 00 6D 00 70 00 73 00 75 00
0060: 78 00 7B 00 7D 00 80 00 83 00 85 00 88 00 8B 00
0070: 8D 00 90 00 93 00
 
Device Property: D01E (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0060
Current Value: 0060
Enumeration: {0018, 001B, 001D, 0020, 0023, 0025, 0028, 002B, 002D, 0030, 0033, 0035, 0038, 003B, 003D, 0040, 0043, 0045, 0048, 004B, 004D, 0050, 0053, 0055, 0058, 005B, 005D, 0060, 0063, 0065, 0068, 006B, 006D, 0070, 0073, 0075, 0078, 007B, 007D, 0080, 0083, 0085, 0088, 008B, 008D, 0090, 0093}
 
0000: 23 00 00 00 02 00 14 10 E3 00 00 00 1F D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D01F (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
0000: 23 00 00 00 02 00 14 10 E5 00 00 00 20 D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D020 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 2E 00 00 00 02 00 14 10 EF 00 00 00 29 D0 04 00
0010: 01 03 00 03 00 02 0B 00 01 00 02 00 03 00 08 00
0020: 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00
 
Device Property: D029 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0003
Current Value: 0003
Enumeration: {0001, 0002, 0003, 0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F}
 
0000: 1C 00 00 00 02 00 14 10 F1 00 00 00 2A D0 04 00
0010: 01 00 00 00 00 01 00 00 0E 00 01 00
 
Device Property: D02A (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Range (Min,Max,Step): {0000, 000E, 0001}
 
Transaction: Response recieve error: 2006
0000: F0 01 00 00 02 00 14 10 F4 00 00 00 2C D0 06 40
0010: 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 02 0F 00 06 00 00 00
0050: B0 0A 00 00 40 0E 00 00 01 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 06 00 00 00 B0 0A 00 00
0070: 40 0E 00 00 06 00 00 00 00 00 00 00 00 00 00 00
0080: 00 00 00 00 06 00 00 00 B0 0A 00 00 40 0E 00 00
0090: 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0: 06 00 00 00 40 08 00 00 00 0B 00 00 02 00 00 00
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
00C0: 40 08 00 00 00 0B 00 00 07 00 00 00 00 00 00 00
00D0: 00 00 00 00 00 00 00 00 06 00 00 00 40 08 00 00
00E0: 00 0B 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00F0: 00 00 00 00 06 00 00 00 A8 06 00 00 E0 08 00 00
0100: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0110: 06 00 00 00 A8 06 00 00 E0 08 00 00 08 00 00 00
0120: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
0130: A8 06 00 00 E0 08 00 00 0D 00 00 00 00 00 00 00
0140: 00 00 00 00 00 00 00 00 06 00 00 00 B0 04 00 00
0150: 40 06 00 00 11 00 00 00 00 00 00 00 00 00 00 00
0160: 00 00 00 00 06 00 00 00 B0 04 00 00 40 06 00 00
0170: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0180: 06 00 00 00 B0 04 00 00 40 06 00 00 13 00 00 00
0190: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
01A0: E0 01 00 00 80 02 00 00 05 00 00 00 00 00 00 00
01B0: 00 00 00 00 00 00 00 00 06 00 00 00 E0 01 00 00
01C0: 80 02 00 00 0A 00 00 00 00 00 00 00 00 00 00 00
01D0: 00 00 00 00 06 00 00 00 E0 01 00 00 80 02 00 00
01E0: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
 
Device Property: D02C (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000000,00000000,00000000,00000000,00000000,00000000
Current Value: 00000000,00000000,00000000,00000000,00000000,00000000
Enumeration: {00000AB0, 00000E40, 00000001, 00000000, 00000000, 0000000000000B00, 00000007, 00000000, 00000000, 00000000, 00000006, 00000840, 00000B00, 0000000C, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000003, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000008, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 0000000D, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000011, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000012, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000013, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 00000005, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000A, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000F, 00000000, 00000000, 00000000
0000: 3A 00 00 00 02 00 14 10 F6 00 00 00 2D D0 06 40
0010: 00 04 00 00 00 77 00 00 00 00 00 00 00 9F 00 00
0020: 00 00 00 00 00 04 00 00 00 77 00 00 00 00 00 00
0030: 00 9F 00 00 00 00 00 00 00 00
 
Device Property: D02D (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000077,00000000,0000009F,00000000
Current Value: 00000077,00000000,0000009F,00000000
 
0000: 1A 00 00 00 02 00 14 10 F8 00 00 00 2E D0 06 00
0010: 00 00 00 08 00 00 00 08 00 00
 
Device Property: D02E (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00080000
Current Value: 00080000
 
0000: 1A 00 00 00 02 00 14 10 FA 00 00 00 2F D0 06 00
0010: 00 00 00 04 00 00 00 04 00 00
 
Device Property: D02F (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00040000
Current Value: 00040000
 
0000: 1A 00 00 00 02 00 14 10 FC 00 00 00 30 D0 06 00
0010: 00 00 01 00 00 00 01 00 00 00
 
Device Property: D030 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000100
Current Value: 00000100
 
0000: 1A 00 00 00 02 00 14 10 FE 00 00 00 31 D0 06 00
0010: 00 00 00 00 01 00 00 00 01 00
 
Device Property: D031 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 01000000
Current Value: 01000000
 
0000: 68 00 00 00 02 00 14 10 00 01 00 00 32 D0 FF FF
0010: 00 15 43 00 61 00 6E 00 6F 00 6E 00 20 00 50 00
0020: 6F 00 77 00 65 00 72 00 53 00 68 00 6F 00 74 00
0030: 20 00 41 00 36 00 34 00 30 00 00 00 15 43 00 61
0040: 00 6E 00 6F 00 6E 00 20 00 50 00 6F 00 77 00 65
0050: 00 72 00 53 00 68 00 6F 00 74 00 20 00 41 00 36
0060: 00 34 00 30 00 00 00 00
 
Device Property: D032 (Vendor defined)
Data Type: STR
Get/Set: Get
Default Value: Canon PowerShot A640
Current Value: Canon PowerShot A640
 
0000: 1C 00 00 00 02 00 14 10 02 01 00 00 33 D0 02 40
0010: 01 01 00 00 00 00 01 00 00 00 00 00
 
Device Property: D033 (Vendor defined)
Data Type: AUINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
 
0000: 1A 00 00 00 02 00 14 10 04 01 00 00 34 D0 06 00
0010: 01 EB F7 30 4D EB F7 30 4D 00
 
Device Property: D034 (Vendor defined)
Data Type: UINT32
Get/Set: Get/Set
Default Value: 4D30F7EB
Current Value: 4D30F7EB
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 07 01 00 00 36 D0 02 00
0010: 01 03 03 02 03 00 01 02 03
 
Device Property: D036 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {01, 02, 03}
 
0000: 16 00 00 00 02 00 14 10 09 01 00 00 37 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D037 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 0B 01 00 00 38 D0 04 00
0010: 00 20 00 20 00 00
 
Device Property: D038 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0020
Current Value: 0020
 
0000: 16 00 00 00 02 00 14 10 0D 01 00 00 39 D0 04 00
0010: 00 40 0E 40 0E 00
 
Device Property: D039 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0E40
Current Value: 0E40
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 10 01 00 00 3B D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D03B (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 12 01 00 00 3C D0 04 00
0010: 00 38 00 38 00 00
 
Device Property: D03C (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0038
Current Value: 0038
 
0000: 16 00 00 00 02 00 14 10 14 01 00 00 3D D0 04 00
0010: 00 09 00 09 00 00
 
Device Property: D03D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0009
Current Value: 0009
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 1C 00 00 00 02 00 14 10 19 01 00 00 41 D0 04 00
0010: 01 01 00 01 00 02 02 00 01 00 00 00
 
Device Property: D041 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0001
Current Value: 0001
Enumeration: {0001, 0000}
 
0000: 18 00 00 00 02 00 14 10 1B 01 00 00 42 D0 04 00
0010: 00 02 00 02 00 02 00 00
 
Device Property: D042 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0002
Current Value: 0002
Enumeration: {}
 
0000: 16 00 00 00 02 00 14 10 1D 01 00 00 43 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D043 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 1C 00 00 00 02 00 14 10 1F 01 00 00 44 D0 04 00
0010: 01 00 00 00 00 02 02 00 00 00 01 00
 
Device Property: D044 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001}
 
0000: 26 00 00 00 02 00 14 10 21 01 00 00 45 D0 04 00
0010: 01 02 00 04 00 02 07 00 01 00 02 00 03 00 04 00
0020: 05 00 06 00 07 00
 
Device Property: D045 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0002
Current Value: 0004
Enumeration: {0001, 0002, 0003, 0004, 0005, 0006, 0007}
 
0000: 16 00 00 00 02 00 14 10 23 01 00 00 46 D0 04 00
0010: 00 01 01 01 01 00
 
Device Property: D046 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0101
Current Value: 0101
 
0000: 16 00 00 00 02 00 14 10 25 01 00 00 47 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D047 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: B2 00 00 00 02 00 14 10 27 01 00 00 48 D0 06 40
0010: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0020: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0030: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0040: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
0050: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
0060: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0070: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0080: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0090: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
00A0: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
00B0: 00 00
 
Device Property: D048 (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
Current Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
 
0000: 1A 00 00 00 02 00 14 10 29 01 00 00 49 D0 06 00
0010: 00 00 00 03 02 00 00 03 02 00
 
Device Property: D049 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 02030000
Current Value: 02030000
 
0000: 1A 00 00 00 02 00 14 10 2B 01 00 00 4A D0 02 00
0010: 01 00 00 02 04 00 00 01 02 03
 
Device Property: D04A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
 
Mode:Av
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 66 01 00 00 02 D0 04 00
0010: 00 00 00 00 00 02 06 00 00 00 01 00 02 00 03 00
0020: 04 00 05 00
 
Device Property: D002 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001, 0002, 0003, 0004, 0005}
 
0000: 2C 00 00 00 02 00 14 10 68 01 00 00 03 D0 06 00
0010: 00 01 00 00 00 01 00 00 00 02 04 00 00 00 00 00
0020: 01 00 00 00 02 00 00 00 03 00 00 00
 
Device Property: D003 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000001
Current Value: 00000001
Enumeration: {00000000, 00000001, 00000002, 00000003}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 6C 01 00 00 06 D0 02 00
0010: 01 05 05 02 03 00 05 03 02
 
Device Property: D006 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 05
Current Value: 05
Enumeration: {05, 03, 02}
 
0000: 16 00 00 00 02 00 14 10 6E 01 00 00 07 D0 02 00
0010: 00 01 01 02 00 00
 
Device Property: D007 (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 01
Current Value: 01
Enumeration: {}
 
0000: 1B 00 00 00 02 00 14 10 70 01 00 00 08 D0 02 00
0010: 01 00 00 02 05 00 00 01 03 07 02
 
Device Property: D008 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 03, 07, 02}
 
Transaction: Response recieve error: 2006
0000: 1A 00 00 00 02 00 14 10 73 01 00 00 0A D0 02 00
0010: 01 02 02 02 04 00 00 02 06 04
 
Device Property: D00A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 02
Current Value: 02
Enumeration: {00, 02, 06, 04}
 
Transaction: Response recieve error: 2006
0000: 1A 00 00 00 02 00 14 10 76 01 00 00 0C D0 02 00
0010: 01 01 03 02 04 00 01 02 03 04
 
Device Property: D00C (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 03
Enumeration: {01, 02, 03, 04}
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 79 01 00 00 0E D0 02 00
0010: 00 00 00 02 00 00
 
Device Property: D00E (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 00
Current Value: 00
Enumeration: {}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 7C 01 00 00 10 D0 02 00
0010: 01 03 03 02 03 00 03 00 01
 
Device Property: D010 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {03, 00, 01}
 
0000: 18 00 00 00 02 00 14 10 7E 01 00 00 11 D0 02 00
0010: 01 01 01 02 02 00 01 03
 
Device Property: D011 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 01
Enumeration: {01, 03}
 
0000: 1C 00 00 00 02 00 14 10 80 01 00 00 12 D0 04 00
0010: 01 01 30 01 30 02 02 00 01 30 03 30
 
Device Property: D012 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 3001
Current Value: 3001
Enumeration: {3001, 3003}
 
0000: 1D 00 00 00 02 00 14 10 82 01 00 00 13 D0 02 00
0010: 01 00 00 02 07 00 00 01 02 03 04 07 06
 
Device Property: D013 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03, 04, 07, 06}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 8C 01 00 00 1C D0 04 00
0010: 01 00 00 00 00 02 06 00 00 00 45 00 48 00 50 00
0020: 58 00 60 00
 
Device Property: D01C (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0045, 0048, 0050, 0058, 0060}
 
0000: 2C 00 00 00 02 00 14 10 8E 01 00 00 1D D0 04 00
0010: 01 28 00 28 00 02 0A 00 20 00 23 00 25 00 28 00
0020: 2B 00 2D 00 30 00 33 00 35 00 38 00
 
Device Property: D01D (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0028
Current Value: 0028
Enumeration: {0020, 0023, 0025, 0028, 002B, 002D, 0030, 0033, 0035, 0038}
 
0000: 18 00 00 00 02 00 14 10 90 01 00 00 1E D0 04 00
0010: 00 60 00 60 00 02 00 00
 
Device Property: D01E (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0060
Current Value: 0060
Enumeration: {}
 
0000: 23 00 00 00 02 00 14 10 92 01 00 00 1F D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D01F (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
0000: 23 00 00 00 02 00 14 10 94 01 00 00 20 D0 02 00
0010: 01 18 18 02 0D 00 08 0B 0D 10 13 15 18 1B 1D 20
0020: 23 25 28
 
Device Property: D020 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 18
Current Value: 18
Enumeration: {08, 0B, 0D, 10, 13, 15, 18, 1B, 1D, 20, 23, 25, 28}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 2E 00 00 00 02 00 14 10 9E 01 00 00 29 D0 04 00
0010: 01 03 00 03 00 02 0B 00 01 00 02 00 03 00 08 00
0020: 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00
 
Device Property: D029 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0003
Current Value: 0003
Enumeration: {0001, 0002, 0003, 0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F}
 
0000: 1C 00 00 00 02 00 14 10 A0 01 00 00 2A D0 04 00
0010: 01 00 00 00 00 01 00 00 0E 00 01 00
 
Device Property: D02A (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Range (Min,Max,Step): {0000, 000E, 0001}
 
Transaction: Response recieve error: 2006
0000: F0 01 00 00 02 00 14 10 A3 01 00 00 2C D0 06 40
0010: 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 02 0F 00 06 00 00 00
0050: B0 0A 00 00 40 0E 00 00 01 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 06 00 00 00 B0 0A 00 00
0070: 40 0E 00 00 06 00 00 00 00 00 00 00 00 00 00 00
0080: 00 00 00 00 06 00 00 00 B0 0A 00 00 40 0E 00 00
0090: 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0: 06 00 00 00 40 08 00 00 00 0B 00 00 02 00 00 00
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
00C0: 40 08 00 00 00 0B 00 00 07 00 00 00 00 00 00 00
00D0: 00 00 00 00 00 00 00 00 06 00 00 00 40 08 00 00
00E0: 00 0B 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00F0: 00 00 00 00 06 00 00 00 A8 06 00 00 E0 08 00 00
0100: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0110: 06 00 00 00 A8 06 00 00 E0 08 00 00 08 00 00 00
0120: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
0130: A8 06 00 00 E0 08 00 00 0D 00 00 00 00 00 00 00
0140: 00 00 00 00 00 00 00 00 06 00 00 00 B0 04 00 00
0150: 40 06 00 00 11 00 00 00 00 00 00 00 00 00 00 00
0160: 00 00 00 00 06 00 00 00 B0 04 00 00 40 06 00 00
0170: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0180: 06 00 00 00 B0 04 00 00 40 06 00 00 13 00 00 00
0190: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
01A0: E0 01 00 00 80 02 00 00 05 00 00 00 00 00 00 00
01B0: 00 00 00 00 00 00 00 00 06 00 00 00 E0 01 00 00
01C0: 80 02 00 00 0A 00 00 00 00 00 00 00 00 00 00 00
01D0: 00 00 00 00 06 00 00 00 E0 01 00 00 80 02 00 00
01E0: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
 
Device Property: D02C (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000000,00000000,00000000,00000000,00000000,00000000
Current Value: 00000000,00000000,00000000,00000000,00000000,00000000
Enumeration: {00000AB0, 00000E40, 00000001, 00000000, 00000000, 0000000000000B00, 00000007, 00000000, 00000000, 00000000, 00000006, 00000840, 00000B00, 0000000C, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000003, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000008, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 0000000D, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000011, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000012, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000013, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 00000005, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000A, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000F, 00000000, 00000000, 00000000
0000: 3A 00 00 00 02 00 14 10 A5 01 00 00 2D D0 06 40
0010: 00 04 00 00 00 77 00 00 00 00 00 00 00 9F 00 00
0020: 00 00 00 00 00 04 00 00 00 77 00 00 00 00 00 00
0030: 00 9F 00 00 00 00 00 00 00 00
 
Device Property: D02D (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000077,00000000,0000009F,00000000
Current Value: 00000077,00000000,0000009F,00000000
 
0000: 1A 00 00 00 02 00 14 10 A7 01 00 00 2E D0 06 00
0010: 00 00 00 08 00 00 00 08 00 00
 
Device Property: D02E (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00080000
Current Value: 00080000
 
0000: 1A 00 00 00 02 00 14 10 A9 01 00 00 2F D0 06 00
0010: 00 00 00 04 00 00 00 04 00 00
 
Device Property: D02F (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00040000
Current Value: 00040000
 
0000: 1A 00 00 00 02 00 14 10 AB 01 00 00 30 D0 06 00
0010: 00 00 01 00 00 00 01 00 00 00
 
Device Property: D030 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000100
Current Value: 00000100
 
0000: 1A 00 00 00 02 00 14 10 AD 01 00 00 31 D0 06 00
0010: 00 00 00 00 01 00 00 00 01 00
 
Device Property: D031 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 01000000
Current Value: 01000000
 
0000: 68 00 00 00 02 00 14 10 AF 01 00 00 32 D0 FF FF
0010: 00 15 43 00 61 00 6E 00 6F 00 6E 00 20 00 50 00
0020: 6F 00 77 00 65 00 72 00 53 00 68 00 6F 00 74 00
0030: 20 00 41 00 36 00 34 00 30 00 00 00 15 43 00 61
0040: 00 6E 00 6F 00 6E 00 20 00 50 00 6F 00 77 00 65
0050: 00 72 00 53 00 68 00 6F 00 74 00 20 00 41 00 36
0060: 00 34 00 30 00 00 00 00
 
Device Property: D032 (Vendor defined)
Data Type: STR
Get/Set: Get
Default Value: Canon PowerShot A640
Current Value: Canon PowerShot A640
 
0000: 1C 00 00 00 02 00 14 10 B1 01 00 00 33 D0 02 40
0010: 01 01 00 00 00 00 01 00 00 00 00 00
 
Device Property: D033 (Vendor defined)
Data Type: AUINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
 
0000: 1A 00 00 00 02 00 14 10 B3 01 00 00 34 D0 06 00
0010: 01 EE F7 30 4D EE F7 30 4D 00
 
Device Property: D034 (Vendor defined)
Data Type: UINT32
Get/Set: Get/Set
Default Value: 4D30F7EE
Current Value: 4D30F7EE
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 B6 01 00 00 36 D0 02 00
0010: 01 03 03 02 03 00 01 02 03
 
Device Property: D036 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {01, 02, 03}
 
0000: 16 00 00 00 02 00 14 10 B8 01 00 00 37 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D037 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 BA 01 00 00 38 D0 04 00
0010: 00 20 00 20 00 00
 
Device Property: D038 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0020
Current Value: 0020
 
0000: 16 00 00 00 02 00 14 10 BC 01 00 00 39 D0 04 00
0010: 00 40 0E 40 0E 00
 
Device Property: D039 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0E40
Current Value: 0E40
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 BF 01 00 00 3B D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D03B (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 C1 01 00 00 3C D0 04 00
0010: 00 38 00 38 00 00
 
Device Property: D03C (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0038
Current Value: 0038
 
0000: 16 00 00 00 02 00 14 10 C3 01 00 00 3D D0 04 00
0010: 00 09 00 09 00 00
 
Device Property: D03D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0009
Current Value: 0009
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 1C 00 00 00 02 00 14 10 C8 01 00 00 41 D0 04 00
0010: 01 01 00 01 00 02 02 00 01 00 00 00
 
Device Property: D041 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0001
Current Value: 0001
Enumeration: {0001, 0000}
 
0000: 18 00 00 00 02 00 14 10 CA 01 00 00 42 D0 04 00
0010: 00 02 00 02 00 02 00 00
 
Device Property: D042 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0002
Current Value: 0002
Enumeration: {}
 
0000: 16 00 00 00 02 00 14 10 CC 01 00 00 43 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D043 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 1C 00 00 00 02 00 14 10 CE 01 00 00 44 D0 04 00
0010: 01 00 00 00 00 02 02 00 00 00 01 00
 
Device Property: D044 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001}
 
0000: 26 00 00 00 02 00 14 10 D0 01 00 00 45 D0 04 00
0010: 01 02 00 04 00 02 07 00 01 00 02 00 03 00 04 00
0020: 05 00 06 00 07 00
 
Device Property: D045 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0002
Current Value: 0004
Enumeration: {0001, 0002, 0003, 0004, 0005, 0006, 0007}
 
0000: 16 00 00 00 02 00 14 10 D2 01 00 00 46 D0 04 00
0010: 00 01 01 01 01 00
 
Device Property: D046 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0101
Current Value: 0101
 
0000: 16 00 00 00 02 00 14 10 D4 01 00 00 47 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D047 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: B2 00 00 00 02 00 14 10 D6 01 00 00 48 D0 06 40
0010: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0020: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0030: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0040: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
0050: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
0060: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0070: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0080: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0090: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
00A0: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
00B0: 00 00
 
Device Property: D048 (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
Current Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
 
0000: 1A 00 00 00 02 00 14 10 D8 01 00 00 49 D0 06 00
0010: 00 00 00 03 02 00 00 03 02 00
 
Device Property: D049 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 02030000
Current Value: 02030000
 
0000: 1A 00 00 00 02 00 14 10 DA 01 00 00 4A D0 02 00
0010: 01 00 00 02 04 00 00 01 02 03
 
Device Property: D04A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
 
Mode:M
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 24 00 00 00 02 00 14 10 15 02 00 00 02 D0 04 00
0010: 00 00 00 00 00 02 06 00 00 00 01 00 02 00 03 00
0020: 04 00 05 00
 
Device Property: D002 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001, 0002, 0003, 0004, 0005}
 
0000: 2C 00 00 00 02 00 14 10 17 02 00 00 03 D0 06 00
0010: 00 01 00 00 00 01 00 00 00 02 04 00 00 00 00 00
0020: 01 00 00 00 02 00 00 00 03 00 00 00
 
Device Property: D003 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000001
Current Value: 00000001
Enumeration: {00000000, 00000001, 00000002, 00000003}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 1B 02 00 00 06 D0 02 00
0010: 01 05 05 02 03 00 05 03 02
 
Device Property: D006 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 05
Current Value: 05
Enumeration: {05, 03, 02}
 
0000: 16 00 00 00 02 00 14 10 1D 02 00 00 07 D0 02 00
0010: 00 01 01 02 00 00
 
Device Property: D007 (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 01
Current Value: 01
Enumeration: {}
 
0000: 1B 00 00 00 02 00 14 10 1F 02 00 00 08 D0 02 00
0010: 01 00 00 02 05 00 00 01 03 07 02
 
Device Property: D008 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 03, 07, 02}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 22 02 00 00 0A D0 02 00
0010: 01 02 02 02 03 00 00 02 06
 
Device Property: D00A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 02
Current Value: 02
Enumeration: {00, 02, 06}
 
Transaction: Response recieve error: 2006
0000: 1A 00 00 00 02 00 14 10 25 02 00 00 0C D0 02 00
0010: 01 01 04 02 04 00 01 02 03 04
 
Device Property: D00C (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 04
Enumeration: {01, 02, 03, 04}
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 28 02 00 00 0E D0 02 00
0010: 00 00 00 02 00 00
 
Device Property: D00E (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 00
Current Value: 00
Enumeration: {}
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 2B 02 00 00 10 D0 02 00
0010: 01 03 03 02 03 00 03 00 01
 
Device Property: D010 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {03, 00, 01}
 
0000: 18 00 00 00 02 00 14 10 2D 02 00 00 11 D0 02 00
0010: 01 01 01 02 02 00 01 03
 
Device Property: D011 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 01
Current Value: 01
Enumeration: {01, 03}
 
0000: 1C 00 00 00 02 00 14 10 2F 02 00 00 12 D0 04 00
0010: 01 01 30 01 30 02 02 00 01 30 03 30
 
Device Property: D012 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 3001
Current Value: 3001
Enumeration: {3001, 3003}
 
0000: 1D 00 00 00 02 00 14 10 31 02 00 00 13 D0 02 00
0010: 01 00 00 02 07 00 00 01 02 03 04 07 06
 
Device Property: D013 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03, 04, 07, 06}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 22 00 00 00 02 00 14 10 3B 02 00 00 1C D0 04 00
0010: 01 48 00 48 00 02 05 00 45 00 48 00 50 00 58 00
0020: 60 00
 
Device Property: D01C (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0048
Current Value: 0048
Enumeration: {0045, 0048, 0050, 0058, 0060}
 
0000: 2C 00 00 00 02 00 14 10 3D 02 00 00 1D D0 04 00
0010: 01 28 00 28 00 02 0A 00 20 00 23 00 25 00 28 00
0020: 2B 00 2D 00 30 00 33 00 35 00 38 00
 
Device Property: D01D (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0028
Current Value: 0028
Enumeration: {0020, 0023, 0025, 0028, 002B, 002D, 0030, 0033, 0035, 0038}
 
0000: 72 00 00 00 02 00 14 10 3F 02 00 00 1E D0 04 00
0010: 01 60 00 60 00 02 2D 00 18 00 1B 00 1D 00 20 00
0020: 23 00 25 00 28 00 2B 00 2D 00 30 00 33 00 35 00
0030: 38 00 3B 00 3D 00 40 00 43 00 45 00 48 00 4B 00
0040: 4D 00 50 00 53 00 55 00 58 00 5B 00 5D 00 60 00
0050: 63 00 65 00 68 00 6B 00 6D 00 70 00 73 00 75 00
0060: 78 00 7B 00 7D 00 80 00 83 00 85 00 88 00 8B 00
0070: 8D 00
 
Device Property: D01E (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0060
Current Value: 0060
Enumeration: {0018, 001B, 001D, 0020, 0023, 0025, 0028, 002B, 002D, 0030, 0033, 0035, 0038, 003B, 003D, 0040, 0043, 0045, 0048, 004B, 004D, 0050, 0053, 0055, 0058, 005B, 005D, 0060, 0063, 0065, 0068, 006B, 006D, 0070, 0073, 0075, 0078, 007B, 007D, 0080, 0083, 0085, 0088, 008B, 008D}
 
0000: 16 00 00 00 02 00 14 10 41 02 00 00 1F D0 02 00
0010: 00 18 18 02 00 00
 
Device Property: D01F (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 18
Current Value: 18
Enumeration: {}
 
0000: 16 00 00 00 02 00 14 10 43 02 00 00 20 D0 02 00
0010: 00 18 18 02 00 00
 
Device Property: D020 (Vendor defined)
Data Type: UINT8
Get/Set: Get
Default Value: 18
Current Value: 18
Enumeration: {}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 2E 00 00 00 02 00 14 10 4D 02 00 00 29 D0 04 00
0010: 01 03 00 03 00 02 0B 00 01 00 02 00 03 00 08 00
0020: 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00
 
Device Property: D029 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0003
Current Value: 0003
Enumeration: {0001, 0002, 0003, 0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F}
 
0000: 1C 00 00 00 02 00 14 10 4F 02 00 00 2A D0 04 00
0010: 01 00 00 00 00 01 00 00 0E 00 01 00
 
Device Property: D02A (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Range (Min,Max,Step): {0000, 000E, 0001}
 
Transaction: Response recieve error: 2006
0000: F0 01 00 00 02 00 14 10 52 02 00 00 2C D0 06 40
0010: 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 02 0F 00 06 00 00 00
0050: B0 0A 00 00 40 0E 00 00 01 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 06 00 00 00 B0 0A 00 00
0070: 40 0E 00 00 06 00 00 00 00 00 00 00 00 00 00 00
0080: 00 00 00 00 06 00 00 00 B0 0A 00 00 40 0E 00 00
0090: 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0: 06 00 00 00 40 08 00 00 00 0B 00 00 02 00 00 00
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
00C0: 40 08 00 00 00 0B 00 00 07 00 00 00 00 00 00 00
00D0: 00 00 00 00 00 00 00 00 06 00 00 00 40 08 00 00
00E0: 00 0B 00 00 0C 00 00 00 00 00 00 00 00 00 00 00
00F0: 00 00 00 00 06 00 00 00 A8 06 00 00 E0 08 00 00
0100: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0110: 06 00 00 00 A8 06 00 00 E0 08 00 00 08 00 00 00
0120: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
0130: A8 06 00 00 E0 08 00 00 0D 00 00 00 00 00 00 00
0140: 00 00 00 00 00 00 00 00 06 00 00 00 B0 04 00 00
0150: 40 06 00 00 11 00 00 00 00 00 00 00 00 00 00 00
0160: 00 00 00 00 06 00 00 00 B0 04 00 00 40 06 00 00
0170: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0180: 06 00 00 00 B0 04 00 00 40 06 00 00 13 00 00 00
0190: 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00
01A0: E0 01 00 00 80 02 00 00 05 00 00 00 00 00 00 00
01B0: 00 00 00 00 00 00 00 00 06 00 00 00 E0 01 00 00
01C0: 80 02 00 00 0A 00 00 00 00 00 00 00 00 00 00 00
01D0: 00 00 00 00 06 00 00 00 E0 01 00 00 80 02 00 00
01E0: 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
 
Device Property: D02C (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000000,00000000,00000000,00000000,00000000,00000000
Current Value: 00000000,00000000,00000000,00000000,00000000,00000000
Enumeration: {00000AB0, 00000E40, 00000001, 00000000, 00000000, 0000000000000B00, 00000007, 00000000, 00000000, 00000000, 00000006, 00000840, 00000B00, 0000000C, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000003, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 00000008, 00000000, 00000000, 00000000, 00000006, 000006A8, 000008E0, 0000000D, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000011, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000012, 00000000, 00000000, 00000000, 00000006, 000004B0, 00000640, 00000013, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 00000005, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000A, 00000000, 00000000, 00000000, 00000006, 000001E0, 00000280, 0000000F, 00000000, 00000000, 00000000
0000: 3A 00 00 00 02 00 14 10 54 02 00 00 2D D0 06 40
0010: 00 04 00 00 00 77 00 00 00 00 00 00 00 9F 00 00
0020: 00 00 00 00 00 04 00 00 00 77 00 00 00 00 00 00
0030: 00 9F 00 00 00 00 00 00 00 00
 
Device Property: D02D (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00000077,00000000,0000009F,00000000
Current Value: 00000077,00000000,0000009F,00000000
 
0000: 1A 00 00 00 02 00 14 10 56 02 00 00 2E D0 06 00
0010: 00 00 00 08 00 00 00 08 00 00
 
Device Property: D02E (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00080000
Current Value: 00080000
 
0000: 1A 00 00 00 02 00 14 10 58 02 00 00 2F D0 06 00
0010: 00 00 00 04 00 00 00 04 00 00
 
Device Property: D02F (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00040000
Current Value: 00040000
 
0000: 1A 00 00 00 02 00 14 10 5A 02 00 00 30 D0 06 00
0010: 00 00 01 00 00 00 01 00 00 00
 
Device Property: D030 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 00000100
Current Value: 00000100
 
0000: 1A 00 00 00 02 00 14 10 5C 02 00 00 31 D0 06 00
0010: 00 00 00 00 01 00 00 00 01 00
 
Device Property: D031 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 01000000
Current Value: 01000000
 
0000: 68 00 00 00 02 00 14 10 5E 02 00 00 32 D0 FF FF
0010: 00 15 43 00 61 00 6E 00 6F 00 6E 00 20 00 50 00
0020: 6F 00 77 00 65 00 72 00 53 00 68 00 6F 00 74 00
0030: 20 00 41 00 36 00 34 00 30 00 00 00 15 43 00 61
0040: 00 6E 00 6F 00 6E 00 20 00 50 00 6F 00 77 00 65
0050: 00 72 00 53 00 68 00 6F 00 74 00 20 00 41 00 36
0060: 00 34 00 30 00 00 00 00
 
Device Property: D032 (Vendor defined)
Data Type: STR
Get/Set: Get
Default Value: Canon PowerShot A640
Current Value: Canon PowerShot A640
 
0000: 1C 00 00 00 02 00 14 10 60 02 00 00 33 D0 02 40
0010: 01 01 00 00 00 00 01 00 00 00 00 00
 
Device Property: D033 (Vendor defined)
Data Type: AUINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
 
0000: 1A 00 00 00 02 00 14 10 62 02 00 00 34 D0 06 00
0010: 01 F1 F7 30 4D F1 F7 30 4D 00
 
Device Property: D034 (Vendor defined)
Data Type: UINT32
Get/Set: Get/Set
Default Value: 4D30F7F1
Current Value: 4D30F7F1
 
Transaction: Response recieve error: 2006
0000: 19 00 00 00 02 00 14 10 65 02 00 00 36 D0 02 00
0010: 01 03 03 02 03 00 01 02 03
 
Device Property: D036 (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 03
Current Value: 03
Enumeration: {01, 02, 03}
 
0000: 16 00 00 00 02 00 14 10 67 02 00 00 37 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D037 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 69 02 00 00 38 D0 04 00
0010: 00 20 00 20 00 00
 
Device Property: D038 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0020
Current Value: 0020
 
0000: 16 00 00 00 02 00 14 10 6B 02 00 00 39 D0 04 00
0010: 00 40 0E 40 0E 00
 
Device Property: D039 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0E40
Current Value: 0E40
 
Transaction: Response recieve error: 2006
0000: 16 00 00 00 02 00 14 10 6E 02 00 00 3B D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D03B (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 16 00 00 00 02 00 14 10 70 02 00 00 3C D0 04 00
0010: 00 38 00 38 00 00
 
Device Property: D03C (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0038
Current Value: 0038
 
0000: 16 00 00 00 02 00 14 10 72 02 00 00 3D D0 04 00
0010: 00 09 00 09 00 00
 
Device Property: D03D (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0009
Current Value: 0009
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
0000: 1C 00 00 00 02 00 14 10 77 02 00 00 41 D0 04 00
0010: 01 01 00 01 00 02 02 00 01 00 00 00
 
Device Property: D041 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0001
Current Value: 0001
Enumeration: {0001, 0000}
 
0000: 1E 00 00 00 02 00 14 10 79 02 00 00 42 D0 04 00
0010: 01 00 00 00 00 02 03 00 02 00 01 00 00 00
 
Device Property: D042 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0002, 0001, 0000}
 
0000: 16 00 00 00 02 00 14 10 7B 02 00 00 43 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D043 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: 1C 00 00 00 02 00 14 10 7D 02 00 00 44 D0 04 00
0010: 01 00 00 00 00 02 02 00 00 00 01 00
 
Device Property: D044 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0000
Current Value: 0000
Enumeration: {0000, 0001}
 
0000: 26 00 00 00 02 00 14 10 7F 02 00 00 45 D0 04 00
0010: 01 02 00 04 00 02 07 00 01 00 02 00 03 00 04 00
0020: 05 00 06 00 07 00
 
Device Property: D045 (Vendor defined)
Data Type: UINT16
Get/Set: Get/Set
Default Value: 0002
Current Value: 0004
Enumeration: {0001, 0002, 0003, 0004, 0005, 0006, 0007}
 
0000: 16 00 00 00 02 00 14 10 81 02 00 00 46 D0 04 00
0010: 00 01 01 01 01 00
 
Device Property: D046 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0101
Current Value: 0101
 
0000: 16 00 00 00 02 00 14 10 83 02 00 00 47 D0 04 00
0010: 00 00 00 00 00 00
 
Device Property: D047 (Vendor defined)
Data Type: UINT16
Get/Set: Get
Default Value: 0000
Current Value: 0000
 
0000: B2 00 00 00 02 00 14 10 85 02 00 00 48 D0 06 40
0010: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0020: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0030: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0040: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
0050: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
0060: 00 13 00 00 00 00 10 40 00 00 80 2A 00 00 48 1F
0070: 00 00 00 00 00 00 E4 03 00 00 70 26 00 00 50 19
0080: 00 00 70 11 00 00 00 00 00 00 58 02 00 00 48 12
0090: 00 00 30 0C 00 00 B0 08 00 00 00 00 00 00 50 01
00A0: 00 00 00 00 00 00 A8 0F 00 00 B8 08 00 00 58 04
00B0: 00 00
 
Device Property: D048 (Vendor defined)
Data Type: AUINT32
Get/Set: Get
Default Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
Current Value: 00401000,002A8000,001F4800,00000000,0003E400,00267000,00195000,00117000,00000000,00025800,00124800,000C3000,0008B000,00000000,00015000,00000000,000FA800,0008B800,00045800
 
0000: 1A 00 00 00 02 00 14 10 87 02 00 00 49 D0 06 00
0010: 00 00 00 03 02 00 00 03 02 00
 
Device Property: D049 (Vendor defined)
Data Type: UINT32
Get/Set: Get
Default Value: 02030000
Current Value: 02030000
 
0000: 1A 00 00 00 02 00 14 10 89 02 00 00 4A D0 02 00
0010: 01 00 00 02 04 00 00 01 02 03
 
Device Property: D04A (Vendor defined)
Data Type: UINT8
Get/Set: Get/Set
Default Value: 00
Current Value: 00
Enumeration: {00, 01, 02, 03}
 
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
Transaction: Response recieve error: 2006
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/PSRemote.pde
0,0 → 1,110
/* Canon Powershot control terminal */
//#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <simpletimer.h>
#include <ptp.h>
#include <canonps.h>
#include <qep_port.h>
#include <valuelist.h>
#include <psvaluetitles.h>
 
#include "ptpdpparser.h"
#include "ptpobjinfoparser.h"
#include "pseventparser.h"
#include "psconsole.h"
 
#define DEV_ADDR 1
 
// Canon PowerShot S3 IS
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public PSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
SimpleTimer ControlTimer, PTPPollTimer;
 
CanonPS Ps(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
QEvent evtTick, evtAbort;
PSConsole psConsole;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("Camera disconnected.\r\n"));
if (stateConnected == stConnected)
psConsole.dispatch(&evtTick);
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected || stateConnected == stInitial)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
psConsole.dispatch(&evtTick);
}
int8_t index = psConsole.MenuSelect();
if (index >= 0)
{
MenuSelectEvt menu_sel_evt;
menu_sel_evt.sig = MENU_SELECT_SIG;
menu_sel_evt.item_index = index;
psConsole.dispatch(&menu_sel_evt); // dispatch the event
}
}
 
void OnPTPPollTimer()
{
PSEventParser prs;
Ps.EventCheck(&prs);
if (uint32_t handle = prs.GetObjHandle())
{
PTPObjInfoParser inf;
Ps.GetObjectInfo(handle, &inf);
}
}
 
void setup()
{
Serial.begin(115200);
Ps.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 300);
evtTick.sig = TICK_SIG;
// evtAbort.sig = ABORT_SIG;
psConsole.init();
 
Serial.println("Start");
}
 
void loop()
{
Ps.Task();
PTPPollTimer.Run();
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/psconsole.cpp
0,0 → 1,475
#include "psconsole.h"
#include <psvaluetitles.h>
#include <valuelist.h>
 
extern CanonPS Ps;
 
/* fixes avr-gcc incompatibility with virtual destructors */
void operator delete( void *p ) {}
 
const char* menuMain[] = {"Capture", "View Settings", "Change Settings", "Viewfinder On", "Viewfinder Off"};
const char* menuChangeSettings[] = {"Mode", "Aperture", "Shutter Speed", "WB", "ISO", "Exp Comp", "CamOutput", "Zoom"};
const char* menuUpDown[] = {"<<", ">>"};
 
#define MAIN_MENU_COUNT sizeof(menuMain) / sizeof(const char*)
#define CHSET_MENU_COUNT sizeof(menuChangeSettings) / sizeof(const char*)
#define UPDWN_MENU_COUNT sizeof(menuUpDown) / sizeof(const char*)
 
void PrintMode()
{
Notify(PSTR("Mode:"));
PrintValueTitle<uint8_t, VT_MODE, VT_MODE_COUNT, VT_MODE_TEXT_LEN>((PTP*)&Ps, PS_DPC_ShootingMode, ModeTitles);
Notify(PSTR("\r\n"));
}
 
void PrintAperture()
{
Notify(PSTR("F:"));
PrintValueTitle<uint16_t, VT_APERTURE, VT_APT_COUNT, VT_APT_TEXT_LEN>((PTP*)&Ps, PS_DPC_Aperture, ApertureTitles);
Notify(PSTR("\r\n"));
}
 
void PrintShutterSpeed()
{
Notify(PSTR("T:"));
PrintValueTitle<uint16_t, VT_SHSPEED, VT_SHSPEED_COUNT, VT_SHSPEED_TEXT_LEN>((PTP*)&Ps, PS_DPC_ShutterSpeed, ShutterSpeedTitles);
Notify(PSTR("\r\n"));
}
 
void PrintWB()
{
Notify(PSTR("WB:"));
PrintValueTitle<uint8_t, VT_WB, VT_WB_COUNT, VT_WB_TEXT_LEN>((PTP*)&Ps, PS_DPC_WhiteBalance, WbTitles);
Notify(PSTR("\r\n"));
}
 
void PrintIso()
{
Notify(PSTR("ISO:"));
PrintValueTitle<uint16_t, VT_ISO, VT_ISO_COUNT, VT_ISO_TEXT_LEN>((PTP*)&Ps, PS_DPC_ISOSpeed, IsoTitles);
Notify(PSTR("\r\n"));
}
 
void PrintExpCompensation()
{
Notify(PSTR("ExpComp:"));
PrintValueTitle<uint8_t, VT_EXPCOMP, VT_EXPCOMP_COUNT, VT_EXPCOMP_TEXT_LEN>((PTP*)&Ps, PS_DPC_ExpCompensation, ExpCompTitles);
Notify(PSTR("\r\n"));
}
 
void PrintCamOutput()
{
Notify(PSTR("CamOutput:"));
PrintValueTitle<uint8_t, VT_CAMOUTPUT, VT_CAMOUTPUT_COUNT, VT_CAMOUTPUT_TEXT_LEN>((PTP*)&Ps, PS_DPC_CameraOutput, CamOutputTitles);
Notify(PSTR("\r\n"));
}
 
void PrintZoom()
{
uint16_t val = 0;
Notify(PSTR("Zoom:"));
if (Ps.GetDevicePropValue(PS_DPC_Zoom, (uint16_t&)val) == PTP_RC_OK)
PrintHex<uint16_t>(val);
Notify(PSTR("\r\n"));
}
 
void PSConsole::ShowParams()
{
PrintMode();
PrintAperture();
PrintShutterSpeed();
PrintWB();
PrintIso();
PrintExpCompensation();
PrintCamOutput();
PrintZoom();
}
 
QState PSConsole::Initial(PSConsole *me, QEvent const *e)
{
return Q_TRAN(&PSConsole::Inactive);
}
 
QState PSConsole::Inactive(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
Notify(PSTR("Inactive\r\n"));
return Q_HANDLED();
case TICK_SIG:
return Q_TRAN(&PSConsole::Active);
}
return Q_SUPER(QHsm::top);
}
 
QState PSConsole::Active(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
Notify(PSTR("Active\r\n"));
return Q_HANDLED();
case Q_INIT_SIG:
return Q_TRAN(&PSConsole::MainMenu);
case TICK_SIG:
return Q_TRAN(&PSConsole::Inactive);
}
return Q_SUPER(QHsm::top);
}
 
void PSConsole::PrintMenuTitles(uint8_t count, const char **menu)
{
Serial.println("");
for (uint8_t i=0; i<=count; i++)
{
Serial.print(i, DEC);
Serial.print(". ");
if (i == 0)
Serial.println("<..>");
else
Serial.println(menu[i-1]);
}
Serial.println("");
}
 
QState PSConsole::MainMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case 1:
Ps.SetDevicePropValue(PS_DPC_CaptureTransferMode, (uint16_t)0x0D);
Ps.Capture();
return Q_HANDLED();
case 2:
ShowParams();
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case 3:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 4:
Ps.Operation(PS_OC_ViewfinderOn);
return Q_HANDLED();
case 5:
Ps.Operation(PS_OC_ViewfinderOff);
return Q_HANDLED();
}
}
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeSettingsMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(CHSET_MENU_COUNT, menuChangeSettings);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::MainMenu);
case 1: // Aperture
return Q_TRAN(&PSConsole::ChangeModeMenu);
case 2: // Aperture
return Q_TRAN(&PSConsole::ChangeApertureMenu);
case 3: // Shutter Speed
return Q_TRAN(&PSConsole::ChangeShutterSpeedMenu);
case 4: // White Balance
return Q_TRAN(&PSConsole::ChangeWBMenu);
case 5: // ISO
return Q_TRAN(&PSConsole::ChangeIsoMenu);
case 6: // Exposure Compensation
return Q_TRAN(&PSConsole::ChangeExpCompMenu);
case 7: // Camera Output
return Q_TRAN(&PSConsole::ChangeCamOutputMenu);
case 8: // Zoom
return Q_TRAN(&PSConsole::ChangeZoomMenu);
} // switch
}
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeModeMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintMode();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_ShootingMode);
PrintMode();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_ShootingMode);
PrintMode();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeApertureMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintAperture();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_Aperture);
PrintAperture();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_Aperture);
PrintAperture();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeShutterSpeedMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintShutterSpeed();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_ShutterSpeed);
PrintShutterSpeed();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_ShutterSpeed);
PrintShutterSpeed();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeWBMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintWB();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_WhiteBalance);
PrintWB();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_WhiteBalance);
PrintWB();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeIsoMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintIso();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_ISOSpeed);
PrintIso();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_ISOSpeed);
PrintIso();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeExpCompMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintExpCompensation();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 1:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_ExpCompensation);
PrintExpCompensation();
return Q_HANDLED();
case 2:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_ExpCompensation);
PrintExpCompensation();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeCamOutputMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintCamOutput();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_CameraOutput);
PrintCamOutput();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_CameraOutput);
PrintCamOutput();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeZoomMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintZoom();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_Zoom);
PrintZoom();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_Zoom);
PrintZoom();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
static TickEvt tick_evt;
 
int8_t PSConsole::MenuSelect()
{
if( !Serial.available())
return -1;
uint8_t char_count = 0;
uint8_t index = 0;
while (Serial.available() > 0 && char_count < 2)
{
uint8_t key = Serial.read();
key -= '0';
if (index)
{
uint8_t tmp = index;
// index *= 10;
index <<= 3;
index += tmp;
index += tmp;
}
index += key;
char_count ++;
}
return (char_count) ? (int8_t)index : (int8_t)-1;
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/psconsole.h
0,0 → 1,56
#if !defined(__PSCONSOLE_H__)
#define __PSCONSOLE_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <qep_port.h>
#include <WProgram.h>
#include <canonps.h>
 
#include "ptpdpparser.h"
 
enum TextMenuSignals
{
MENU_SELECT_SIG = Q_USER_SIG,
TICK_SIG
};
 
struct TickEvt : public QEvent
{
uint8_t fine_time; // the fine 1/10 s counter
};
 
struct MenuSelectEvt : public QEvent
{
uint8_t item_index;
};
 
class PSConsole : public QHsm
{
static void PrintMenuTitles(uint8_t count, const char **menu);
static void ShowParams();
public:
PSConsole()
: QHsm((QStateHandler)&PSConsole::Initial)
{};
int8_t MenuSelect();
 
protected:
static QState Initial(PSConsole *me, QEvent const *e);
static QState Inactive(PSConsole *me, QEvent const *e);
static QState Active(PSConsole *me, QEvent const *e);
static QState MainMenu(PSConsole *me, QEvent const *e);
static QState ChangeSettingsMenu(PSConsole *me, QEvent const *e);
static QState ChangeModeMenu(PSConsole *me, QEvent const *e);
static QState ChangeApertureMenu(PSConsole *me, QEvent const *e);
static QState ChangeShutterSpeedMenu(PSConsole *me, QEvent const *e);
static QState ChangeWBMenu(PSConsole *me, QEvent const *e);
static QState ChangeImageModeMenu(PSConsole *me, QEvent const *e);
static QState ChangeExpCompMenu(PSConsole *me, QEvent const *e);
static QState ChangeIsoMenu(PSConsole *me, QEvent const *e);
static QState ChangeCamOutputMenu(PSConsole *me, QEvent const *e);
static QState ChangeZoomMenu(PSConsole *me, QEvent const *e);
};
 
#endif // __PSCONSOLE_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/pseventparser.cpp
0,0 → 1,85
#include "pseventparser.h"
 
void PSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
 
if (!cntdn)
return;
nStage ++;
 
case 1:
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
//Notify(PSTR("\r\nNumber of Fields:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
//Notify(PSTR("\r\nEvent Code:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
 
eventCode = *((uint16_t*)theBuffer.pValue);
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
//Notify(PSTR("\r\nTransaction ID:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
if (eventCode == PTP_EC_ObjectAdded)
Notify(PSTR("\r\nObject Added:\t\t"));
 
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (eventCode == PTP_EC_ObjectAdded)
{
if (!valueParser.Parse(&p, &cntdn))
return;
 
objHandle = *((uint32_t*)theBuffer.pValue);
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
Notify(PSTR("\r\n"));
}
if (eventCode == PTP_EC_CaptureComplete)
Notify(PSTR("\r\nCapture complete.\r\n"));
nStage ++;
case 11:
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/pseventparser.h
0,0 → 1,29
#ifndef __PSEVENTPARSER_H__
#define __PSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "ptpcallback.h"
#include "ptpdebug.h"
#include "canonps.h"
 
class PSEventParser : public PTPReadParser
{
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
uint16_t eventCode;
uint32_t objHandle;
 
MultiByteValueParser valueParser;
 
public:
PSEventParser() : nStage(0), varBuffer(0), objHandle(0)
{
theBuffer.pValue = &varBuffer;
};
uint32_t GetObjHandle() { return objHandle; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PSEVENTPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/ptpobjinfoparser.cpp
0,0 → 1,298
#include "ptpobjinfoparser.h"
 
const char* PTPObjInfoParser::acNames[] PROGMEM =
{
msgUndefined,
msgAssociation,
msgScript,
msgExecutable,
msgText,
msgHTML,
msgDPOF,
msgAIFF,
msgWAV,
msgMP3,
msgAVI,
msgMPEG,
msgASF,
msgQT
};
 
const char* PTPObjInfoParser::imNames[] PROGMEM =
{
msgUndefined,
msgEXIF_JPEG,
msgTIFF_EP,
msgFlashPix,
msgBMP,
msgCIFF,
msgUndefined_0x3806,
msgGIF,
msgJFIF,
msgPCD,
msgPICT,
msgPNG,
msgUndefined_0x380C,
msgTIFF,
msgTIFF_IT,
msgJP2,
msgJPX,
};
 
void PTPObjInfoParser::PrintFormat(uint16_t op)
{
Serial.print(op, HEX);
Serial.print("\t");
//Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x30) && ((op & 0xFF) <= (PTP_OFC_QT & 0xFF)))
Notify((char*)pgm_read_word(&acNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0x38) && ((op & 0xFF) <= (PTP_OFC_JPX & 0xFF)))
Notify((char*)pgm_read_word(&imNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OFC_Undefined_Firmware:
Notify(msgUndefined_Firmware);
break;
case MTP_OFC_Windows_Image_Format:
Notify(msgWindows_Image_Format);
break;
case MTP_OFC_Undefined_Audio:
Notify(msgUndefined_Audio);
break;
case MTP_OFC_WMA:
Notify(msgWMA);
break;
case MTP_OFC_OGG:
Notify(msgOGG);
break;
case MTP_OFC_AAC:
Notify(msgAAC);
break;
case MTP_OFC_Audible:
Notify(msgAudible);
break;
case MTP_OFC_FLAC:
Notify(msgFLAC);
break;
case MTP_OFC_Undefined_Video:
Notify(msgUndefined_Video);
break;
case MTP_OFC_WMV:
Notify(msgWMV);
break;
case MTP_OFC_MP4_Container:
Notify(msgMP4_Container);
break;
case MTP_OFC_MP2:
Notify(msgMP2);
break;
case MTP_OFC_3GP_Container:
Notify(msg3GP_Container);
break;
default:
Notify(PSTR("Vendor defined"));
}
}
Notify(PSTR("\r\n"));
}
 
void PTPObjInfoParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
Notify(PSTR("Storage ID:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
Notify(PSTR("\r\nObject Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
Notify(PSTR("Protection Status:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
Notify(PSTR("\r\nObject Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
Notify(PSTR("\r\nThumb Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 11:
Notify(PSTR("Thumb Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 12:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 13:
Notify(PSTR("\r\nThumb Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 14:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 15:
Notify(PSTR("\r\nThumb Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 16:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 17:
Notify(PSTR("\r\nImage Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 18:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 19:
Notify(PSTR("\r\nImage Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 20:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 21:
Notify(PSTR("\r\nImage Bit Depth:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 22:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 23:
Notify(PSTR("\r\nParent Object:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 24:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 25:
Notify(PSTR("\r\nAssociation Type:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 26:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 27:
Notify(PSTR("\r\nAssociation Desc:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 28:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 29:
Notify(PSTR("\r\nSequence Number:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 30:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 31:
Notify(PSTR("\r\nFile Name:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 32:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 33:
Notify(PSTR("\r\nCapture Date:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 34:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 35:
Notify(PSTR("\r\nModification Date:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 36:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 37:
Notify(PSTR("\r\nKeywords:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 38:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
Notify(PSTR("\r\n"));
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemote/ptpobjinfoparser.h
0,0 → 1,83
#ifndef __PTPOBJINFOPARSER_H__
#define __PTPOBJINFOPARSER_H__
 
#include <ptp.h>
#include <mtpconst.h>
#include <ptpcallback.h>
 
const char msgUndefined [] PROGMEM = "Undefined";
 
// Ancillary formats
const char msgAssociation [] PROGMEM = "Association";
const char msgScript [] PROGMEM = "Script";
const char msgExecutable [] PROGMEM = "Executable";
const char msgText [] PROGMEM = "Text";
const char msgHTML [] PROGMEM = "HTML";
const char msgDPOF [] PROGMEM = "DPOF";
const char msgAIFF [] PROGMEM = "AIFF";
const char msgWAV [] PROGMEM = "WAV";
const char msgMP3 [] PROGMEM = "MP3";
const char msgAVI [] PROGMEM = "AVI";
const char msgMPEG [] PROGMEM = "MPEG";
const char msgASF [] PROGMEM = "ASF";
const char msgQT [] PROGMEM = "QT";
 
// Image formats
const char msgEXIF_JPEG [] PROGMEM = "EXIF_JPEG";
const char msgTIFF_EP [] PROGMEM = "TIFF_EP";
const char msgFlashPix [] PROGMEM = "FlashPix";
const char msgBMP [] PROGMEM = "BMP";
const char msgCIFF [] PROGMEM = "CIFF";
const char msgUndefined_0x3806 [] PROGMEM = "Undefined_0x3806";
const char msgGIF [] PROGMEM = "GIF";
const char msgJFIF [] PROGMEM = "JFIF";
const char msgPCD [] PROGMEM = "PCD";
const char msgPICT [] PROGMEM = "PICT";
const char msgPNG [] PROGMEM = "PNG";
const char msgUndefined_0x380C [] PROGMEM = "Undefined_0x380C";
const char msgTIFF [] PROGMEM = "TIFF";
const char msgTIFF_IT [] PROGMEM = "TIFF_IT";
const char msgJP2 [] PROGMEM = "JP2";
const char msgJPX [] PROGMEM = "JPX";
 
// MTP Object Formats
const char msgUndefined_Firmware [] PROGMEM = "Undefined_Firmware";
const char msgWindows_Image_Format [] PROGMEM = "Windows_Image_Format";
const char msgUndefined_Audio [] PROGMEM = "Undefined_Audio";
const char msgWMA [] PROGMEM = "WMA";
const char msgOGG [] PROGMEM = "OGG";
const char msgAAC [] PROGMEM = "AAC";
const char msgAudible [] PROGMEM = "Audible";
const char msgFLAC [] PROGMEM = "FLAC";
const char msgUndefined_Video [] PROGMEM = "Undefined_Video";
const char msgWMV [] PROGMEM = "WMV";
const char msgMP4_Container [] PROGMEM = "MP4_Container";
const char msgMP2 [] PROGMEM = "MP2";
const char msg3GP_Container [] PROGMEM = "3GP_Container";
 
 
class PTPObjInfoParser : public PTPReadParser
{
static const char* acNames[];
static const char* imNames[];
 
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
 
MultiByteValueParser valueParser;
PTPListParser arrayParser;
 
static void PrintChar(MultiValueBuffer *p)
{
if (((unsigned char*)p->pValue)[0])
Serial.print(((unsigned char*)p->pValue)[0]);
};
void PrintFormat(uint16_t op);
 
public:
PTPObjInfoParser() : nStage(0) { theBuffer.pValue = (uint8_t*)&varBuffer; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PTPOBJINFOPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/PSRemoteSA.pde
0,0 → 1,114
/* Canon Powershot control terminal */
#include <SPI.h>
#include <Max3421e.h>
#include <Usb.h>
#include <simpletimer.h>
#include <ptp.h>
#include <canonps.h>
#include <qep_port.h>
#include <valuelist.h>
#include <psvaluetitles.h>
 
#include "ptpdpparser.h"
#include "ptpobjinfoparser.h"
#include "pseventparser.h"
#include "psconsole.h"
 
#define DEV_ADDR 1
 
// Canon PowerShot S3 IS
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
class CamStateHandlers : public PSStateHandlers
{
enum CamStates { stInitial, stDisconnected, stConnected };
CamStates stateConnected;
public:
CamStateHandlers() : stateConnected(stInitial)
{
};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
};
 
CamStateHandlers CamStates;
SimpleTimer ControlTimer, PTPPollTimer;
 
CanonPS Ps(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
QEvent evtTick, evtAbort;
PSConsole psConsole;
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected == stConnected || stateConnected == stInitial)
{
stateConnected = stDisconnected;
PTPPollTimer.Disable();
Notify(PSTR("Camera disconnected.\r\n"));
if (stateConnected == stConnected)
psConsole.dispatch(&evtTick);
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (stateConnected == stDisconnected || stateConnected == stInitial)
{
stateConnected = stConnected;
PTPPollTimer.Enable();
psConsole.dispatch(&evtTick);
}
int8_t index = psConsole.MenuSelect();
if (index >= 0)
{
MenuSelectEvt menu_sel_evt;
menu_sel_evt.sig = MENU_SELECT_SIG;
menu_sel_evt.item_index = index;
psConsole.dispatch(&menu_sel_evt); // dispatch the event
}
}
 
void OnPTPPollTimer()
{
PSEventParser prs;
Ps.EventCheck(&prs);
if (uint32_t handle = prs.GetObjHandle())
{
PTPObjInfoParser inf;
Ps.GetObjectInfo(handle, &inf);
}
}
 
void setup()
{
pinMode(6, OUTPUT); //OSD CS
digitalWrite(6, HIGH); //Disablibg OSD CS
Serial.begin(115200);
Ps.Setup();
delay( 200 );
PTPPollTimer.Set(OnPTPPollTimer, 300);
evtTick.sig = TICK_SIG;
// evtAbort.sig = ABORT_SIG;
psConsole.init();
 
Serial.println("Start");
}
 
void loop()
{
Ps.Task();
PTPPollTimer.Run();
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/psconsole.cpp
0,0 → 1,475
#include "psconsole.h"
#include <psvaluetitles.h>
#include <valuelist.h>
 
extern CanonPS Ps;
 
/* fixes avr-gcc incompatibility with virtual destructors */
void operator delete( void *p ) {}
 
const char* menuMain[] = {"Capture", "View Settings", "Change Settings", "Viewfinder On", "Viewfinder Off"};
const char* menuChangeSettings[] = {"Mode", "Aperture", "Shutter Speed", "WB", "ISO", "Exp Comp", "CamOutput", "Zoom"};
const char* menuUpDown[] = {"<<", ">>"};
 
#define MAIN_MENU_COUNT sizeof(menuMain) / sizeof(const char*)
#define CHSET_MENU_COUNT sizeof(menuChangeSettings) / sizeof(const char*)
#define UPDWN_MENU_COUNT sizeof(menuUpDown) / sizeof(const char*)
 
void PrintMode()
{
Notify(PSTR("Mode:"));
PrintValueTitle<uint8_t, VT_MODE, VT_MODE_COUNT, VT_MODE_TEXT_LEN>((PTP*)&Ps, PS_DPC_ShootingMode, ModeTitles);
Notify(PSTR("\r\n"));
}
 
void PrintAperture()
{
Notify(PSTR("F:"));
PrintValueTitle<uint16_t, VT_APERTURE, VT_APT_COUNT, VT_APT_TEXT_LEN>((PTP*)&Ps, PS_DPC_Aperture, ApertureTitles);
Notify(PSTR("\r\n"));
}
 
void PrintShutterSpeed()
{
Notify(PSTR("T:"));
PrintValueTitle<uint16_t, VT_SHSPEED, VT_SHSPEED_COUNT, VT_SHSPEED_TEXT_LEN>((PTP*)&Ps, PS_DPC_ShutterSpeed, ShutterSpeedTitles);
Notify(PSTR("\r\n"));
}
 
void PrintWB()
{
Notify(PSTR("WB:"));
PrintValueTitle<uint8_t, VT_WB, VT_WB_COUNT, VT_WB_TEXT_LEN>((PTP*)&Ps, PS_DPC_WhiteBalance, WbTitles);
Notify(PSTR("\r\n"));
}
 
void PrintIso()
{
Notify(PSTR("ISO:"));
PrintValueTitle<uint16_t, VT_ISO, VT_ISO_COUNT, VT_ISO_TEXT_LEN>((PTP*)&Ps, PS_DPC_ISOSpeed, IsoTitles);
Notify(PSTR("\r\n"));
}
 
void PrintExpCompensation()
{
Notify(PSTR("ExpComp:"));
PrintValueTitle<uint8_t, VT_EXPCOMP, VT_EXPCOMP_COUNT, VT_EXPCOMP_TEXT_LEN>((PTP*)&Ps, PS_DPC_ExpCompensation, ExpCompTitles);
Notify(PSTR("\r\n"));
}
 
void PrintCamOutput()
{
Notify(PSTR("CamOutput:"));
PrintValueTitle<uint8_t, VT_CAMOUTPUT, VT_CAMOUTPUT_COUNT, VT_CAMOUTPUT_TEXT_LEN>((PTP*)&Ps, PS_DPC_CameraOutput, CamOutputTitles);
Notify(PSTR("\r\n"));
}
 
void PrintZoom()
{
uint16_t val = 0;
Notify(PSTR("Zoom:"));
if (Ps.GetDevicePropValue(PS_DPC_Zoom, (uint16_t&)val) == PTP_RC_OK)
PrintHex<uint16_t>(val);
Notify(PSTR("\r\n"));
}
 
void PSConsole::ShowParams()
{
PrintMode();
PrintAperture();
PrintShutterSpeed();
PrintWB();
PrintIso();
PrintExpCompensation();
PrintCamOutput();
PrintZoom();
}
 
QState PSConsole::Initial(PSConsole *me, QEvent const *e)
{
return Q_TRAN(&PSConsole::Inactive);
}
 
QState PSConsole::Inactive(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
Notify(PSTR("Inactive\r\n"));
return Q_HANDLED();
case TICK_SIG:
return Q_TRAN(&PSConsole::Active);
}
return Q_SUPER(QHsm::top);
}
 
QState PSConsole::Active(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
Notify(PSTR("Active\r\n"));
return Q_HANDLED();
case Q_INIT_SIG:
return Q_TRAN(&PSConsole::MainMenu);
case TICK_SIG:
return Q_TRAN(&PSConsole::Inactive);
}
return Q_SUPER(QHsm::top);
}
 
void PSConsole::PrintMenuTitles(uint8_t count, const char **menu)
{
Serial.println("");
for (uint8_t i=0; i<=count; i++)
{
Serial.print(i, DEC);
Serial.print(". ");
if (i == 0)
Serial.println("<..>");
else
Serial.println(menu[i-1]);
}
Serial.println("");
}
 
QState PSConsole::MainMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case 1:
Ps.SetDevicePropValue(PS_DPC_CaptureTransferMode, (uint16_t)0x0D);
Ps.Capture();
return Q_HANDLED();
case 2:
ShowParams();
PrintMenuTitles(MAIN_MENU_COUNT, menuMain);
return Q_HANDLED();
case 3:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 4:
Ps.Operation(PS_OC_ViewfinderOn);
return Q_HANDLED();
case 5:
Ps.Operation(PS_OC_ViewfinderOff);
return Q_HANDLED();
}
}
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeSettingsMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(CHSET_MENU_COUNT, menuChangeSettings);
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::MainMenu);
case 1: // Aperture
return Q_TRAN(&PSConsole::ChangeModeMenu);
case 2: // Aperture
return Q_TRAN(&PSConsole::ChangeApertureMenu);
case 3: // Shutter Speed
return Q_TRAN(&PSConsole::ChangeShutterSpeedMenu);
case 4: // White Balance
return Q_TRAN(&PSConsole::ChangeWBMenu);
case 5: // ISO
return Q_TRAN(&PSConsole::ChangeIsoMenu);
case 6: // Exposure Compensation
return Q_TRAN(&PSConsole::ChangeExpCompMenu);
case 7: // Camera Output
return Q_TRAN(&PSConsole::ChangeCamOutputMenu);
case 8: // Zoom
return Q_TRAN(&PSConsole::ChangeZoomMenu);
} // switch
}
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeModeMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintMode();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_ShootingMode);
PrintMode();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_ShootingMode);
PrintMode();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeApertureMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintAperture();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_Aperture);
PrintAperture();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_Aperture);
PrintAperture();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeShutterSpeedMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintShutterSpeed();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_ShutterSpeed);
PrintShutterSpeed();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_ShutterSpeed);
PrintShutterSpeed();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeWBMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintWB();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_WhiteBalance);
PrintWB();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_WhiteBalance);
PrintWB();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeIsoMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintIso();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_ISOSpeed);
PrintIso();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_ISOSpeed);
PrintIso();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeExpCompMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintExpCompensation();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
uint8_t new_value;
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 1:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_ExpCompensation);
PrintExpCompensation();
return Q_HANDLED();
case 2:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_ExpCompensation);
PrintExpCompensation();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeCamOutputMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintCamOutput();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint8_t>((PTP*)&Ps, PS_DPC_CameraOutput);
PrintCamOutput();
return Q_HANDLED();
case 1:
StepDown<uint8_t>((PTP*)&Ps, PS_DPC_CameraOutput);
PrintCamOutput();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
QState PSConsole::ChangeZoomMenu(PSConsole *me, QEvent const *e)
{
switch (e->sig)
{
case Q_ENTRY_SIG:
PrintMenuTitles(UPDWN_MENU_COUNT, menuUpDown);
PrintZoom();
return Q_HANDLED();
case MENU_SELECT_SIG:
{
switch (((MenuSelectEvt*)e)->item_index)
{
case 0:
return Q_TRAN(&PSConsole::ChangeSettingsMenu);
case 2:
StepUp<uint16_t>((PTP*)&Ps, PS_DPC_Zoom);
PrintZoom();
return Q_HANDLED();
case 1:
StepDown<uint16_t>((PTP*)&Ps, PS_DPC_Zoom);
PrintZoom();
return Q_HANDLED();
} // switch (((MenuSelectEvt*)e)->item_index)
} // case MENU_SELECT_SIG:
}
return Q_SUPER(&PSConsole::Active);
}
 
static TickEvt tick_evt;
 
int8_t PSConsole::MenuSelect()
{
if( !Serial.available())
return -1;
uint8_t char_count = 0;
uint8_t index = 0;
while (Serial.available() > 0 && char_count < 2)
{
uint8_t key = Serial.read();
key -= '0';
if (index)
{
uint8_t tmp = index;
// index *= 10;
index <<= 3;
index += tmp;
index += tmp;
}
index += key;
char_count ++;
}
return (char_count) ? (int8_t)index : (int8_t)-1;
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/psconsole.h
0,0 → 1,56
#if !defined(__PSCONSOLE_H__)
#define __PSCONSOLE_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <qep_port.h>
#include <WProgram.h>
#include <canonps.h>
 
#include "ptpdpparser.h"
 
enum TextMenuSignals
{
MENU_SELECT_SIG = Q_USER_SIG,
TICK_SIG
};
 
struct TickEvt : public QEvent
{
uint8_t fine_time; // the fine 1/10 s counter
};
 
struct MenuSelectEvt : public QEvent
{
uint8_t item_index;
};
 
class PSConsole : public QHsm
{
static void PrintMenuTitles(uint8_t count, const char **menu);
static void ShowParams();
public:
PSConsole()
: QHsm((QStateHandler)&PSConsole::Initial)
{};
int8_t MenuSelect();
 
protected:
static QState Initial(PSConsole *me, QEvent const *e);
static QState Inactive(PSConsole *me, QEvent const *e);
static QState Active(PSConsole *me, QEvent const *e);
static QState MainMenu(PSConsole *me, QEvent const *e);
static QState ChangeSettingsMenu(PSConsole *me, QEvent const *e);
static QState ChangeModeMenu(PSConsole *me, QEvent const *e);
static QState ChangeApertureMenu(PSConsole *me, QEvent const *e);
static QState ChangeShutterSpeedMenu(PSConsole *me, QEvent const *e);
static QState ChangeWBMenu(PSConsole *me, QEvent const *e);
static QState ChangeImageModeMenu(PSConsole *me, QEvent const *e);
static QState ChangeExpCompMenu(PSConsole *me, QEvent const *e);
static QState ChangeIsoMenu(PSConsole *me, QEvent const *e);
static QState ChangeCamOutputMenu(PSConsole *me, QEvent const *e);
static QState ChangeZoomMenu(PSConsole *me, QEvent const *e);
};
 
#endif // __PSCONSOLE_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/pseventparser.cpp
0,0 → 1,85
#include "pseventparser.h"
 
void PSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
 
if (!cntdn)
return;
nStage ++;
 
case 1:
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
//Notify(PSTR("\r\nNumber of Fields:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
//Notify(PSTR("\r\nEvent Code:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
 
eventCode = *((uint16_t*)theBuffer.pValue);
//PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
//Notify(PSTR("\r\nTransaction ID:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
 
//PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
if (eventCode == PTP_EC_ObjectAdded)
Notify(PSTR("\r\nObject Added:\t\t"));
 
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (eventCode == PTP_EC_ObjectAdded)
{
if (!valueParser.Parse(&p, &cntdn))
return;
 
objHandle = *((uint32_t*)theBuffer.pValue);
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
Notify(PSTR("\r\n"));
}
if (eventCode == PTP_EC_CaptureComplete)
Notify(PSTR("\r\nCapture complete.\r\n"));
nStage ++;
case 11:
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/pseventparser.h
0,0 → 1,29
#ifndef __PSEVENTPARSER_H__
#define __PSEVENTPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "ptpcallback.h"
#include "ptpdebug.h"
#include "canonps.h"
 
class PSEventParser : public PTPReadParser
{
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
uint16_t eventCode;
uint32_t objHandle;
 
MultiByteValueParser valueParser;
 
public:
PSEventParser() : nStage(0), varBuffer(0), objHandle(0)
{
theBuffer.pValue = &varBuffer;
};
uint32_t GetObjHandle() { return objHandle; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PSEVENTPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/ptpobjinfoparser.cpp
0,0 → 1,298
#include "ptpobjinfoparser.h"
 
const char* PTPObjInfoParser::acNames[] PROGMEM =
{
msgUndefined,
msgAssociation,
msgScript,
msgExecutable,
msgText,
msgHTML,
msgDPOF,
msgAIFF,
msgWAV,
msgMP3,
msgAVI,
msgMPEG,
msgASF,
msgQT
};
 
const char* PTPObjInfoParser::imNames[] PROGMEM =
{
msgUndefined,
msgEXIF_JPEG,
msgTIFF_EP,
msgFlashPix,
msgBMP,
msgCIFF,
msgUndefined_0x3806,
msgGIF,
msgJFIF,
msgPCD,
msgPICT,
msgPNG,
msgUndefined_0x380C,
msgTIFF,
msgTIFF_IT,
msgJP2,
msgJPX,
};
 
void PTPObjInfoParser::PrintFormat(uint16_t op)
{
Serial.print(op, HEX);
Serial.print("\t");
//Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x30) && ((op & 0xFF) <= (PTP_OFC_QT & 0xFF)))
Notify((char*)pgm_read_word(&acNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0x38) && ((op & 0xFF) <= (PTP_OFC_JPX & 0xFF)))
Notify((char*)pgm_read_word(&imNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OFC_Undefined_Firmware:
Notify(msgUndefined_Firmware);
break;
case MTP_OFC_Windows_Image_Format:
Notify(msgWindows_Image_Format);
break;
case MTP_OFC_Undefined_Audio:
Notify(msgUndefined_Audio);
break;
case MTP_OFC_WMA:
Notify(msgWMA);
break;
case MTP_OFC_OGG:
Notify(msgOGG);
break;
case MTP_OFC_AAC:
Notify(msgAAC);
break;
case MTP_OFC_Audible:
Notify(msgAudible);
break;
case MTP_OFC_FLAC:
Notify(msgFLAC);
break;
case MTP_OFC_Undefined_Video:
Notify(msgUndefined_Video);
break;
case MTP_OFC_WMV:
Notify(msgWMV);
break;
case MTP_OFC_MP4_Container:
Notify(msgMP4_Container);
break;
case MTP_OFC_MP2:
Notify(msgMP2);
break;
case MTP_OFC_3GP_Container:
Notify(msg3GP_Container);
break;
default:
Notify(PSTR("Vendor defined"));
}
}
Notify(PSTR("\r\n"));
}
 
void PTPObjInfoParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
p += 12;
cntdn -= 12;
nStage ++;
case 1:
Notify(PSTR("Storage ID:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 2:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 3:
Notify(PSTR("\r\nObject Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 4:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 5:
Notify(PSTR("Protection Status:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 6:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 7:
Notify(PSTR("\r\nObject Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 8:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 9:
Notify(PSTR("\r\nThumb Format:\t\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 10:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintFormat(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 11:
Notify(PSTR("Thumb Compressed Size:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 12:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 13:
Notify(PSTR("\r\nThumb Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 14:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 15:
Notify(PSTR("\r\nThumb Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 16:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 17:
Notify(PSTR("\r\nImage Pix Width:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 18:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 19:
Notify(PSTR("\r\nImage Pix Height:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 20:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 21:
Notify(PSTR("\r\nImage Bit Depth:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 22:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 23:
Notify(PSTR("\r\nParent Object:\t\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 24:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 25:
Notify(PSTR("\r\nAssociation Type:\t"));
theBuffer.valueSize = 2;
valueParser.Initialize(&theBuffer);
nStage ++;
case 26:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
nStage ++;
case 27:
Notify(PSTR("\r\nAssociation Desc:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 28:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 29:
Notify(PSTR("\r\nSequence Number:\t"));
theBuffer.valueSize = 4;
valueParser.Initialize(&theBuffer);
nStage ++;
case 30:
if (!valueParser.Parse(&p, &cntdn))
return;
PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
nStage ++;
case 31:
Notify(PSTR("\r\nFile Name:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 32:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 33:
Notify(PSTR("\r\nCapture Date:\t\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 34:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 35:
Notify(PSTR("\r\nModification Date:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 36:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
nStage ++;
case 37:
Notify(PSTR("\r\nKeywords:\t"));
arrayParser.Initialize(1, 2, &theBuffer);
nStage ++;
case 38:
if (!arrayParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PrintChar))
return;
Notify(PSTR("\r\n"));
nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PSRemoteSA/ptpobjinfoparser.h
0,0 → 1,83
#ifndef __PTPOBJINFOPARSER_H__
#define __PTPOBJINFOPARSER_H__
 
#include <ptp.h>
#include <mtpconst.h>
#include <ptpcallback.h>
 
const char msgUndefined [] PROGMEM = "Undefined";
 
// Ancillary formats
const char msgAssociation [] PROGMEM = "Association";
const char msgScript [] PROGMEM = "Script";
const char msgExecutable [] PROGMEM = "Executable";
const char msgText [] PROGMEM = "Text";
const char msgHTML [] PROGMEM = "HTML";
const char msgDPOF [] PROGMEM = "DPOF";
const char msgAIFF [] PROGMEM = "AIFF";
const char msgWAV [] PROGMEM = "WAV";
const char msgMP3 [] PROGMEM = "MP3";
const char msgAVI [] PROGMEM = "AVI";
const char msgMPEG [] PROGMEM = "MPEG";
const char msgASF [] PROGMEM = "ASF";
const char msgQT [] PROGMEM = "QT";
 
// Image formats
const char msgEXIF_JPEG [] PROGMEM = "EXIF_JPEG";
const char msgTIFF_EP [] PROGMEM = "TIFF_EP";
const char msgFlashPix [] PROGMEM = "FlashPix";
const char msgBMP [] PROGMEM = "BMP";
const char msgCIFF [] PROGMEM = "CIFF";
const char msgUndefined_0x3806 [] PROGMEM = "Undefined_0x3806";
const char msgGIF [] PROGMEM = "GIF";
const char msgJFIF [] PROGMEM = "JFIF";
const char msgPCD [] PROGMEM = "PCD";
const char msgPICT [] PROGMEM = "PICT";
const char msgPNG [] PROGMEM = "PNG";
const char msgUndefined_0x380C [] PROGMEM = "Undefined_0x380C";
const char msgTIFF [] PROGMEM = "TIFF";
const char msgTIFF_IT [] PROGMEM = "TIFF_IT";
const char msgJP2 [] PROGMEM = "JP2";
const char msgJPX [] PROGMEM = "JPX";
 
// MTP Object Formats
const char msgUndefined_Firmware [] PROGMEM = "Undefined_Firmware";
const char msgWindows_Image_Format [] PROGMEM = "Windows_Image_Format";
const char msgUndefined_Audio [] PROGMEM = "Undefined_Audio";
const char msgWMA [] PROGMEM = "WMA";
const char msgOGG [] PROGMEM = "OGG";
const char msgAAC [] PROGMEM = "AAC";
const char msgAudible [] PROGMEM = "Audible";
const char msgFLAC [] PROGMEM = "FLAC";
const char msgUndefined_Video [] PROGMEM = "Undefined_Video";
const char msgWMV [] PROGMEM = "WMV";
const char msgMP4_Container [] PROGMEM = "MP4_Container";
const char msgMP2 [] PROGMEM = "MP2";
const char msg3GP_Container [] PROGMEM = "3GP_Container";
 
 
class PTPObjInfoParser : public PTPReadParser
{
static const char* acNames[];
static const char* imNames[];
 
MultiValueBuffer theBuffer;
uint32_t varBuffer;
uint8_t nStage;
 
MultiByteValueParser valueParser;
PTPListParser arrayParser;
 
static void PrintChar(MultiValueBuffer *p)
{
if (((unsigned char*)p->pValue)[0])
Serial.print(((unsigned char*)p->pValue)[0]);
};
void PrintFormat(uint16_t op);
 
public:
PTPObjInfoParser() : nStage(0) { theBuffer.pValue = (uint8_t*)&varBuffer; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __PTPOBJINFOPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PTPCapture/PTPCapture.pde
0,0 → 1,71
#include <inttypes.h>
#include <avr/pgmspace.h>
 
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
 
#define DEV_ADDR 1
 
// Nikon CoolPix P100
#define DATA_IN_EP 2
#define DATA_OUT_EP 1
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
// Canon
//#define DATA_IN_EP 1
//#define DATA_OUT_EP 2
//#define INTERRUPT_EP 3
//#define CONFIG_NUM 1
 
#define MAX_USB_STRING_LEN 64
 
class CamStateHandlers : public PTPStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
 
PTP Ptp(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
{
stateConnected = true;
Ptp.CaptureImage();
delay(1000);
}
}
 
void setup() {
Serial.begin( 115200 );
Serial.println("Start");
Ptp.Setup();
delay( 200 );
}
 
void loop()
{
Ptp.Task();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PTPDevInfo/PTPDevInfo.pde
0,0 → 1,78
#include <inttypes.h>
#include <avr/pgmspace.h>
 
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Max_LCD.h>
#include <Usb.h>
 
#include <ptp.h>
#include <ptpdebug.h>
#include "devinfoparser.h"
 
#define DEV_ADDR 1
 
// Canon EOS 400D
#define DATA_IN_EP 1
#define DATA_OUT_EP 2
#define INTERRUPT_EP 3
#define CONFIG_NUM 1
 
//Nikon Coolpix L110, P100
//#define DATA_IN_EP 2
//#define DATA_OUT_EP 1
 
void setup();
void loop();
 
class CamStateHandlers : public PTPStateHandlers
{
bool stateConnected;
public:
CamStateHandlers() : stateConnected(false) {};
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
} CamStates;
 
PTP Ptp(DEV_ADDR, DATA_IN_EP, DATA_OUT_EP, INTERRUPT_EP, CONFIG_NUM, &CamStates);
 
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
if (stateConnected)
{
stateConnected = false;
Notify(PSTR("Camera disconnected\r\n"));
}
}
 
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
if (!stateConnected)
{
stateConnected = true;
{
HexDump dmp;
Ptp.GetDeviceInfo(&dmp);
Notify(PSTR("\n"));
}
{
DevInfoParser prs;
Ptp.GetDeviceInfo(&prs);
}
}
}
 
void setup() {
Serial.begin( 115200 );
Serial.println("Start");
Ptp.Setup();
delay( 200 );
}
 
void loop() {
Ptp.Task();
}
 
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PTPDevInfo/devinfoparser.cpp
0,0 → 1,714
#include "devinfoparser.h"
 
const char* DevInfoParser::ptpopNames[] PROGMEM =
{
msgUndefined,
msgGetDeviceInfo,
msgOpenSession,
msgCloseSession,
msgGetStorageIDs,
msgGetStorageInfo,
msgGetNumObjects,
msgGetObjectHandles,
msgGetObjectInfo,
msgGetObject,
msgGetThumb,
msgDeleteObject,
msgSendObjectInfo,
msgSendObject,
msgInitiateCapture,
msgFormatStore,
msgResetDevice,
msgSelfTest,
msgSetObjectProtection,
msgPowerDown,
msgGetDevicePropDesc,
msgGetDevicePropValue,
msgSetDevicePropValue,
msgResetDevicePropValue,
msgTerminateOpenCapture,
msgMoveObject,
msgCopyObject,
msgGetPartialObject,
msgInitiateOpenCapture
};
 
const char* DevInfoParser::mtpopNames[] PROGMEM =
{
msgUndefined,
msgGetObjectPropsSupported,
msgGetObjectPropDesc,
msgGetObjectPropValue,
msgSetObjectPropValue,
msgGetObjectPropList,
msgSetObjectPropList,
msgGetInterdependentPropDesc,
msgSendObjectPropList
};
 
const char* DevInfoParser::ptpevNames[] PROGMEM =
{
msgUndefined,
msgCancelTransaction,
msgObjectAdded,
msgObjectRemoved,
msgStoreAdded,
msgStoreRemoved,
msgDevicePropChanged,
msgObjectInfoChanged,
msgDeviceInfoChanged,
msgRequestObjectTransfer,
msgStoreFull,
msgDeviceReset,
msgStorageInfoChanged,
msgCaptureComplete,
msgUnreportedStatus
};
 
const char* DevInfoParser::mtpevNames[] PROGMEM =
{
msgUndefined,
msgObjectPropChanged,
msgObjectPropDescChanged,
msgObjectReferencesChanged
};
 
const char* DevInfoParser::ptpprNames[] PROGMEM =
{
msgUndefined,
msgBatteryLevel,
msgFunctionalMode,
msgImageSize,
msgCompressionSetting,
msgWhiteBalance,
msgRGBGain,
msgFNumber,
msgFocalLength,
msgFocusDistance,
msgFocusMode,
msgExposureMeteringMode,
msgFlashMode,
msgExposureTime,
msgExposureProgramMode,
msgExposureIndex,
msgExposureBiasCompensation,
msgDateTime,
msgCaptureDelay,
msgStillCaptureMode,
msgContrast,
msgSharpness,
msgDigitalZoom,
msgEffectMode,
msgBurstNumber,
msgBurstInterval,
msgTimelapseNumber,
msgTimelapseInterval,
msgFocusMeteringMode,
msgUploadURL,
msgArtist,
msgCopyrightInfo
};
 
const char* DevInfoParser::mtpprNames[] PROGMEM =
{
msgUndefined,
msgSynchronization_Partner,
msgDevice_Friendly_Name,
msgVolume,
msgSupportedFormatsOrdered,
msgDeviceIcon,
msgSession_Initiator_Version_Info,
msgPerceived_Device_Type,
msgPlayback_Rate,
msgPlayback_Object,
msgPlayback_Container
};
 
const char* DevInfoParser::acNames[] PROGMEM =
{
msgUndefined,
msgAssociation,
msgScript,
msgExecutable,
msgText,
msgHTML,
msgDPOF,
msgAIFF,
msgWAV,
msgMP3,
msgAVI,
msgMPEG,
msgASF,
msgQT
};
 
const char* DevInfoParser::imNames[] PROGMEM =
{
msgUndefined,
msgEXIF_JPEG,
msgTIFF_EP,
msgFlashPix,
msgBMP,
msgCIFF,
msgUndefined_0x3806,
msgGIF,
msgJFIF,
msgPCD,
msgPICT,
msgPNG,
msgUndefined_0x380C,
msgTIFF,
msgTIFF_IT,
msgJP2,
msgJPX,
};
 
DevInfoParser::DevInfoParser() :
nStage(0),
strByteCountDown(0),
waStage(0),
waLenCountDown(0),
waByteCountDown(0),
fmByteCountDown(0),
idVendor(0)
{
for (uint8_t i=0; i<4; i++) waLen[i];
waWord.word = 0;
fmBytes[0] = 0;
fmBytes[1] = 0;
};
 
bool DevInfoParser::PrintFunctMode(uint8_t **pp, uint16_t &count)
{
if (!count)
return true;
 
if (!fmByteCountDown)
fmByteCountDown = 2;
 
for (; fmByteCountDown && count; fmByteCountDown--, count--, (*pp)++)
fmBytes[fmByteCountDown & 1] = (**pp);
 
if (fmByteCountDown)
return false;
 
Notify(PSTR("Func.Mode:\t0x")); Serial.println((uint16_t)fmBytes, HEX);
return true;
}
 
void DevInfoParser::PrintOperation(uint16_t op)
{
bool bResult = false;
 
Serial.print(op, HEX);
Notify(msgTab);
 
switch (((op >> 8) & 0xFF))
{
case 0x10:
bResult = PrintPTPOperation(op);
break;
case 0x98:
bResult = PrintMTPOperation(op);
break;
default:
switch (idVendor)
{
case PTP_VENDOR_MICROSOFT:
case PTP_VENDOR_CANON:
if ((bResult = PrintPSOperation(op)))
break;
bResult = PrintEOSOperation(op);
break;
default:
Notify(msgVendorDefined);
bResult = true;
}
}
if (!bResult)
Notify(msgVendorDefined);
Notify(msgCRLF);
}
 
bool DevInfoParser::PrintPTPOperation(uint16_t op)
{
if ((op & 0xFF) <= (PTP_OC_InitiateOpenCapture & 0xFF))
{
Notify((char*)pgm_read_word(&ptpopNames[(op & 0xFF)]));
return true;
}
return false;
}
 
bool DevInfoParser::PrintMTPOperation(uint16_t op)
{
if ((op & 0xFF) <= (MTP_OC_SendObjectPropList & 0xFF))
Notify((char*)pgm_read_word(&mtpopNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OC_GetObjectReferences:
Notify(msgGetObjectReferences);
break;
case MTP_OC_SetObjectReferences:
Notify(msgSetObjectReferences);
break;
case MTP_OC_Skip:
Notify(msgSkip);
break;
default:
return false;
}
}
return true;
}
 
bool DevInfoParser::PrintPSOperation(uint16_t op)
{
const char* msg;
 
switch (op)
{
case PTP_OC_PS_GetObjectSize:
msg = msgPS_GetObjectSize;
break;
case PTP_OC_PS_StartShootingMode:
msg = msgPS_StartShootingMode;
break;
case PTP_OC_PS_EndShootingMode:
msg = msgPS_EndShootingMode;
break;
case PTP_OC_PS_ViewfinderOn:
msg = msgPS_ViewfinderOn;
break;
case PTP_OC_PS_ViewfinderOff:
msg = msgPS_ViewfinderOff;
break;
case PTP_OC_PS_ReflectChanges:
msg = msgPS_ReflectChanges;
break;
case PTP_OC_PS_CheckEvent:
msg = msgPS_CheckEvent;
break;
case PTP_OC_PS_FocusLock:
msg = msgPS_FocusLock;
break;
case PTP_OC_PS_FocusUnlock:
msg = msgPS_FocusUnlock;
break;
case PTP_OC_PS_InitiateCaptureInMemory:
msg = msgPS_InitiateCaptureInMemory;
break;
case PTP_OC_PS_GetPartialObject:
msg = msgPS_GetPartialObject;
break;
case PTP_OC_PS_GetViewfinderImage:
msg = msgPS_GetViewfinderImage;
break;
case PTP_OC_PS_GetChanges:
msg = msgPS_GetChanges;
break;
case PTP_OC_PS_GetFolderEntries:
msg = msgPS_GetFolderEntries;
break;
default:
return false;
}
Notify(msg);
return true;
}
 
bool DevInfoParser::PrintEOSOperation(uint16_t op)
{
const char *msg;
switch (op)
{
case PTP_OC_EOS_GetStorageIDs:
msg = msgEOS_GetStorageIDs;
break;
case PTP_OC_EOS_GetStorageInfo:
msg = msgEOS_GetStorageInfo;
break;
case PTP_OC_EOS_GetObject:
msg = msgEOS_GetObject;
break;
case PTP_OC_EOS_GetDeviceInfo:
msg = msgEOS_GetDeviceInfo;
break;
case PTP_OC_EOS_GetObjectIDs:
msg = msgEOS_GetObjectIDs;
break;
case PTP_OC_EOS_Capture:
msg = msgEOS_Capture;
break;
case PTP_OC_EOS_SetDevicePropValue:
msg = msgEOS_SetDevicePropValue;
break;
case PTP_OC_EOS_SetPCConnectMode:
msg = msgEOS_SetPCConnectMode;
break;
case PTP_OC_EOS_SetExtendedEventInfo:
msg = msgEOS_SetExtendedEventInfo;
break;
case PTP_OC_EOS_GetEvent:
msg = msgEOS_GetEvent;
break;
case PTP_OC_EOS_GetLiveViewPicture:
msg = msgEOS_GetLiveViewPicture;
break;
case PTP_OC_EOS_MoveFocus:
msg = msgEOS_MoveFocus;
break;
default:
return false;
}
Notify(msg);
return true;
}
 
void DevInfoParser::PrintEvent(uint16_t op)
{
Serial.print(op, HEX);
Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x40) && ((op & 0xFF) <= (PTP_EC_UnreportedStatus & 0xFF)))
Notify((char*)pgm_read_word(&ptpevNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0xC8) && ((op & 0xFF) <= (MTP_EC_ObjectReferencesChanged & 0xFF)))
Notify((char*)pgm_read_word(&mtpevNames[(op & 0xFF)]));
else
Notify(msgVendorDefined);
Notify(msgCRLF);
}
 
void DevInfoParser::PrintDevProp(uint16_t op)
{
Serial.print(op, HEX);
Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x50) && ((op & 0xFF) <= (PTP_DPC_CopyrightInfo & 0xFF)))
Notify((char*)pgm_read_word(&ptpprNames[(op & 0xFF)]));
else
if (((op >> 8) & 0xFF) == 0xD4)
{
if ( (op & 0xFF) <= (MTP_DPC_Perceived_Device_Type & 0xFF) )
Notify((char*)pgm_read_word(&mtpprNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_DPC_Playback_Rate:
Notify(msgPlayback_Rate);
break;
case MTP_DPC_Playback_Object:
Notify(msgPlayback_Object);
break;
case MTP_DPC_Playback_Container:
Notify(msgPlayback_Container);
break;
default:
Notify(msgVendorDefined);
}
}
}
else
Notify(msgVendorDefined);
 
Notify(msgCRLF);
}
 
void DevInfoParser::PrintFormat(uint16_t op)
{
Serial.print(op, HEX);
Notify(msgTab);
 
if ((((op >> 8) & 0xFF) == 0x30) && ((op & 0xFF) <= (PTP_OFC_QT & 0xFF)))
Notify((char*)pgm_read_word(&acNames[(op & 0xFF)]));
else
if ((((op >> 8) & 0xFF) == 0x38) && ((op & 0xFF) <= (PTP_OFC_JPX & 0xFF)))
Notify((char*)pgm_read_word(&imNames[(op & 0xFF)]));
else
{
switch (op)
{
case MTP_OFC_Undefined_Firmware:
Notify(msgUndefined_Firmware);
break;
case MTP_OFC_Windows_Image_Format:
Notify(msgWindows_Image_Format);
break;
case MTP_OFC_Undefined_Audio:
Notify(msgUndefined_Audio);
break;
case MTP_OFC_WMA:
Notify(msgWMA);
break;
case MTP_OFC_OGG:
Notify(msgOGG);
break;
case MTP_OFC_AAC:
Notify(msgAAC);
break;
case MTP_OFC_Audible:
Notify(msgAudible);
break;
case MTP_OFC_FLAC:
Notify(msgFLAC);
break;
case MTP_OFC_Undefined_Video:
Notify(msgUndefined_Video);
break;
case MTP_OFC_WMV:
Notify(msgWMV);
break;
case MTP_OFC_MP4_Container:
Notify(msgMP4_Container);
break;
case MTP_OFC_MP2:
Notify(msgMP2);
break;
case MTP_OFC_3GP_Container:
Notify(msg3GP_Container);
break;
default:
Notify(msgVendorDefined);
}
}
Notify(msgCRLF);
}
 
bool DevInfoParser::PrintVendor(uint8_t **pp, uint16_t &count)
{
Notify(PSTR("Vendor Ext. ID:\t0x"));
Serial.print(*((uint32_t*)*pp),HEX);
 
switch (*((uint32_t*)*pp))
{
case PTP_VENDOR_EASTMAN_KODAK:
Notify(PSTR("(Eastman Kodak)"));
break;
case PTP_VENDOR_SEIKO_EPSON:
Notify(PSTR("(Seiko Epson)"));
break;
case PTP_VENDOR_AGILENT:
Notify(PSTR("(Agilent)"));
break;
case PTP_VENDOR_POLAROID:
Notify(PSTR("(Polaroid)"));
break;
case PTP_VENDOR_AGFA_GEVAERT:
Notify(PSTR("(AGFA)"));
break;
case PTP_VENDOR_MICROSOFT:
Notify(PSTR("(Microsoft)"));
break;
case PTP_VENDOR_EQUINOX:
Notify(PSTR("(Equinox)"));
break;
case PTP_VENDOR_VIEWQUEST:
Notify(PSTR("(ViewQuest)"));
break;
case PTP_VENDOR_STMICROELECTRONICS:
Notify(PSTR("(StMicroelectronics)"));
break;
case PTP_VENDOR_NIKON:
Notify(PSTR("(Nikon)"));
break;
case PTP_VENDOR_CANON:
Notify(PSTR("(Canon)"));
break;
case PTP_VENDOR_FOTONATION:
Notify(PSTR("(FotoNation)"));
break;
case PTP_VENDOR_PENTAX:
Notify(PSTR("(Pentax)"));
break;
case PTP_VENDOR_FUJI:
Notify(PSTR("(Fuji)"));
break;
default:
Notify(PSTR("(Unknown)"));
}
Notify(msgCRLF);
*pp += 4; count -= 4;
return true;
}
 
bool DevInfoParser::PrintString(uint8_t **pp, uint16_t &count)
{
if (!count)
return true;
 
if ( !strByteCountDown )
{
if ( !(**pp) )
{
(*pp) ++;
count --;
return true;
}
strByteCountDown = ((**pp) << 1);
(*pp) ++;
count --;
}
 
for (; strByteCountDown && count; strByteCountDown--, count--, (*pp)++)
{
if ( !(strByteCountDown & 1) && ((**pp) > 0))
Serial.print((unsigned char)(**pp));
}
return (strByteCountDown == 0);
}
 
bool DevInfoParser::PrintWordArray(uint8_t **pp, uint16_t &count, PRINTFUNC pf = NULL)
{
switch (waStage)
{
case 0:
if (!waLenCountDown)
waLenCountDown = 4;
 
for (; waLenCountDown && count; waLenCountDown--, count--, (*pp)++)
waLen[4-waLenCountDown] = (**pp);
 
if (waLenCountDown)
return false;
waStage ++;
 
case 1:
for (waByteCountDown = (waByteCountDown) ? waByteCountDown : ((*((uint32_t*)waLen) << 1));
waByteCountDown && count; waByteCountDown--, count--, (*pp)++)
{
if (waByteCountDown & 1)
{
waWord.bytes[1] = (**pp);
 
if ( pf )
(this->*pf)(waWord.word);
else
Serial.println (waWord.word, HEX);
}
else
waWord.bytes[0] = (**pp);
}
if (waByteCountDown)
return false;
}
waStage = 0;
return true;
}
 
void DevInfoParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t count = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
switch (nStage)
{
case 0:
// Skip PTP container header
p += 12; count -=12;
nStage ++;
case 1:
Notify(PSTR("\r\nStd.Ver.:\t0x")); Serial.println(*(uint16_t*)p, DEC);
p += 2; count -= 2;
 
idVendor = *((uint32_t*)p);
PrintVendor(&p, count);
 
Notify(PSTR("\r\nVend.Ext.Ver.:\t0x")); Serial.println(*((uint16_t*)p), HEX);
p += 2; count -=2;
 
nStage ++;
case 2:
// Vendor extension description
//if (*p)
{
if (!PrintString(&p, count))
return;
 
Notify(msgCRLF);
}
nStage ++;
case 3:
// Functional mode
if (!PrintFunctMode(&p, count))
return;
nStage ++;
case 4:
// Operations Supported
Notify(PSTR("\r\nOperations supported:\r\n"));
nStage++;
case 5:
if (!PrintWordArray(&p, count, &DevInfoParser::PrintOperation))
return;
nStage ++;
case 6:
// Events Supported
Notify(PSTR("\r\nEvents supported:\r\n"));
nStage ++;
case 7:
if (!PrintWordArray(&p, count, &DevInfoParser::PrintEvent))
return;
nStage ++;
case 8:
// Device Properties Supported
Notify(PSTR("\r\nDevice properties supported:\r\n"));
nStage ++;
case 9:
if (!PrintWordArray(&p, count, &DevInfoParser::PrintDevProp))
return;
nStage ++;
case 10:
// Capture formats
Notify(PSTR("\r\nCapture formats:\r\n"));
nStage ++;
case 11:
if (!PrintWordArray(&p, count, &DevInfoParser::PrintFormat))
return;
nStage ++;
case 12:
// Image Formats
Notify(PSTR("\r\nImage Formats:\r\n"));
nStage ++;
case 13:
if (!PrintWordArray(&p, count, &DevInfoParser::PrintFormat))
return;
nStage ++;
case 14:
// Manufacturer
Notify(PSTR("\r\nManufacturer:\t"));
nStage ++;
case 15:
if (!PrintString(&p, count))
return;
nStage ++;
case 16:
// Model
Notify(PSTR("\r\nModel:\t\t"));
nStage ++;
case 17:
if (!PrintString(&p, count))
return;
nStage ++;
case 18:
// Device version
Notify(PSTR("\r\nDevice ver.:\t"));
nStage ++;
case 19:
if (!PrintString(&p, count))
return;
nStage ++;
case 20:
// Serial number
Notify(PSTR("\r\nSerial num.:\t"));
nStage ++;
case 21:
if (!PrintString(&p, count))
return;
Notify(PSTR("\r\n\r\n"));
//nStage = 0;
}
}
/C-OSD/arducam-osd/libraries/PTPCamera/examples/PTPDevInfo/devinfoparser.h
0,0 → 1,295
#ifndef __DEVINFOPARSER_H__
#define __DEVINFOPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <../ptp/ptpconst.h>
#include <../ptp/mtpconst.h>
#include <../ptp/ptp.h>
 
const char msgVendorDefined [] PROGMEM = "Vendor defined";
const char msgTab [] PROGMEM = "\t";
const char msgCRLF [] PROGMEM = "\r\n";
 
// PTP Operations
const char msgUndefined [] PROGMEM = "Undefined";
const char msgGetDeviceInfo [] PROGMEM = "GetDeviceInfo";
const char msgOpenSession [] PROGMEM = "OpenSession";
const char msgCloseSession [] PROGMEM = "CloseSession";
const char msgGetStorageIDs [] PROGMEM = "GetStorageIDs";
const char msgGetStorageInfo [] PROGMEM = "GetStorageInfo";
const char msgGetNumObjects [] PROGMEM = "GetNumObjects";
const char msgGetObjectHandles [] PROGMEM = "GetObjectHandles";
const char msgGetObjectInfo [] PROGMEM = "GetObjectInfo";
const char msgGetObject [] PROGMEM = "GetObject";
const char msgGetThumb [] PROGMEM = "GetThumb";
const char msgDeleteObject [] PROGMEM = "DeleteObject";
const char msgSendObjectInfo [] PROGMEM = "SendObjectInfo";
const char msgSendObject [] PROGMEM = "SendObject";
const char msgInitiateCapture [] PROGMEM = "InitiateCapture";
const char msgFormatStore [] PROGMEM = "FormatStore";
const char msgResetDevice [] PROGMEM = "ResetDevice";
const char msgSelfTest [] PROGMEM = "SelfTest";
const char msgSetObjectProtection [] PROGMEM = "SetObjectProtection";
const char msgPowerDown [] PROGMEM = "PowerDown";
const char msgGetDevicePropDesc [] PROGMEM = "GetDevicePropDesc";
const char msgGetDevicePropValue [] PROGMEM = "GetDevicePropValue";
const char msgSetDevicePropValue [] PROGMEM = "SetDevicePropValue";
const char msgResetDevicePropValue [] PROGMEM = "ResetDevicePropValue";
const char msgTerminateOpenCapture [] PROGMEM = "TerminateOpenCapture";
const char msgMoveObject [] PROGMEM = "MoveObject";
const char msgCopyObject [] PROGMEM = "CopyObject";
const char msgGetPartialObject [] PROGMEM = "GetPartialObject";
const char msgInitiateOpenCapture [] PROGMEM = "InitiateOpenCapture";
 
// MTP Operations
const char msgGetObjectPropsSupported [] PROGMEM = "GetObjectPropsSupported";
const char msgGetObjectPropDesc [] PROGMEM = "GetObjectPropDesc";
const char msgGetObjectPropValue [] PROGMEM = "GetObjectPropValue";
const char msgSetObjectPropValue [] PROGMEM = "SetObjectPropValue";
const char msgGetObjectPropList [] PROGMEM = "GetObjectPropList";
const char msgSetObjectPropList [] PROGMEM = "SetObjectPropList";
const char msgGetInterdependentPropDesc [] PROGMEM = "GetInterdependentPropDesc";
const char msgSendObjectPropList [] PROGMEM = "SendObjectPropList";
const char msgGetObjectReferences [] PROGMEM = "GetObjectReferences";
const char msgSetObjectReferences [] PROGMEM = "SetObjectReferences";
const char msgSkip [] PROGMEM = "Skip";
 
// Canon EOS Operations
const char msgEOS_GetStorageIDs [] PROGMEM = "EOS_GetStorageIDs";
const char msgEOS_GetStorageInfo [] PROGMEM = "EOS_GetStorageInfo";
const char msgEOS_GetObject [] PROGMEM = "EOS_GetObject";
const char msgEOS_GetDeviceInfo [] PROGMEM = "EOS_GetDeviceInfo";
const char msgEOS_GetObjectIDs [] PROGMEM = "EOS_GetObjectIDs";
const char msgEOS_Capture [] PROGMEM = "EOS_Capture";
const char msgEOS_SetDevicePropValue [] PROGMEM = "EOS_SetDevicePropValue";
const char msgEOS_SetPCConnectMode [] PROGMEM = "EOS_SetPCConnectMode";
const char msgEOS_SetExtendedEventInfo [] PROGMEM = "EOS_SetExtendedEventInfo";
const char msgEOS_GetEvent [] PROGMEM = "EOS_GetEvent";
const char msgEOS_GetLiveViewPicture [] PROGMEM = "EOS_GetLiveViewPicture";
const char msgEOS_MoveFocus [] PROGMEM = "EOS_MoveFocus";
 
// Canon PowerShot Operations
const char msgPS_GetObjectSize [] PROGMEM = "PS_GetObjectSize";
const char msgPS_StartShootingMode [] PROGMEM = "PS_StartShootingMode";
const char msgPS_EndShootingMode [] PROGMEM = "PS_EndShootingMode";
const char msgPS_ViewfinderOn [] PROGMEM = "PS_ViewfinderOn";
const char msgPS_ViewfinderOff [] PROGMEM = "PS_ViewfinderOff";
const char msgPS_ReflectChanges [] PROGMEM = "PS_ReflectChanges";
const char msgPS_CheckEvent [] PROGMEM = "PS_CheckEvent";
const char msgPS_FocusLock [] PROGMEM = "PS_FocusLock";
const char msgPS_FocusUnlock [] PROGMEM = "PS_FocusUnlock";
const char msgPS_InitiateCaptureInMemory [] PROGMEM = "PS_InitiateCaptureInMemory";
const char msgPS_GetPartialObject [] PROGMEM = "PS_GetPartialObject";
const char msgPS_GetViewfinderImage [] PROGMEM = "PS_GetViewfinderImage";
const char msgPS_GetChanges [] PROGMEM = "PS_GetChanges";
const char msgPS_GetFolderEntries [] PROGMEM = "PS_GetFolderEntries";
 
 
// PTP Events
const char msgCancelTransaction [] PROGMEM = "CancelTransaction";
const char msgObjectAdded [] PROGMEM = "ObjectAdded";
const char msgObjectRemoved [] PROGMEM = "ObjectRemoved";
const char msgStoreAdded [] PROGMEM = "StoreAdded";
const char msgStoreRemoved [] PROGMEM = "StoreRemoved";
const char msgDevicePropChanged [] PROGMEM = "DevicePropChanged";
const char msgObjectInfoChanged [] PROGMEM = "ObjectInfoChanged";
const char msgDeviceInfoChanged [] PROGMEM = "DeviceInfoChanged";
const char msgRequestObjectTransfer [] PROGMEM = "RequestObjectTransfer";
const char msgStoreFull [] PROGMEM = "StoreFull";
const char msgDeviceReset [] PROGMEM = "DeviceReset";
const char msgStorageInfoChanged [] PROGMEM = "StorageInfoChanged";
const char msgCaptureComplete [] PROGMEM = "CaptureComplete";
const char msgUnreportedStatus [] PROGMEM = "UnreportedStatus";
 
// MTP Events
const char msgObjectPropChanged [] PROGMEM = "ObjectPropChanged";
const char msgObjectPropDescChanged [] PROGMEM = "ObjectPropDescChanged";
const char msgObjectReferencesChanged [] PROGMEM = "ObjectReferencesChanged";
 
// PTP Device properties
const char msgBatteryLevel [] PROGMEM = "BatteryLevel";
const char msgFunctionalMode [] PROGMEM = "FunctionalMode";
const char msgImageSize [] PROGMEM = "ImageSize";
const char msgCompressionSetting [] PROGMEM = "CompressionSetting";
const char msgWhiteBalance [] PROGMEM = "WhiteBalance";
const char msgRGBGain [] PROGMEM = "RGBGain";
const char msgFNumber [] PROGMEM = "FNumber";
const char msgFocalLength [] PROGMEM = "FocalLength";
const char msgFocusDistance [] PROGMEM = "FocusDistance";
const char msgFocusMode [] PROGMEM = "FocusMode";
const char msgExposureMeteringMode [] PROGMEM = "ExposureMeteringMode";
const char msgFlashMode [] PROGMEM = "FlashMode";
const char msgExposureTime [] PROGMEM = "ExposureTime";
const char msgExposureProgramMode [] PROGMEM = "ExposureProgramMode";
const char msgExposureIndex [] PROGMEM = "ExposureIndex";
const char msgExposureBiasCompensation [] PROGMEM = "ExposureBiasCompensation";
const char msgDateTime [] PROGMEM = "DateTime";
const char msgCaptureDelay [] PROGMEM = "CaptureDelay";
const char msgStillCaptureMode [] PROGMEM = "StillCaptureMode";
const char msgContrast [] PROGMEM = "Contrast";
const char msgSharpness [] PROGMEM = "Sharpness";
const char msgDigitalZoom [] PROGMEM = "DigitalZoom";
const char msgEffectMode [] PROGMEM = "EffectMode";
const char msgBurstNumber [] PROGMEM = "BurstNumber";
const char msgBurstInterval [] PROGMEM = "BurstInterval";
const char msgTimelapseNumber [] PROGMEM = "TimelapseNumber";
const char msgTimelapseInterval [] PROGMEM = "TimelapseInterval";
const char msgFocusMeteringMode [] PROGMEM = "FocusMeteringMode";
const char msgUploadURL [] PROGMEM = "UploadURL";
const char msgArtist [] PROGMEM = "Artist";
const char msgCopyrightInfo [] PROGMEM = "CopyrightInfo";
 
// MTP Device properties
const char msgSynchronization_Partner [] PROGMEM = "Synchronization_Partner";
const char msgDevice_Friendly_Name [] PROGMEM = "Device_Friendly_Name";
const char msgVolume [] PROGMEM = "Volume";
const char msgSupportedFormatsOrdered [] PROGMEM = "SupportedFormatsOrdered";
const char msgDeviceIcon [] PROGMEM = "DeviceIcon";
const char msgSession_Initiator_Version_Info [] PROGMEM = "Session_Initiator_Version_Info";
const char msgPerceived_Device_Type [] PROGMEM = "Perceived_Device_Type";
const char msgPlayback_Rate [] PROGMEM = "Playback_Rate";
const char msgPlayback_Object [] PROGMEM = "Playback_Object";
const char msgPlayback_Container [] PROGMEM = "Playback_Container";
 
// Ancillary formats
const char msgAssociation [] PROGMEM = "Association";
const char msgScript [] PROGMEM = "Script";
const char msgExecutable [] PROGMEM = "Executable";
const char msgText [] PROGMEM = "Text";
const char msgHTML [] PROGMEM = "HTML";
const char msgDPOF [] PROGMEM = "DPOF";
const char msgAIFF [] PROGMEM = "AIFF";
const char msgWAV [] PROGMEM = "WAV";
const char msgMP3 [] PROGMEM = "MP3";
const char msgAVI [] PROGMEM = "AVI";
const char msgMPEG [] PROGMEM = "MPEG";
const char msgASF [] PROGMEM = "ASF";
const char msgQT [] PROGMEM = "QT";
 
// Image formats
const char msgEXIF_JPEG [] PROGMEM = "EXIF_JPEG";
const char msgTIFF_EP [] PROGMEM = "TIFF_EP";
const char msgFlashPix [] PROGMEM = "FlashPix";
const char msgBMP [] PROGMEM = "BMP";
const char msgCIFF [] PROGMEM = "CIFF";
const char msgUndefined_0x3806 [] PROGMEM = "Undefined_0x3806";
const char msgGIF [] PROGMEM = "GIF";
const char msgJFIF [] PROGMEM = "JFIF";
const char msgPCD [] PROGMEM = "PCD";
const char msgPICT [] PROGMEM = "PICT";
const char msgPNG [] PROGMEM = "PNG";
const char msgUndefined_0x380C [] PROGMEM = "Undefined_0x380C";
const char msgTIFF [] PROGMEM = "TIFF";
const char msgTIFF_IT [] PROGMEM = "TIFF_IT";
const char msgJP2 [] PROGMEM = "JP2";
const char msgJPX [] PROGMEM = "JPX";
 
// MTP Object Formats
const char msgUndefined_Firmware [] PROGMEM = "Undefined_Firmware";
const char msgWindows_Image_Format [] PROGMEM = "Windows_Image_Format";
const char msgUndefined_Audio [] PROGMEM = "Undefined_Audio";
const char msgWMA [] PROGMEM = "WMA";
const char msgOGG [] PROGMEM = "OGG";
const char msgAAC [] PROGMEM = "AAC";
const char msgAudible [] PROGMEM = "Audible";
const char msgFLAC [] PROGMEM = "FLAC";
const char msgUndefined_Video [] PROGMEM = "Undefined_Video";
const char msgWMV [] PROGMEM = "WMV";
const char msgMP4_Container [] PROGMEM = "MP4_Container";
const char msgMP2 [] PROGMEM = "MP2";
const char msg3GP_Container [] PROGMEM = "3GP_Container";
 
 
// PTP Operation Codes (EOS specific)
#define PTP_OC_EOS_GetStorageIDs 0x9101
#define PTP_OC_EOS_GetStorageInfo 0x9102
#define PTP_OC_EOS_GetObject 0x9107
#define PTP_OC_EOS_GetDeviceInfo 0x9108
#define PTP_OC_EOS_GetObjectIDs 0x9109
#define PTP_OC_EOS_Capture 0x910f
#define PTP_OC_EOS_SetDevicePropValue 0x9110
#define PTP_OC_EOS_SetPCConnectMode 0x9114
#define PTP_OC_EOS_SetExtendedEventInfo 0x9115
#define PTP_OC_EOS_GetEvent 0x9116
#define PTP_OC_EOS_GetLiveViewPicture 0x9153
#define PTP_OC_EOS_MoveFocus 0x9155
 
// PTP Operation Codes (PowerSot specific)
#define PTP_OC_PS_GetObjectSize 0x9001
#define PTP_OC_PS_StartShootingMode 0x9008
#define PTP_OC_PS_EndShootingMode 0x9009
#define PTP_OC_PS_ViewfinderOn 0x900B
#define PTP_OC_PS_ViewfinderOff 0x900C
#define PTP_OC_PS_ReflectChanges 0x900D
#define PTP_OC_PS_CheckEvent 0x9013
#define PTP_OC_PS_FocusLock 0x9014
#define PTP_OC_PS_FocusUnlock 0x9015
#define PTP_OC_PS_InitiateCaptureInMemory 0x901A
#define PTP_OC_PS_GetPartialObject 0x901B
#define PTP_OC_PS_GetViewfinderImage 0x901d
#define PTP_OC_PS_GetChanges 0x9020
#define PTP_OC_PS_GetFolderEntries 0x9021
 
 
 
 
class DevInfoParser : public PTPReadParser
{
static const char* ptpopNames[];
static const char* mtpopNames[];
static const char* ptpevNames[];
static const char* mtpevNames[];
static const char* acNames[];
static const char* imNames[];
static const char* ptpprNames[];
static const char* mtpprNames[];
 
uint8_t nStage;
 
// PrintString variables
uint16_t strByteCountDown;
 
// PrintWordArray variables
uint8_t waStage;
uint8_t waLenCountDown;
uint32_t waByteCountDown;
uint8_t waLen[4];
union
{
uint8_t bytes[2];
uint16_t word;
} waWord;
 
// PrintFunctMode variables
uint8_t fmByteCountDown;
uint8_t fmBytes[2];
 
 
uint16_t idVendor;
 
typedef void (DevInfoParser::*PRINTFUNC)(uint16_t);
 
bool PrintVendor(uint8_t **pp, uint16_t &count);
bool PrintFunctMode(uint8_t **pp, uint16_t &count);
bool PrintString(uint8_t **pp, uint16_t &count);
bool PrintWordArray(uint8_t **pp, uint16_t &count, PRINTFUNC pf);
 
// Print functions for PrintWordArray
void PrintOperation(uint16_t op);
 
bool PrintPTPOperation(uint16_t op);
bool PrintMTPOperation(uint16_t op);
bool PrintPSOperation(uint16_t op);
bool PrintEOSOperation(uint16_t op);
 
void PrintEvent(uint16_t op);
void PrintDevProp(uint16_t op);
void PrintFormat(uint16_t op);
 
public:
DevInfoParser();
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#endif // __DEVINFOPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/gpl2.txt
0,0 → 1,340
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
 
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
 
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
 
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
 
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
 
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
 
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
 
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
 
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
 
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
 
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
 
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
 
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
 
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
 
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
 
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
 
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
 
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
 
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
 
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
 
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
 
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
 
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
 
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
 
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
 
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
 
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
 
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
 
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
 
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
 
NO WARRANTY
 
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
 
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
 
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
 
Also add information on how to contact you by electronic and paper mail.
 
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
 
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
 
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
 
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
 
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
 
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
/C-OSD/arducam-osd/libraries/PTPCamera/mtpconst.h
0,0 → 1,249
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __MTPCONST_H__
#define __MTPCONST_H__
 
#include <stdarg.h>
#include <inttypes.h>
 
// Operation Codes
#define MTP_OC_GetObjectPropsSupported 0x9801
#define MTP_OC_GetObjectPropDesc 0x9802
#define MTP_OC_GetObjectPropValue 0x9803
#define MTP_OC_SetObjectPropValue 0x9804
#define MTP_OC_GetObjectPropList 0x9805
#define MTP_OC_SetObjectPropList 0x9806
#define MTP_OC_GetInterdependentPropDesc 0x9807
#define MTP_OC_SendObjectPropList 0x9808
#define MTP_OC_GetObjectReferences 0x9810
#define MTP_OC_SetObjectReferences 0x9811
#define MTP_OC_Skip 0x9820
 
// Responce Codes
#define MTP_RC_Invalid_ObjectPropCode 0xA801
#define MTP_RC_Invalid_ObjectProp_Format 0xA802
#define MTP_RC_Invalid_ObjectProp_Value 0xA803
#define MTP_RC_Invalid_ObjectReference 0xA804
#define MTP_RC_Group_Not_Supported 0xA805
#define MTP_RC_Invalid_Dataset 0xA806
#define MTP_RC_Specification_By_Group_Unsupported 0xA807
#define MTP_RC_Specification_By_Depth_Unsupported 0xA808
#define MTP_RC_Object_Too_Large 0xA809
#define MTP_RC_ObjectProp_Not_Supported 0xA80A
 
// Event Codes
#define MTP_EC_ObjectPropChanged 0xC801
#define MTP_EC_ObjectPropDescChanged 0xC802
#define MTP_EC_ObjectReferencesChanged 0xC803
 
// Device Property Codes
#define MTP_DPC_Synchronization_Partner 0xD401
#define MTP_DPC_Device_Friendly_Name 0xD402
#define MTP_DPC_Volume 0xD403
#define MTP_DPC_SupportedFormatsOrdered 0xD404
#define MTP_DPC_DeviceIcon 0xD405
#define MTP_DPC_Session_Initiator_Version_Info 0xD406
#define MTP_DPC_Perceived_Device_Type 0xD407
#define MTP_DPC_Playback_Rate 0xD410
#define MTP_DPC_Playback_Object 0xD411
#define MTP_DPC_Playback_Container 0xD412
 
// Object Formats
#define MTP_OFC_Undefined_Firmware 0xB802
#define MTP_OFC_Windows_Image_Format 0xB881
#define MTP_OFC_Undefined_Audio 0xB900
#define MTP_OFC_WMA 0xB901
#define MTP_OFC_OGG 0xB902
#define MTP_OFC_AAC 0xB903
#define MTP_OFC_Audible 0xB904
#define MTP_OFC_FLAC 0xB906
#define MTP_OFC_Undefined_Video 0xB980
#define MTP_OFC_WMV 0xB981
#define MTP_OFC_MP4_Container 0xB982
#define MTP_OFC_MP2 0xB983
#define MTP_OFC_3GP_Container 0xB984
 
// Object Property Codes
#define MTP_OPC_StorageID 0xDC01
#define MTP_OPC_Object_Format 0xDC02
#define MTP_OPC_Protection_Status 0xDC03
#define MTP_OPC_Object_Size 0xDC04
#define MTP_OPC_Association_Type 0xDC05
#define MTP_OPC_Association_Desc 0xDC06
#define MTP_OPC_Object_File_Name 0xDC07
#define MTP_OPC_Date_Created 0xDC08
#define MTP_OPC_Date_Modified 0xDC09
#define MTP_OPC_Keywords 0xDC0A
#define MTP_OPC_Parent_Object 0xDC0B
#define MTP_OPC_Allowed_Folder_Contents 0xDC0C
#define MTP_OPC_Hidden 0xDC0D
#define MTP_OPC_System_Object 0xDC0E
#define MTP_OPC_Persistent_Unique_Object_Identifier 0xDC41
#define MTP_OPC_SyncID 0xDC42
#define MTP_OPC_Property_Bag 0xDC43
#define MTP_OPC_Name 0xDC44
#define MTP_OPC_Created_By 0xDC45
#define MTP_OPC_Artist 0xDC46
#define MTP_OPC_Date_Authored 0xDC47
#define MTP_OPC_Description 0xDC48
#define MTP_OPC_URL_Reference 0xDC49
#define MTP_OPC_Language-Locale 0xDC4A
#define MTP_OPC_Copyright_Information 0xDC4B
#define MTP_OPC_Source 0xDC4C
#define MTP_OPC_Origin_Location 0xDC4D
#define MTP_OPC_Date_Added 0xDC4E
#define MTP_OPC_Non-Consumable 0xDC4F
#define MTP_OPC_Corrupt/Unplayable 0xDC50
#define MTP_OPC_ProducerSerialNumber 0xDC51
#define MTP_OPC_Representative_Sample_Format 0xDC81
#define MTP_OPC_Representative_Sample_Size 0xDC82
#define MTP_OPC_Representative_Sample_Height 0xDC83
#define MTP_OPC_Representative_Sample_Width 0xDC84
#define MTP_OPC_Representative_Sample_Duration 0xDC85
#define MTP_OPC_Representative_Sample_Data 0xDC86
#define MTP_OPC_Width 0xDC87
#define MTP_OPC_Height 0xDC88
#define MTP_OPC_Duration 0xDC89
#define MTP_OPC_Rating 0xDC8A
#define MTP_OPC_Track 0xDC8B
#define MTP_OPC_Genre 0xDC8C
#define MTP_OPC_Credits 0xDC8D
#define MTP_OPC_Lyrics 0xDC8E
#define MTP_OPC_Subscription_Content_ID 0xDC8F
#define MTP_OPC_Produced_By 0xDC90
#define MTP_OPC_Use_Count 0xDC91
#define MTP_OPC_Skip_Count 0xDC92
#define MTP_OPC_Last_Accessed 0xDC93
#define MTP_OPC_Parental_Rating 0xDC94
#define MTP_OPC_Meta_Genre 0xDC95
#define MTP_OPC_Composer 0xDC96
#define MTP_OPC_Effective_Rating 0xDC97
#define MTP_OPC_Subtitle 0xDC98
#define MTP_OPC_Original_Release_Date 0xDC99
#define MTP_OPC_Album_Name 0xDC9A
#define MTP_OPC_Album_Artist 0xDC9B
#define MTP_OPC_Mood 0xDC9C
#define MTP_OPC_DRM_Status 0xDC9D
#define MTP_OPC_Sub_Description 0xDC9E
#define MTP_OPC_Is_Cropped 0xDCD1
#define MTP_OPC_Is_Colour_Corrected 0xDCD2
#define MTP_OPC_Image_Bit_Depth 0xDCD3
#define MTP_OPC_Fnumber 0xDCD4
#define MTP_OPC_Exposure_Time 0xDCD5
#define MTP_OPC_Exposure_Index 0xDCD6
#define MTP_OPC_Total_BitRate 0xDE91
#define MTP_OPC_Bitrate_Type 0xDE92
#define MTP_OPC_Sample_Rate 0xDE93
#define MTP_OPC_Number_Of_Channels 0xDE94
#define MTP_OPC_Audio_BitDepth 0xDE95
#define MTP_OPC_Scan_Type 0xDE97
#define MTP_OPC_Audio_WAVE_Codec 0xDE99
#define MTP_OPC_Audio_BitRate 0xDE9A
#define MTP_OPC_Video_FourCC_Codec 0xDE9B
#define MTP_OPC_Video_BitRate 0xDE9C
#define MTP_OPC_Frames_Per_Thousand_Seconds 0xDE9D
#define MTP_OPC_KeyFrame_Distance 0xDE9E
#define MTP_OPC_Buffer_Size 0xDE9F
#define MTP_OPC_Encoding_Quality 0xDEA0
#define MTP_OPC_Encoding_Profile 0xDEA1
#define MTP_OPC_Display_Name 0xDCE0
#define MTP_OPC_Body_Text 0xDCE1
#define MTP_OPC_Subject 0xDCE2
#define MTP_OPC_Priority 0xDCE3
#define MTP_OPC_Given_Name 0xDD00
#define MTP_OPC_Middle_Names 0xDD01
#define MTP_OPC_Family_Name 0xDD02
#define MTP_OPC_Prefix 0xDD03
#define MTP_OPC_Suffix 0xDD04
#define MTP_OPC_Phonetic_Given_Name 0xDD05
#define MTP_OPC_Phonetic_Family_Name 0xDD06
#define MTP_OPC_Email_Primary 0xDD07
#define MTP_OPC_Email_Personal_1 0xDD08
#define MTP_OPC_Email_Personal_2 0xDD09
#define MTP_OPC_Email_Business_1 0xDD0A
#define MTP_OPC_Email_Business_2 0xDD0B
#define MTP_OPC_Email_Others 0xDD0C
#define MTP_OPC_Phone_Number_Primary 0xDD0D
#define MTP_OPC_Phone_Number_Personal 0xDD0E
#define MTP_OPC_Phone_Number_Personal_2 0xDD0F
#define MTP_OPC_Phone_Number_Business 0xDD10
#define MTP_OPC_Phone_Number_Business_2 0xDD11
#define MTP_OPC_Phone_Number_Mobile 0xDD12
#define MTP_OPC_Phone_Number_Mobile_2 0xDD13
#define MTP_OPC_Fax_Number_Primary 0xDD14
#define MTP_OPC_Fax_Number_Personal 0xDD15
#define MTP_OPC_Fax_Number_Business 0xDD16
#define MTP_OPC_Pager_Number 0xDD17
#define MTP_OPC_Phone_Number_Others 0xDD18
#define MTP_OPC_Primary_Web_Address 0xDD19
#define MTP_OPC_Personal_Web_Address 0xDD1A
#define MTP_OPC_Business_Web_Address 0xDD1B
#define MTP_OPC_Instant_Messenger_Address 0xDD1C
#define MTP_OPC_Instant_Messenger_Address_2 0xDD1D
#define MTP_OPC_Instant_Messenger_Address_3 0xDD1E
#define MTP_OPC_Postal_Address_Personal_Full 0xDD1F
#define MTP_OPC_Postal_Address_Personal_Line_1 0xDD20
#define MTP_OPC_Postal_Address_Personal_Line_2 0xDD21
#define MTP_OPC_Postal_Address_Personal_City 0xDD22
#define MTP_OPC_Postal_Address_Personal_Region 0xDD23
#define MTP_OPC_Postal_Address_Personal_Postal_Code 0xDD24
#define MTP_OPC_Postal_Address_Personal_Country 0xDD25
#define MTP_OPC_Postal_Address_Business_Full 0xDD26
#define MTP_OPC_Postal_Address_Business_Line_1 0xDD27
#define MTP_OPC_Postal_Address_Business_Line_2 0xDD28
#define MTP_OPC_Postal_Address_Business_City 0xDD29
#define MTP_OPC_Postal_Address_Business_Region 0xDD2A
#define MTP_OPC_Postal_Address_Business_Postal_Code 0xDD2B
#define MTP_OPC_Postal_Address_Business_Country 0xDD2C
#define MTP_OPC_Postal_Address_Other_Full 0xDD2D
#define MTP_OPC_Postal_Address_Other_Line_1 0xDD2E
#define MTP_OPC_Postal_Address_Other_Line_2 0xDD2F
#define MTP_OPC_Postal_Address_Other_City 0xDD30
#define MTP_OPC_Postal_Address_Other_Region 0xDD31
#define MTP_OPC_Postal_Address_Other_Postal_Code 0xDD32
#define MTP_OPC_Postal_Address_Other_Country 0xDD33
#define MTP_OPC_Organization_Name 0xDD34
#define MTP_OPC_Phonetic_Organization_Name 0xDD35
#define MTP_OPC_Role 0xDD36
#define MTP_OPC_Birthdate 0xDD37
#define MTP_OPC_Message_To 0xDD40
#define MTP_OPC_Message_CC 0xDD41
#define MTP_OPC_Message_BCC 0xDD42
#define MTP_OPC_Message_Read 0xDD43
#define MTP_OPC_Message_Received_Time 0xDD44
#define MTP_OPC_Message_Sender 0xDD45
#define MTP_OPC_Activity_Begin_Time 0xDD50
#define MTP_OPC_Activity_End_Time 0xDD51
#define MTP_OPC_Activity_Location 0xDD52
#define MTP_OPC_Activity_Required_Attendees 0xDD54
#define MTP_OPC_Activity_Optional_Attendees 0xDD55
#define MTP_OPC_Activity_Resources 0xDD56
#define MTP_OPC_Activity_Accepted 0xDD57
#define MTP_OPC_Owner 0xDD5D
#define MTP_OPC_Editor 0xDD5E
#define MTP_OPC_Webmaster 0xDD5F
#define MTP_OPC_URL_Source 0xDD60
#define MTP_OPC_URL_Destination 0xDD61
#define MTP_OPC_Time_Bookmark 0xDD62
#define MTP_OPC_Object_Bookmark 0xDD63
#define MTP_OPC_Byte_Bookmark 0xDD64
#define MTP_OPC_Last_Build_Date 0xDD70
#define MTP_OPC_Time_to_Live 0xDD71
#define MTP_OPC_Media_GUID 0xDD72
 
 
#endif // __MTPCONST_H__
/C-OSD/arducam-osd/libraries/PTPCamera/psvaluetitles.h
0,0 → 1,369
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#if !defined(__PSVALUETITLES_H__)
#define __PSVALUETITLES_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <valuelist.h>
 
typedef uint8_t VT_COMPQUALITY;
typedef uint8_t VT_FVFILEFORMAT;
typedef uint8_t VT_IMAGESIZE;
typedef uint8_t VT_STROBE;
typedef uint8_t VT_MODE;
typedef uint8_t VT_APERTURE;
typedef uint8_t VT_EZOOM;
typedef uint8_t VT_WB;
typedef uint8_t VT_SHSPEED;
typedef uint8_t VT_ISO;
typedef uint8_t VT_EXPCOMP;
typedef uint8_t VT_CAMOUTPUT;
 
#define VT_COMPQUALITY_TEXT_LEN 6
#define VT_FVFILEFORMAT_TEXT_LEN 4
#define VT_IMAGESIZE_TEXT_LEN 6
#define VT_STROBE_TEXT_LEN 6
#define VT_MODE_TEXT_LEN 5
#define VT_APT_TEXT_LEN 4
#define VT_EZOOM_TEXT_LEN 4
#define VT_WB_TEXT_LEN 4
#define VT_SHSPEED_TEXT_LEN 5
#define VT_ISO_TEXT_LEN 5
#define VT_EXPCOMP_TEXT_LEN 7
#define VT_CAMOUTPUT_TEXT_LEN 4
 
 
const ValueTitle<VT_CAMOUTPUT, VT_CAMOUTPUT_TEXT_LEN> CamOutputTitles[] PROGMEM =
{
{0x01, {'L', 'C', 'D', 0 } }, // LCD
{0x02, {'O', 'U', 'T', 0 } }, // Video OUT
{0x03, {'O', 'f', 'f', 0 } } // Off
};
 
const ValueTitle<VT_COMPQUALITY, VT_COMPQUALITY_TEXT_LEN> CompQualityTitles[] PROGMEM =
{
{0x00, {'N', '/', 'D', 'e', 'f', 0 } }, // Not Defined
{0x01, {'E', 'c', 'o', 'n', 'o', 0 } }, // Econo
{0x02, {'N', 'o', 'r', 'm', 'l', 0 } }, // Normal
{0x03, {'F', 'i', 'n', 'e', ' ', 0 } }, // Fine
{0x04, {'L', 'o', 's', 's', 'l', 0 } }, // Lossless
{0x05, {'S', 'u', 'p', 'e', 'r', 0 } } // Super Fine
};
 
const ValueTitle<VT_FVFILEFORMAT, VT_FVFILEFORMAT_TEXT_LEN> FullViewFileFormatTitles[] PROGMEM =
{
{0x00, {'N', '/', 'D', 0 } },
{0x01, {'J', 'P', 'G', 0 } },
{0x02, {'C', 'R', 'W', 0 } }
};
 
const ValueTitle<VT_IMAGESIZE, VT_IMAGESIZE_TEXT_LEN> ImageSizeTitles[] PROGMEM =
{
{0x00, {'L', 'a', 'r', 'g', 'e', 0 } }, // Large
{0x01, {'M', 'e', 'd', '-', '1', 0 } }, // Medium 1
{0x02, {'S', 'm', 'a', 'l', 'l', 0 } }, // Small
{0x03, {'M', 'e', 'd', '-', '2', 0 } }, // Medium 2
{0x07, {'M', 'e', 'd', '-', '3', 0 } } // Medium 3
};
 
const ValueTitle<VT_STROBE, VT_STROBE_TEXT_LEN> StrobeTitles[] PROGMEM =
{
{0x00, {'O', 'f', 'f', ' ', ' ', 0 } }, // Off
{0x01, {'A', 'u', 't', 'o', ' ', 0 } }, // Auto
{0x02, {'O', 'n', ' ', ' ', ' ', 0 } }, // On
{0x03, {'R', '/', 'E', 'y', 'e', 0 } }, // Red Eye Suppression
{0x04, {'L', 'o', 'w', ' ', ' ', 0 } }, // Low Speed Synchronization
{0x05, {'A', 'u', 't', 'R', 'E', 0 } }, // Auto + Red Eye Suppression
{0x06, {'O', 'n', 'R', 'E', ' ', 0 } } // On + Red Eye Suppression
};
 
const ValueTitle<VT_MODE, VT_MODE_TEXT_LEN> ModeTitles[] PROGMEM =
{
{0x00, {'A','u','t','o',0} }, // Auto
{0x01, {'P',' ',' ',' ',0} }, // Program
{0x02, {'T','v',' ',' ',0} }, // Tv
{0x03, {'A','v',' ',' ',0} }, // Av
{0x04, {'M',' ',' ',' ',0} }, // Manual
{0x05, {'A','D','E','P',0} }, // A-DEP
{0x05, {'M','D','E','P',0} }, // M-DEP
{0x06, {'B','u','l','b',0} }, // Bulb
{0x80, {'C','a','m','M',0} }, // Camera M
{0x81, {'M','y','C','o',0} }, // My Color
{0x82, {'P','o','r','t',0} }, // Portrait
{0x83, {'L','a','n','d',0} }, // Landscape
{0x84, {'N','g','h','t',0} }, // Night Scene
{0x85, {'F','r','s','t',0} }, // Forest
{0x86, {'S','n','o','w',0} }, // Snow
{0x87, {'B','e','a','c',0} }, // Beach
{0x88, {'F','i','r','e',0} }, // Fireworks
{0x89, {'P','r','t','y',0} }, // Party
{0x8A, {'N','t','S','n',0} }, // Night Snap
{0x8B, {'S','t','c','h',0} }, // Stich
{0x8C, {'M','o','v',' ',0} }, // Movie
{0x8D, {'C','u','s','t',0} }, // Custom
{0x8E, {'I','n','t','r',0} }, // Interval
{0x8F, {'D','M','c','r',0} }, // Digital Macro
{0x90, {'L','g','S','h',0} }, // Long Shutter
{0x91, {'U','W','t','r',0} }, // Underwater
{0x92, {'K','i','d','s',0} }, // Kids And Pets
{0x93, {'F','t','S','h',0} }, // Fast Shutter
{0x94, {'S','l','S','h',0} }, // Slow Shutter
{0x95, {'C','u','s','1',0} }, // Custom 1
{0x96, {'C','u','s','2',0} }, // Custom 2
{0x97, {'N','e','u','t',0} }, // Neutral
{0x98, {'G','r','a','y',0} }, // Gray
{0x99, {'S','e','p','i',0} }, // Sepia
{0x9A, {'V','i','v','d',0} }, // Vivid
{0x9B, {'S','p','r','t',0} }, // Sport
{0x9C, {'M','a','c','r',0} }, // Macro
{0x9D, {'S','M','a','c',0} }, // Super Macro
{0x9E, {'P','a','m','F',0} }, // Pan Focus
{0x9F, {'B','/','W',' ',0} }, // Black & White
{0xA0, {'I','n','h','b',0} } // Flash Inhibit
};
 
const ValueTitle<VT_EZOOM, VT_EZOOM_TEXT_LEN> EZoomTitles[] PROGMEM =
{
{0x00, {'O', 'f', 'f', 0 } },
{0x01, {'x', '2', ' ', 0 } },
{0x02, {'x', '4', ' ', 0 } },
{0x03, {'S', 't', 'h', 0 } }
};
 
const ValueTitle<VT_WB, VT_WB_TEXT_LEN> WbTitles[] PROGMEM =
{
{0, {'A','W','B',0} }, // Auto
{1, {'D','a','y',0} }, // Daylight
{2, {'C','l','d',0} }, // Cloudy
{3, {'T','n','g',0} }, // Tungsteen
{4, {'F','l','r',0} }, // Fluorescent
{6, {'P','r','e',0} }, // Preset
{7, {'F','/','H',0} }, // Fluorescent H
{9, {'T','m','p',0} }, // Color temperature
{10, {'P','C','1',0} }, // Custom White Balance PC-1
{11, {'P','C','2',0} }, // Custom White Balance PC-2
{12, {'P','C','3',0} }, // Custom White Balance PC-3
{13, {'M','i','s',0} }, // Missing number
{14, {'F','/','H',0} }, // Fluorescent H
{0xFF, {'I','n','v',0} } // Invalid
};
 
const ValueTitle<VT_ISO, VT_ISO_TEXT_LEN> IsoTitles[] PROGMEM =
{
{0x00, {'A','u','t','o',0} },
{0x28, {'6',' ',' ',' ',0} },
{0x30, {'1','2',' ',' ',0} },
{0x38, {'2','5',' ',' ',0} },
{0x40, {'5','0',' ',' ',0} },
{0x45, {'8','0',' ',' ',0} },
{0x48, {'1','0','0',' ',0} },
{0x4b, {'1','2','5',' ',0} },
{0x4d, {'1','6','0',' ',0} },
{0x50, {'2','0','0',' ',0} },
{0x53, {'2','5','0',' ',0} },
{0x55, {'3','2','0',' ',0} },
{0x58, {'4','0','0',' ',0} },
{0x5b, {'5','0','0',' ',0} },
{0x5d, {'6','4','0',' ',0} },
{0x60, {'8','0','0',' ',0} },
{0x63, {'1','0','0','0',0} },
{0x65, {'1','2','5','0',0} },
{0x68, {'1','6','0','0',0} },
{0x70, {'3','2','0','0',0} },
{0x78, {'6','4','0','0',0} }
};
 
const ValueTitle<VT_APERTURE, VT_APT_TEXT_LEN> ApertureTitles[] PROGMEM =
{
{0x00, {' ', ' ', '0', 0 } },
{0x08, {' ', ' ', '1', 0 } },
{0x0B, {'1', '.', '1', 0 } },
{0x0C, {'1', '.', '2', 0 } },
{0x0D, {'1', '.', '2', 0 } },
{0x10, {'1', '.', '4', 0 } },
{0x13, {'1', '.', '6', 0 } },
{0x14, {'1', '.', '8', 0 } },
{0x15, {'1', '.', '8', 0 } },
{0x18, {'2', '.', '0', 0 } },
{0x1B, {'2', '.', '2', 0 } },
{0x1C, {'2', '.', '5', 0 } },
{0x1D, {'2', '.', '5', 0 } },
{0x20, {'2', '.', '8', 0 } },
{0x23, {'3', '.', '2', 0 } },
{0x24, {'3', '.', '5', 0 } },
{0x25, {'3', '.', '5', 0 } },
{0x28, {'4', '.', '0', 0 } },
{0x2B, {'4', '.', '5', 0 } },
{0x2C, {'4', '.', '5', 0 } },
{0x2D, {'5', '.', '0', 0 } },
{0x30, {'5', '.', '6', 0 } },
{0x33, {'6', '.', '3', 0 } },
{0x34, {'6', '.', '7', 0 } },
{0x35, {'7', '.', '1', 0 } },
{0x38, {'8', '.', '0', 0 } },
{0x3B, {'9', '.', '0', 0 } },
{0x3C, {'9', '.', '5', 0 } },
{0x3D, {' ', '1', '0', 0 } },
{0x40, {' ', '1', '1', 0 } },
{0x43, {' ', '1', '3', 0 } },
{0x44, {' ', '1', '3', 0 } },
{0x45, {' ', '1', '4', 0 } },
{0x48, {' ', '1', '6', 0 } },
{0x4B, {' ', '1', '8', 0 } },
{0x4C, {' ', '1', '9', 0 } },
{0x4D, {' ', '2', '0', 0 } },
{0x50, {' ', '2', '2', 0 } },
{0x53, {' ', '2', '5', 0 } },
{0x54, {' ', '2', '7', 0 } },
{0x55, {' ', '2', '9', 0 } },
{0x58, {' ', '3', '2', 0 } },
{0x5B, {' ', '3', '6', 0 } },
{0x5C, {' ', '3', '8', 0 } },
{0x5D, {' ', '4', '0', 0 } },
{0x60, {' ', '4', '5', 0 } },
{0x63, {' ', '5', '1', 0 } },
{0x64, {' ', '5', '4', 0 } },
{0x65, {' ', '5', '7', 0 } },
{0x68, {' ', '6', '4', 0 } },
{0x6B, {' ', '7', '2', 0 } },
{0x6C, {' ', '7', '6', 0 } },
{0x6D, {' ', '8', '0', 0 } },
{0x70, {' ', '9', '1', 0 } }
};
 
const ValueTitle<VT_SHSPEED, VT_SHSPEED_TEXT_LEN> ShutterSpeedTitles[] PROGMEM =
{
{0x0c, {'B','u','l','b',0} },
{0x10, {' ','3','0','"',0} },
{0x13, {' ','2','5','"',0} },
{0x14, {' ','2','0','"',0} },
{0x15, {' ','2','0','"',0} },
{0x18, {' ','1','5','"',0} },
{0x1B, {' ','1','3','"',0} },
{0x1C, {' ','1','0','"',0} },
{0x1D, {' ','1','0','"',0} },
{0x20, {' ',' ','8','"',0} },
{0x23, {' ',' ','6','"',0} },
{0x24, {' ',' ','6','"',0} },
{0x25, {' ',' ','5','"',0} },
{0x28, {' ',' ','4','"',0} },
{0x2B, {' ','3','"','2',0} },
{0x2C, {' ',' ','3','"',0} },
{0x2D, {' ','2','"','5',0} },
{0x30, {' ',' ','2','"',0} },
{0x33, {' ','1','"','6',0} },
{0x34, {' ','1','"','5',0} },
{0x35, {' ','1','"','3',0} },
{0x38, {' ',' ','1','"',0} },
{0x3B, {' ','0','"','8',0} },
{0x3C, {' ','0','"','7',0} },
{0x3D, {' ','0','"','6',0} },
{0x40, {' ','0','"','5',0} },
{0x43, {' ','0','"','4',0} },
{0x44, {' ','0','"','3',0} },
{0x45, {' ','0','"','3',0} },
{0x48, {' ',' ',' ','4',0} },
{0x4B, {' ',' ',' ','5',0} },
{0x4C, {' ',' ',' ','6',0} },
{0x4D, {' ',' ',' ','6',0} },
{0x50, {' ',' ',' ','8',0} },
{0x53, {' ',' ','1','0',0} },
{0x54, {' ',' ','1','0',0} },
{0x55, {' ',' ','1','3',0} },
{0x58, {' ',' ','1','5',0} },
{0x5B, {' ',' ','2','0',0} },
{0x5C, {' ',' ','2','0',0} },
{0x5D, {' ',' ','2','5',0} },
{0x60, {' ',' ','3','0',0} },
{0x63, {' ',' ','4','0',0} },
{0x64, {' ',' ','4','5',0} },
{0x65, {' ',' ','5','0',0} },
{0x68, {' ',' ','6','0',0} },
{0x6B, {' ',' ','8','0',0} },
{0x6C, {' ',' ','9','0',0} },
{0x6D, {' ','1','0','0',0} },
{0x70, {' ','1','2','5',0} },
{0x73, {' ','1','6','0',0} },
{0x74, {' ','1','8','0',0} },
{0x75, {' ','2','0','0',0} },
{0x78, {' ','2','5','0',0} },
{0x7B, {' ','3','2','0',0} },
{0x7C, {' ','3','5','0',0} },
{0x7D, {' ','4','0','0',0} },
{0x80, {' ','5','0','0',0} },
{0x83, {' ','6','4','0',0} },
{0x84, {' ','7','5','0',0} },
{0x85, {' ','8','0','0',0} },
{0x88, {'1','0','0','0',0} },
{0x8B, {'1','2','5','0',0} },
{0x8C, {'1','5','0','0',0} },
{0x8D, {'1','6','0','0',0} },
{0x90, {'2','0','0','0',0} },
{0x93, {'2','5','0','0',0} },
{0x94, {'3','0','0','0',0} },
{0x95, {'3','2','0','0',0} },
{0x98, {'4','0','0','0',0} },
{0x9B, {'5','0','0','0',0} },
{0x9C, {'6','0','0','0',0} },
{0x9D, {'6','4','0','0',0} },
{0xA0, {'8','0','0','0',0} }
};
 
const ValueTitle<VT_EXPCOMP, VT_EXPCOMP_TEXT_LEN> ExpCompTitles[] PROGMEM =
{
{0x00, {'+','3',' ',' ',' ',' ',0} },
{0x03, {'+','2',' ','2','/','3',0} },
{0x04, {'+','2',' ','1','/','2',0} },
{0x05, {'+','2',' ','1','/','3',0} },
{0x08, {'+','2',' ',' ',' ',' ',0} },
{0x0b, {'+','1',' ','2','/','3',0} },
{0x0c, {'+','1',' ','1','/','2',0} },
{0x0d, {'+','1',' ','1','/','3',0} },
{0x10, {'+','1',' ',' ',' ',' ',0} },
{0x13, {'+','2','/','3',' ',' ',0} },
{0x14, {'+','1','/','2',' ',' ',0} },
{0x15, {'+','1','/','3',' ',' ',0} },
{0x18, {'0',' ',' ',' ',' ',' ',0} },
{0x1b, {'-','1','/','3',' ',' ',0} },
{0x1c, {'-','1','/','2',' ',' ',0} },
{0x1d, {'-','2','/','3',' ',' ',0} },
{0x20, {'-','1',' ',' ',' ',' ',0} },
{0x23, {'-','1',' ','1','/','3',0} },
{0x24, {'-','1',' ','1','/','2',0} },
{0x25, {'-','1',' ','2','/','3',0} },
{0x28, {'-','2',' ',' ',' ',' ',0} },
{0x2b, {'-','2',' ','1','/','3',0} },
{0x2c, {'-','2',' ','1','/','2',0} },
{0x2d, {'-','2',' ','2','/','3',0} },
{0x30, {'-','3',' ',' ',' ',' ',0} }
};
 
#define VT_COMPQUALITY_COUNT sizeof(CompQualityTitles) / (sizeof(VT_COMPQUALITY) + VT_COMPQUALITY_TEXT_LEN)
#define VT_FVFILEFORMAT_COUNT sizeof(FvFileFormatTitles) / (sizeof(VT_FVFILEFORMAT) + VT_FVFILEFORMAT_TEXT_LEN)
#define VT_IMAGESIZE_COUNT sizeof(ImageSizeTitles) / (sizeof(VT_IMAGESIZE) + VT_IMAGESIZE_TEXT_LEN)
#define VT_STROBE_COUNT sizeof(StrobeTitles) / (sizeof(VT_STROBE) + VT_STROBE_TEXT_LEN)
#define VT_MODE_COUNT sizeof(ModeTitles) / (sizeof(VT_MODE) + VT_MODE_TEXT_LEN)
#define VT_APT_COUNT sizeof(ApertureTitles) / (sizeof(VT_APERTURE) + VT_APT_TEXT_LEN)
#define VT_EZOOM_COUNT sizeof(EZoomTitles) / (sizeof(VT_EZOOM) + VT_EZOOM_TEXT_LEN)
#define VT_WB_COUNT sizeof(WbTitles) / (sizeof(VT_WB) + VT_WB_TEXT_LEN)
#define VT_SHSPEED_COUNT sizeof(ShutterSpeedTitles) / (sizeof(VT_SHSPEED) + VT_SHSPEED_TEXT_LEN)
#define VT_ISO_COUNT sizeof(IsoTitles) / (sizeof(VT_ISO) + VT_ISO_TEXT_LEN)
#define VT_EXPCOMP_COUNT sizeof(ExpCompTitles) / (sizeof(VT_EXPCOMP) + VT_EXPCOMP_TEXT_LEN)
#define VT_CAMOUTPUT_COUNT sizeof(CamOutputTitles) / (sizeof(VT_CAMOUTPUT) + VT_CAMOUTPUT_TEXT_LEN)
 
#endif //__PSVALUETITLES_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptp.cpp
0,0 → 1,892
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "ptpconst.h"
#include "ptp.h"
#include "ptpdebug.h"
 
void PTP::SetInitialState()
{
busyTime = 0;
hangTime = 0;
idSession = 0;
idTransaction = 0;
SetState(PTP_STATE_SESSION_NOT_OPENED);
}
 
void PTPStateHandlers::OnDeviceDisconnectedState(PTP *ptp)
{
}
 
void PTPStateHandlers::OnSessionNotOpenedState(PTP *ptp)
{
if (ptp->OpenSession() == PTP_RC_OK)
{
PTPTRACE("Session opened\r\n");
ptp->SetState(PTP_STATE_SESSION_OPENED);
}
}
 
void PTPStateHandlers::OnSessionOpenedState(PTP *ptp)
{
ptp->SetState(PTP_STATE_DEVICE_INITIALIZED);
}
 
void PTPStateHandlers::OnDeviceInitializedState(PTP *ptp)
{
}
 
void PTPStateHandlers::OnDeviceNotRespondingState(PTP *ptp)
{
}
 
void PTPStateHandlers::OnDeviceBusyState(PTP *ptp)
{
}
 
void uint16_to_char(uint16_t integer, unsigned char *data)
{
data[0] = (integer & 0xff);
data[1] = ((integer >> 8) & 0xff);
}
 
void uint32_to_char(uint32_t integer, unsigned char *data)
{
data[0] = (integer & 0xff);
data[1] = ((integer >> 8) & 0xff);
data[2] = ((integer >> 16) & 0xff);
data[3] = ((integer >> 24) & 0xff);
}
 
void char_to_uint16(unsigned char *scan)
{
char c = scan[0];
scan[0] = scan[1];
scan[1] = c;
}
void char_to_uint32(unsigned char *scan)
{
char c = scan[0];
scan[0] = scan[3];
scan[3] = c;
c = scan[1];
scan[1] = scan[2];
scan[2] = c;
}
 
void UsbStringToASCII(uint8_t *str)
{
uint8_t i, j, len = (uint8_t)str[0];
// length and descriptor type one byte each should be skipped
for (i=0, j=2; j<len; i++, j+=2)
str[i] = str[j];
str[i] = 0;
}
 
void Notify(const char* msg)
{
if(!msg) return;
char c;
 
while((c = pgm_read_byte(msg++)))
Serial.print(c,BYTE);
}
 
void Message(const char* msg, uint16_t rcode = 0)
{
Notify(msg);
Notify(PSTR(": "));
PrintHex<uint16_t>(rcode);
Notify(PSTR("\r\n"));
}
 
//void Message(const char* msg, uint16_t rcode = 0)
//{
// Notify(msg);
// msg = PSTR(": 0x");
// Notify(msg);
//
// uint16_t mask = 0x1000;
//
// while (mask > 1)
// {
// if (rcode < mask)
// Serial.print("0");
// mask >>= 4;
// }
// Serial.println( rcode, HEX );
//}
 
PTP::PTP(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s) :
theState(0),
busyTime(0),
hangTime(0),
idTransaction(0),
idSession(0),
devAddress(addr),
epDataIn(epin),
epDataOut(epout),
epInterrupt(epint),
numConf(nconf),
stateMachine(s)
{
};
 
void PTP::Task2()
{
switch (theState)
{
//case PTP_STATE_DEVICE_DISCONNECTED:
// idSession = 0;
// idTransaction = 0;
// if (stateMachine)
// stateMachine->OnDeviceDisconnectedState(this);
// break;
case PTP_STATE_SESSION_NOT_OPENED:
if (stateMachine)
stateMachine->OnSessionNotOpenedState(this);
break;
case PTP_STATE_SESSION_OPENED:
if (stateMachine)
stateMachine->OnSessionOpenedState(this);
break;
case PTP_STATE_DEVICE_INITIALIZED:
if (stateMachine)
stateMachine->OnDeviceInitializedState(this);
break;
case PTP_STATE_DEVICE_NOT_RESPONDING:
if (stateMachine)
stateMachine->OnDeviceNotRespondingState(this);
break;
case PTP_STATE_DEVICE_BUSY:
if (stateMachine)
stateMachine->OnDeviceBusyState(this);
break;
// Error state
default:
;
}
}
 
uint16_t PTP::Transaction(uint16_t opcode, OperFlags *flags, uint32_t *params = NULL, void *pVoid = NULL)
{
uint8_t rcode;
{
uint8_t cmd[PTP_USB_BULK_HDR_LEN + 12]; // header + 3 uint32_t parameters
 
ZerroMemory(PTP_USB_BULK_HDR_LEN + 12, cmd);
 
// Make command PTP container header
uint16_to_char(PTP_USB_CONTAINER_COMMAND, (unsigned char*)(cmd + PTP_CONTAINER_CONTYPE_OFF)); // type
uint16_to_char(opcode, (unsigned char*)(cmd + PTP_CONTAINER_OPCODE_OFF)); // code
uint32_to_char(idTransaction++, (unsigned char*)(cmd + PTP_CONTAINER_TRANSID_OFF)); // transaction id
uint8_t n = flags->opParams, len;
 
if (params && *params)
{
*((uint8_t*)cmd) = len = PTP_USB_BULK_HDR_LEN + (n << 2);
 
for (uint32_t *p1 = (uint32_t*)(cmd + PTP_CONTAINER_PAYLOAD_OFF), *p2 = (uint32_t*)params; n--; p1++, p2++)
uint32_to_char(*p2, (unsigned char*)p1);
}
else
*((uint8_t*)cmd) = len = PTP_USB_BULK_HDR_LEN;
rcode = Usb.outTransfer(devAddress, epDataOut, len, (char*)cmd);
 
if (rcode)
{
PTPTRACE2("Transaction: Command block send error", rcode);
return PTP_RC_GeneralError;
}
}
{
uint8_t data[PTP_MAX_RX_BUFFER_LEN];
 
if (flags->txOperation)
{
if (flags->typeOfVoid && !pVoid)
{
PTPTRACE("Transaction: pVoid is NULL\n");
return PTP_RC_GeneralError;
}
ZerroMemory(PTP_MAX_RX_BUFFER_LEN, data);
 
uint32_t bytes_left = (flags->typeOfVoid == 3) ? PTP_USB_BULK_HDR_LEN + flags->dataSize :
((flags->typeOfVoid == 1) ? PTP_USB_BULK_HDR_LEN + ((PTPDataSupplier*)pVoid)->GetDataSize() : 12);
 
// Make data PTP container header
*((uint32_t*)data) = bytes_left;
uint16_to_char(PTP_USB_CONTAINER_DATA, (unsigned char*)(data + PTP_CONTAINER_CONTYPE_OFF)); // type
uint16_to_char(opcode, (unsigned char*)(data + PTP_CONTAINER_OPCODE_OFF)); // code
uint32_to_char(idTransaction, (unsigned char*)(data + PTP_CONTAINER_TRANSID_OFF)); // transaction id
 
uint16_t len;
 
if (flags->typeOfVoid == 1)
len = (bytes_left < PTP_MAX_RX_BUFFER_LEN) ? bytes_left : PTP_MAX_RX_BUFFER_LEN;
if (flags->typeOfVoid == 3)
{
uint8_t *p1 = (data + PTP_USB_BULK_HDR_LEN);
uint8_t *p2 = (uint8_t*)pVoid;
 
for (uint8_t i=flags->dataSize; i; i--, p1++, p2++)
*p1 = *p2;
 
len = PTP_USB_BULK_HDR_LEN + flags->dataSize;
}
bool first_time = true;
 
while (bytes_left)
{
if (flags->typeOfVoid == 1)
((PTPDataSupplier*)pVoid)->GetData( (first_time) ? len - PTP_USB_BULK_HDR_LEN : len,
(first_time) ? (data + PTP_USB_BULK_HDR_LEN) : data);
rcode = Usb.outTransfer(devAddress, epDataOut, len, (char*)data);
 
if (rcode)
{
PTPTRACE2("Transaction: Data block send error.", rcode);
return PTP_RC_GeneralError;
}
 
bytes_left -= len;
 
len = (bytes_left < PTP_MAX_RX_BUFFER_LEN) ? bytes_left : PTP_MAX_RX_BUFFER_LEN;
 
first_time = false;
}
}
 
// Because inTransfer does not return the actual number of bytes recieved, it should be
// calculated here.
uint32_t total = 0, data_off = 0; // Total PTP data packet size, Data offset
uint8_t inbuffer = 0; // Number of bytes read into buffer
uint16_t loops = 0; // Number of loops necessary to get all the data from device
uint8_t timeoutcnt = 0;
 
while (1)
{
ZerroMemory(PTP_MAX_RX_BUFFER_LEN, data);
 
rcode = Usb.inTransfer(devAddress, epDataIn, PTP_MAX_RX_BUFFER_LEN, (char*)data);
 
if (rcode)
{
PTPTRACE("Fatal USB Error\r\n");
 
// in some cases NAK handling might be necessary
PTPTRACE2("Transaction: Response recieve error", rcode);
return PTP_RC_GeneralError;
}
 
// This can occure in case of unsupported operation or successive response after data reception stage
if ((!loops || total == data_off) && *((uint16_t*)(data + PTP_CONTAINER_CONTYPE_OFF)) == PTP_USB_CONTAINER_RESPONSE)
{
uint16_t response = *((uint16_t*)(data + PTP_CONTAINER_OPCODE_OFF));
 
if (response == PTP_RC_OK && *((uint32_t*)data) > PTP_USB_BULK_HDR_LEN)
{
// number of params = (container length - 12) / 4
uint8_t n = (*((uint32_t*)data) - PTP_USB_BULK_HDR_LEN) >> 2;
 
// BUG: n should be checked!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
flags->rsParams = n;
for (uint32_t *p1 = (uint32_t*)(data + PTP_USB_BULK_HDR_LEN), *p2 = (uint32_t*)params; n; n--, p1++, p2++)
p2 = p1;
}
if (response != PTP_RC_OK)
{
PTPTRACE2("Transaction: Response recieve error", response);
data_off = 0;
}
return response;
}
 
if (loops == 0)
{
total = *((uint32_t*)data);
inbuffer = (total < PTP_MAX_RX_BUFFER_LEN) ? (uint8_t)total : PTP_MAX_RX_BUFFER_LEN;
}
else
inbuffer = ((total - data_off) > PTP_MAX_RX_BUFFER_LEN) ? PTP_MAX_RX_BUFFER_LEN : (uint8_t)(total - data_off);
 
if (pVoid)
{
if (flags->typeOfVoid == 0x01)
((PTPReadParser*)pVoid)->Parse(inbuffer, data, (const uint32_t&)data_off);
 
if (flags->typeOfVoid == 0x03)
for (uint32_t i=0, j=data_off; i<inbuffer && j<flags->dataSize; i++, j++)
((uint8_t*)pVoid)[j] = data[i];
}
data_off += inbuffer;
 
loops ++;
//delay(10);
} // while(1)
} // end of scope
}
 
 
uint16_t PTP::EventCheck(PTPReadParser *pParser)
{
uint8_t data[PTP_MAX_EV_BUFFER_LEN];
uint8_t rcode;
 
// Because inTransfer does not return the actual number of bytes recieved, it should be
// calculated here.
uint32_t total = 0, data_off = 0;
uint8_t inbuffer = 0;
uint16_t loops = 0;
uint8_t timeoutcnt = 0;
 
while (1)
{
ZerroMemory(PTP_MAX_EV_BUFFER_LEN, data);
 
rcode = Usb.inTransfer(devAddress, epInterrupt, PTP_MAX_EV_BUFFER_LEN, (char*)data);
 
switch (rcode)
{
// In case of no event occured
case 0xFF:
return PTP_EC_Undefined;
 
default:
// in case of a usb error
PTPTRACE2("EventCheck USB error: ", rcode);
return PTP_RC_GeneralError;
}
 
if (loops == 0)
{
total = *((uint32_t*)data);
inbuffer = (total < PTP_MAX_EV_BUFFER_LEN) ? (uint8_t)total : PTP_MAX_EV_BUFFER_LEN;
}
else
inbuffer = ((total - data_off) > PTP_MAX_EV_BUFFER_LEN) ? PTP_MAX_EV_BUFFER_LEN : (uint8_t)(total - data_off);
 
if (pParser)
pParser->Parse(inbuffer, data, (const uint32_t&)data_off);
data_off += inbuffer;
 
loops ++;
delay(50);
} // while(1)
}
 
bool PTP::CheckEvent(uint8_t size, uint8_t *buf)
{
ZerroMemory(size, buf);
 
uint8_t rcode = Usb.inTransfer(devAddress, epInterrupt, size, (char*)buf);
 
// if no interrupts pending - return false
 
// there should be some error type checking involved i.e. timeout error
if (rcode)
return false;
 
return true;
}
 
bool PTP::EventWait(uint8_t size, uint8_t *event_buf, uint16_t timeout)
{
const uint16_t milisec = 0xA0; // must be polling interval for the interrupt pipe
bool occured = false;
 
while (!(occured = CheckEvent(size, event_buf)) && (timeout -= milisec))
delay(milisec);
 
return occured;
}
 
uint16_t PTP::OpenSession()
{
uint32_t params[1];
OperFlags flags = { 1, 0, 0, 0, 0, 0 };
 
idSession = 1;
idTransaction = 1;
 
params[0] = idSession;
 
return Transaction(PTP_OC_OpenSession, &flags, params);
}
 
uint16_t PTP::ResetDevice()
{
OperFlags flags = { 0, 0, 0, 0, 0, 0 };
return Transaction(PTP_OC_ResetDevice, &flags);
}
 
uint16_t PTP::GetNumObjects(uint32_t &retval, uint32_t storage_id, uint16_t format, uint32_t assoc)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 3, 1, 0, 0, 0, 0 };
uint32_t params[3];
 
if ( (ptp_error = Transaction(PTP_OC_GetNumObjects, &flags, params)) == PTP_RC_OK)
retval = params[0];
 
return ptp_error;
}
 
uint16_t PTP::GetObject(uint32_t handle, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
 
params[0] = handle;
 
return Transaction(PTP_OC_GetObject, &flags, params, parser);
}
 
uint16_t PTP::GetThumb(uint32_t handle, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
 
params[0] = handle;
 
return Transaction(PTP_OC_GetThumb, &flags, params, parser);
}
 
uint16_t PTP::DeleteObject(uint32_t handle, uint16_t format)
{
OperFlags flags = { 2, 0, 0, 0, 0, 0 };
uint32_t params[2];
 
params[0] = handle;
params[1] = (uint32_t)format;
 
return Transaction(PTP_OC_DeleteObject, &flags, params);
}
 
uint16_t PTP::SetObjectProtection(uint32_t handle, uint16_t attrib)
{
OperFlags flags = { 2, 0, 0, 0, 0, 0 };
uint32_t params[2];
 
params[0] = handle;
params[1] = (uint32_t)attrib;
 
return Transaction(PTP_OC_SetObjectProtection, &flags, params);
}
 
uint16_t PTP::MoveObject(uint32_t handle, uint32_t storage_id, uint32_t parent)
{
OperFlags flags = { 3, 0, 0, 0, 0, 0 };
uint32_t params[2];
 
params[0] = handle;
params[1] = storage_id;
params[2] = parent;
 
return Transaction(PTP_OC_MoveObject, &flags, params);
}
 
uint16_t PTP::CopyObject(uint32_t handle, uint32_t storage_id, uint32_t parent, uint32_t &new_handle)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 3, 1, 0, 0, 0, 0 };
uint32_t params[3];
 
params[0] = handle;
params[1] = storage_id;
params[2] = parent;
 
if ( (ptp_error = Transaction(PTP_OC_CopyObject, &flags, params)) == PTP_RC_OK)
new_handle = params[0];
 
return ptp_error;
}
 
uint16_t PTP::InitiateCapture(uint32_t storage_id, uint16_t format)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 2, 0, 0, 0, 0, 0 };
uint32_t params[2];
 
params[0] = storage_id;
params[1] = (uint32_t)format;
 
if ( (ptp_error = Transaction(PTP_OC_InitiateCapture, &flags, params)) == PTP_RC_OK)
{}
 
return ptp_error;
}
 
uint16_t PTP::InitiateOpenCapture(uint32_t storage_id, uint16_t format)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 2, 0, 0, 0, 0, 0 };
uint32_t params[2];
 
params[0] = storage_id;
params[1] = (uint32_t)format;
 
if ( (ptp_error = Transaction(PTP_OC_InitiateOpenCapture, &flags, params)) == PTP_RC_OK)
{}
 
return ptp_error;
}
uint16_t PTP::TerminateOpenCapture(uint32_t trans_id)
{
OperFlags flags = { 1, 0, 0, 0, 0, 0 };
uint32_t params[1];
 
params[0] = trans_id;
 
return Transaction(PTP_OC_TerminateOpenCapture, &flags, params);
}
 
uint16_t PTP::PowerDown()
{
OperFlags flags = { 0, 0, 0, 0, 0, 0 };
return Transaction(PTP_OC_PowerDown, &flags);
}
 
uint16_t PTP::SelfTest(uint16_t type = 0)
{
OperFlags flags = { 1, 0, 0, 0 };
uint32_t params[1];
params[0] = type;
 
return Transaction(PTP_OC_SelfTest, &flags, params);
}
 
uint16_t PTP::CloseSession()
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 0, 0, 0, 0, 0, 0 };
 
if ( (ptp_error = Transaction(PTP_OC_CloseSession, &flags)) == PTP_RC_OK)
idSession = idTransaction = 0;
return ptp_error;
}
 
uint16_t PTP::GetDeviceInfo(PTPReadParser *parser)
{
OperFlags flags = { 0, 0, 0, 1, 1, 0 };
return Transaction(PTP_OC_GetDeviceInfo, &flags, NULL, parser);
}
 
uint16_t PTP::GetObjectInfo(uint32_t handle, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
params[0] = handle;
 
return Transaction(PTP_OC_GetObjectInfo, &flags, params, parser);
}
 
uint16_t PTP::GetDevicePropDesc(const uint16_t pcode, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
 
params[0] = (uint32_t)pcode;
 
return Transaction(PTP_OC_GetDevicePropDesc, &flags, params, parser);
}
 
uint16_t PTP::GetDevicePropValue(const uint16_t pcode, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
uint32_t params[1];
 
params[0] = (uint32_t)pcode;
 
return Transaction(PTP_OC_GetDevicePropValue, &flags, params, parser);
}
 
uint16_t PTP::GetDevicePropValue(const uint16_t pcode, uint8_t &val)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 1, 0, 0, 0, 3, 13 };
uint32_t params[1];
uint8_t buf[13];
 
params[0] = (uint32_t)pcode;
 
if ( (ptp_error = Transaction(PTP_OC_GetDevicePropValue, &flags, params, buf)) == PTP_RC_OK)
val = buf[12];
 
return ptp_error;
}
 
uint16_t PTP::GetDevicePropValue(const uint16_t pcode, uint16_t &val)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 1, 0, 0, 0, 3, 14 };
uint32_t params[1];
uint16_t buf[7];
 
params[0] = pcode;
 
if ( (ptp_error = Transaction(PTP_OC_GetDevicePropValue, &flags, params, buf)) == PTP_RC_OK)
val = buf[6];
 
return ptp_error;
}
 
uint16_t PTP::GetDevicePropValue(const uint16_t pcode, uint32_t &val)
{
uint16_t ptp_error = PTP_RC_GeneralError;
OperFlags flags = { 1, 0, 0, 0, 3, 16 };
uint32_t params[1];
uint32_t buf[4];
 
params[0] = pcode;
 
if ( (ptp_error = Transaction(PTP_OC_GetDevicePropValue, &flags, params, buf)) == PTP_RC_OK)
val = buf[3];
 
return ptp_error;
}
 
uint16_t PTP::SetDevicePropValue(uint16_t pcode, uint8_t val)
{
OperFlags flags = { 1, 0, 1, 1, 3, 1 };
uint32_t params[1];
uint8_t value;
 
params[0] = (uint32_t)pcode;
value = val;
 
return Transaction(PTP_OC_SetDevicePropValue, &flags, params, (void*)&value);
}
 
uint16_t PTP::SetDevicePropValue(uint16_t pcode, uint16_t val)
{
OperFlags flags = { 1, 0, 1, 1, 3, 2 };
uint32_t params[1];
uint16_t value;
 
params[0] = (uint32_t)pcode;
value = val;
 
return Transaction(PTP_OC_SetDevicePropValue, &flags, params, (void*)&value);
}
 
uint16_t PTP::SetDevicePropValue(uint16_t pcode, uint32_t val)
{
OperFlags flags = { 1, 0, 1, 1, 3, 4 };
uint32_t params[1];
uint32_t value;
 
params[0] = (uint32_t)pcode;
value = val;
 
return Transaction(PTP_OC_SetDevicePropValue, &flags, params, (void*)&value);
}
 
uint16_t PTP::ResetDevicePropValue(const uint16_t pcode)
{
OperFlags flags = { 1, 0, 0, 0 };
uint32_t params[1];
 
params[0] = (uint32_t)pcode;
 
return Transaction(PTP_OC_ResetDevicePropValue, &flags, params);
}
 
uint16_t PTP::Operation(uint16_t opcode, uint8_t nparams, uint32_t *params)
{
OperFlags flags = { 0, 0, 0, 0, 0, 0 };
 
flags.opParams = nparams;
 
return Transaction(opcode, &flags, params);
}
 
uint16_t PTP::GetStorageInfo(uint32_t storage_id, PTPReadParser *parser)
{
OperFlags flags = { 1, 0, 0, 1, 1, 0 };
 
uint32_t params[1];
params[0] = storage_id;
 
return Transaction(PTP_OC_GetStorageInfo, &flags, params, parser);
}
 
uint16_t PTP::FormatStore(uint32_t storage_id, uint32_t fsformat)
{
OperFlags flags = { 2, 0, 0, 0, 0, 0 };
 
uint32_t params[2];
params[0] = storage_id;
params[1] = fsformat;
 
return Transaction(PTP_OC_FormatStore, &flags, params);
}
 
uint16_t PTP::CaptureImage()
{
uint16_t ptp_error = PTP_RC_GeneralError;
uint32_t params[2] = {0, 0x00003801};
OperFlags flags = { 2, 0, 0, 0 };
 
if ( (ptp_error = Transaction(PTP_OC_InitiateCapture, &flags, params)) != PTP_RC_OK)
{
PTPTRACE2("CaptureImage error", ptp_error);
return ptp_error;
}
PTPUSBEventContainer evnt;
bool occured;
 
// multiple objects can be added depending on current camera shooting mode
while ((occured = EventWait(sizeof(PTPUSBEventContainer), (uint8_t*)&evnt, 500)) && evnt.code == PTP_EC_ObjectAdded)
PTPTRACE("CaptureImage: New object added.\r\n");
if (!occured)
{
PTPTRACE("CaptureImage: Timeout ellapsed.\r\n");
return PTP_RC_Undefined;
}
switch (evnt.code)
{
case PTP_EC_CaptureComplete:
PTPTRACE("CaptureImage: Image captured.\r\n");
return PTP_RC_OK;
 
case PTP_EC_StoreFull:
PTPTRACE("CaptureImage: Storage is full.\r\n");
return PTP_RC_StoreFull;
 
default:
PTPTRACE2("CaptureImage: Unexpected event\r\n", evnt.code);
return PTP_RC_Undefined;
}
}
 
uint16_t PTP::GetStorageIDs(PTPReadParser *parser)
{
OperFlags flags = { 0, 0, 0, 1, 1, 0 };
return Transaction(PTP_OC_GetStorageIDs, &flags, NULL, parser);
}
 
uint16_t PTP::GetStorageIDs(uint8_t bufsize, uint8_t *pbuf)
{
OperFlags flags = { 0, 0, 0, 1, 3, 0 };
 
flags.dataSize = bufsize;
 
return Transaction(PTP_OC_GetStorageIDs, &flags, NULL, pbuf);
}
 
uint16_t PTP::GetObjectHandles(uint32_t storage_id, uint16_t format, uint16_t assoc, PTPReadParser *parser)
{
OperFlags flags = { 3, 0, 0, 1, 1, 0 };
uint32_t params[3];
 
params[0] = storage_id;
params[1] = (uint32_t)format;
params[2] = (uint32_t)assoc;
 
return Transaction(PTP_OC_GetObjectHandles, &flags, params, parser);
}
 
void PTP::Task()
{
Max.Task();
Usb.Task();
 
if( Usb.getUsbTaskState() == USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE )
{
idSession = 0;
idTransaction = 0;
 
stateMachine->OnDeviceDisconnectedState(this);
}
//wait for addressing state
if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING )
{
/* Initialize data structures */
epRecord[ 0 ] = *( Usb.getDevTableEntry( 0,0 )); //copy endpoint 0 parameters
// Data-In EP
epRecord[ 1 ].epAddr = epDataIn;
epRecord[ 1 ].Attr = 0x02;
epRecord[ 1 ].MaxPktSize = 0x0040;
epRecord[ 1 ].Interval = 0;
epRecord[ 1 ].sndToggle = bmSNDTOG0;
epRecord[ 1 ].rcvToggle = bmRCVTOG0;
// Data-Out EP
epRecord[ 2 ].epAddr = epDataOut;
epRecord[ 2 ].Attr = 0x02;
epRecord[ 2 ].MaxPktSize = 0x0040;
epRecord[ 2 ].Interval = 0;
epRecord[ 2 ].sndToggle = bmSNDTOG0;
epRecord[ 2 ].rcvToggle = bmRCVTOG0;
// Interrupt EP
epRecord[ 3 ].epAddr = epInterrupt;
epRecord[ 3 ].Attr = 0x03;
epRecord[ 3 ].MaxPktSize = 0x0008;
epRecord[ 3 ].Interval = 0x0A;
epRecord[ 3 ].sndToggle = bmSNDTOG0;
epRecord[ 3 ].rcvToggle = bmRCVTOG0;
Usb.setDevTableEntry( devAddress, epRecord );
 
uint8_t rcode;
 
/* Configure device */
if ((rcode = Usb.setConf( devAddress, 0, numConf )))
HaltOnError(MsgErrDeviceConf, rcode);
 
Usb.setUsbTaskState( USB_STATE_RUNNING );
 
SetInitialState();
}
if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
{
Task2();
}
}
 
uint8_t PTP::GetConfDescr( byte addr, byte conf )
{
char buf[ PTP_MAX_RX_BUFFER_LEN ];
byte rcode;
unsigned int total_length;
rcode = Usb.getConfDescr( addr, 0, 4, conf, buf ); //get total length
//LOBYTE( total_length ) = buf[ 2 ];
//HIBYTE( total_length ) = buf[ 3 ];
 
total_length = *((uint16_t*)(buf + 2));
 
if( total_length > PTP_MAX_RX_BUFFER_LEN )
{ //check if total length is larger than buffer
//Serial.println("Total length truncated to 256 bytes");
total_length = PTP_MAX_RX_BUFFER_LEN;
}
rcode = Usb.getConfDescr( addr, 0, total_length, conf, buf ); //get the whole descriptor
return( 0 );
}
/C-OSD/arducam-osd/libraries/PTPCamera/ptp.h
0,0 → 1,183
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTP_H__
#define __PTP_H__
 
#define PTPDEBUG
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <Max3421e.h>
#include <Usb.h>
#include "ptpconst.h"
#include "ptpmsgstr.h"
#include "ptpcallback.h"
#include "ptpdebug.h"
 
// Buffer size should NEVER be less than USB packet size!!!!!!!!!!!!!!!!!!!!!
#define PTP_MAX_RX_BUFFER_LEN 64
#define PTP_MAX_EV_BUFFER_LEN 8
 
typedef void (*PTPMAIN)();
 
// States
#define PTP_STATE_DEVICE_DISCONNECTED 1
#define PTP_STATE_SESSION_NOT_OPENED 2
#define PTP_STATE_SESSION_OPENED 3
#define PTP_STATE_DEVICE_INITIALIZED 4
#define PTP_STATE_DEVICE_NOT_RESPONDING 5
#define PTP_STATE_DEVICE_BUSY 6
 
#define FAILED(rc)(rc != PTP_RC_OK)
 
class PTP;
 
class PTPStateHandlers
{
public:
virtual void OnDeviceDisconnectedState(PTP *ptp);
virtual void OnSessionNotOpenedState(PTP *ptp);
virtual void OnSessionOpenedState(PTP *ptp);
virtual void OnDeviceInitializedState(PTP *ptp);
virtual void OnDeviceNotRespondingState(PTP *ptp);
virtual void OnDeviceBusyState(PTP *ptp);
};
 
class PTP
{
uint8_t theState;
uint8_t busyTime;
uint8_t hangTime;
 
protected:
void SetInitialState();
void Task2();
 
private:
uint8_t devAddress; // Device address
uint8_t epDataIn; // DataIN endpoint number
uint8_t epDataOut; // DataOUT endpoint number
uint8_t epInterrupt; // Interrupt endpoint number
uint8_t numConf; // Number of the configuration
 
MAX3421E Max;
USB Usb;
 
uint16_t idTransaction; // Transaction ID
uint16_t idSession; // Session ID
 
PTPStateHandlers *stateMachine;
 
protected:
EP_RECORD epRecord[ 4 ];
 
struct OperFlags
{
uint16_t opParams : 3; // 7 - maximum number of operation parameters
uint16_t rsParams : 3; // 7 - maximum number of response parameters
uint16_t txOperation : 1; // I->R operation if the flag is set
uint16_t dataStage : 1; // operation has data stage if the flag is set
uint16_t typeOfVoid : 2; // 0 - NULL, 1 - PTPReadParser/PTPDataSupplyer, 2 - WRITEPARSER, 3 - buffer pointer
uint16_t dataSize : 6; // size of data buffer (64 bytes maximum)
};
typedef void (*READPARSER)(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
 
void ZerroMemory(uint8_t size, uint8_t *mem) { for (uint8_t i=0; i<size; i++) mem[i] = 0; };
 
// waits for any event to occure
// returns event on success or error code if timeout elapsed
bool EventWait(uint8_t size, uint8_t *event_buf, uint16_t timeout);
 
// returns true if event occured
// the actual data is stored in a buffer pointed by buf
bool CheckEvent(uint8_t size, uint8_t *buf);
 
uint16_t Transaction(uint16_t opcode, OperFlags *flags, uint32_t *params, void *pVoid);
 
void HaltOnError(const char* msg, uint16_t rcode) { Message(msg, rcode); while(1); };
 
public:
PTP(uint8_t addr, uint8_t epin, uint8_t epout, uint8_t epint, uint8_t nconf, PTPStateHandlers *s);
 
MAX3421E* GetMax() { return &Max; };
USB* GetUsb() { return &Usb; };
 
void SetState(uint8_t state) { theState = state; };
uint8_t GetState() { return theState; };
 
virtual uint16_t EventCheck(PTPReadParser *parser);
 
void Setup() { Max.powerOn(); };
void Task();
 
// Simple PTP operation which has no data stage. Any number of uint32_t params can be supplied.
uint16_t Operation(uint16_t opcode, uint8_t nparams = 0, uint32_t *params = NULL);
 
uint16_t CaptureImage();
 
uint16_t OpenSession();
uint16_t CloseSession();
uint16_t ResetDevice();
uint16_t PowerDown();
uint16_t SelfTest(uint16_t type);
uint16_t GetDeviceInfo(PTPReadParser *parser);
uint16_t GetDevicePropDesc(const uint16_t pcode, PTPReadParser *parser);
uint16_t GetDevicePropValue(const uint16_t pcode, PTPReadParser *parser);
uint16_t GetDevicePropValue(const uint16_t pcode, uint8_t &val);
uint16_t GetDevicePropValue(const uint16_t pcode, uint16_t &val);
uint16_t GetDevicePropValue(const uint16_t pcode, uint32_t &val);
uint16_t SetDevicePropValue(const uint16_t pcode, uint8_t val);
uint16_t SetDevicePropValue(const uint16_t pcode, uint16_t val);
uint16_t SetDevicePropValue(const uint16_t pcode, uint32_t val);
uint16_t ResetDevicePropValue(const uint16_t pcode);
uint16_t GetStorageIDs(PTPReadParser *parser);
uint16_t GetStorageIDs(uint8_t bufsize, uint8_t *pbuf);
uint16_t GetStorageInfo(uint32_t storage_id, PTPReadParser *parser);
uint16_t GetObjectHandles(uint32_t storage_id, uint16_t format, uint16_t assoc, PTPReadParser *parser);
uint16_t GetObjectInfo(uint32_t handle, PTPReadParser *parser);
uint16_t FormatStore(uint32_t storage_id, uint32_t fsformat);
uint16_t GetObject(uint32_t handle, PTPReadParser *parser);
uint16_t GetThumb(uint32_t handle, PTPReadParser *parser);
 
uint16_t GetNumObjects(uint32_t &retval, uint32_t storage_id = 0xffffffff, uint16_t format = 0, uint32_t assoc = 0);
uint16_t DeleteObject(uint32_t handle, uint16_t format = 0);
uint16_t SetObjectProtection(uint32_t handle, uint16_t attrib);
uint16_t MoveObject(uint32_t handle, uint32_t storage_id, uint32_t parent);
uint16_t CopyObject(uint32_t handle, uint32_t storage_id, uint32_t parent, uint32_t &new_handle);
uint16_t InitiateOpenCapture(uint32_t storage_id = 0, uint16_t format = 0);
uint16_t TerminateOpenCapture(uint32_t trans_id);
uint16_t InitiateCapture(uint32_t storage_id = 0, uint16_t format = 0);
 
// To be implemented in future releases
//uint16_t GetPartialObject(uint32_t handle, PTPReadParser *parser);
//uint16_t SendObjectInfo(uint32_t handle, PTPDataSupplier *sup);
//uint16_t SendObject(uint32_t handle, PTPDataSupplier *sup);
 
private:
uint8_t GetConfDescr( byte addr, byte conf );
};
 
 
#if defined( PTPDEBUG )
#define PTPTRACE(s)(Notify(PSTR((s))))
#define PTPTRACE2(s,r)(Message(PSTR((s)),(r)));
#else
#define PTPTRACE(s)((void)0)
#define PTPTRACE2(s,r)(delay(1)) // necessary for some PowerShot cameras to work properly
#endif
 
#endif // __PTP_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptpcallback.cpp
0,0 → 1,73
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "ptpcallback.h"
#include "ptpdebug.h"
 
bool MultiByteValueParser::Parse(uint8_t **pp, uint16_t *pcntdn)
{
if (!pBuf)
{
Notify(PSTR("Buffer pointer is NULL!\r\n"));
return false;
}
for (; countDown && (*pcntdn); countDown--, (*pcntdn)--, (*pp)++)
pBuf[valueSize-countDown] = (**pp);
 
if (countDown)
return false;
 
countDown = valueSize;
return true;
}
 
bool PTPListParser::Parse(uint8_t **pp, uint16_t *pcntdn, PTP_ARRAY_EL_FUNC pf, const void *me)
{
switch (nStage)
{
case 0:
pBuf->valueSize = lenSize;
theParser.Initialize(pBuf);
nStage = 1;
 
case 1:
if (!theParser.Parse(pp, pcntdn))
return false;
arLen = 0;
arLen = (pBuf->valueSize >= 4) ? *((uint32_t*)pBuf->pValue) : (uint32_t)(*((uint16_t*)pBuf->pValue));
arLenCntdn = arLen;
nStage = 2;
 
case 2:
pBuf->valueSize = valSize;
theParser.Initialize(pBuf);
nStage = 3;
 
case 3:
for (; arLenCntdn; arLenCntdn--)
{
if (!theParser.Parse(pp, pcntdn))
return false;
if (pf)
pf(pBuf, (arLen - arLenCntdn), me);
}
 
nStage = 0;
}
return true;
}
/C-OSD/arducam-osd/libraries/PTPCamera/ptpcallback.h
0,0 → 1,159
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTPCALLBACK_H__
#define __PTPCALLBACK_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "WProgram.h"
 
// Base class for incomming data parser
class PTPReadParser
{
public:
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset) = 0;
};
 
struct MultiValueBuffer
{
uint8_t valueSize;
void *pValue;
};
 
class MultiByteValueParser
{
uint8_t * pBuf;
uint8_t countDown;
uint8_t valueSize;
 
public:
MultiByteValueParser() : pBuf(NULL), countDown(0), valueSize(0) {};
 
const uint8_t* GetBuffer() { return pBuf; };
 
void Initialize(MultiValueBuffer * const pbuf)
{
pBuf = (uint8_t*)pbuf->pValue;
countDown = valueSize = pbuf->valueSize;
};
 
bool Parse(uint8_t **pp, uint16_t *pcntdn);
};
 
class ByteSkipper
{
uint8_t *pBuf;
uint8_t nStage;
uint16_t countDown;
 
public:
ByteSkipper() : pBuf(NULL), nStage(0), countDown(0) {};
 
void Initialize(MultiValueBuffer *pbuf)
{
pBuf = (uint8_t*)pbuf->pValue;
countDown = 0;
};
 
bool Skip(uint8_t **pp, uint16_t *pcntdn, uint16_t bytes_to_skip)
{
switch (nStage)
{
case 0:
countDown = bytes_to_skip;
nStage ++;
case 1:
for (; countDown && (*pcntdn); countDown--, (*pp)++, (*pcntdn)--);
 
if (!countDown)
nStage = 0;
};
return (!countDown);
};
};
 
// Pointer to a callback function triggered for each element of PTP array when used with PTPArrayParser
typedef void (*PTP_ARRAY_EL_FUNC)(const MultiValueBuffer * const p, uint32_t count, const void *me);
 
class PTPListParser
{
public:
enum ParseMode { modeArray, modeRange/*, modeEnum*/ };
 
private:
uint8_t nStage;
uint8_t enStage;
 
uint32_t arLen;
uint32_t arLenCntdn;
 
uint8_t lenSize; // size of the array length field in bytes
uint8_t valSize; // size of the array element in bytes
 
MultiValueBuffer *pBuf;
 
// The only parser for both size and array element parsing
MultiByteValueParser theParser;
 
uint8_t /*ParseMode*/ prsMode;
 
public:
PTPListParser() :
pBuf(NULL),
nStage(0),
enStage(0),
arLenCntdn(0),
arLen(0),
lenSize(0),
valSize(0),
prsMode(modeArray)
{};
 
void Initialize(const uint8_t len_size, const uint8_t val_size, MultiValueBuffer * const p, const uint8_t mode = modeArray)
{
pBuf = p;
lenSize = len_size;
valSize = val_size;
prsMode = mode;
 
if (prsMode == modeRange)
{
arLenCntdn = arLen = 3;
nStage = 2;
}
else
{
arLenCntdn = arLen = 0;
nStage = 0;
}
enStage = 0;
theParser.Initialize(p);
};
 
bool Parse(uint8_t **pp, uint16_t *pcntdn, PTP_ARRAY_EL_FUNC pf, const void *me = NULL);
};
 
 
// Base class for outgoing data supplier
class PTPDataSupplier
{
public:
virtual uint32_t GetDataSize() = 0;
virtual void GetData(const uint16_t len, uint8_t *pbuf) = 0;
};
 
#endif // __PTPCALLBACK_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptpconst.h
0,0 → 1,310
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTPCONST_H__
#define __PTPCONST_H__
 
#include <inttypes.h>
 
/* PTP USB Bulk-Pipe container */
/* USB bulk max max packet length for full speed endpoints */
#define PTP_USB_BULK_FS_MAX_PACKET_LEN 64
#define PTP_USB_BULK_HDR_LEN (2*sizeof(uint32_t)+2*sizeof(uint16_t))
#define PTP_USB_BULK_PAYLOAD_LEN (PTP_USB_BULK_FS_MAX_PACKET_LEN-PTP_USB_BULK_HDR_LEN)
#define PTP_USB_BULK_REQ_LEN (PTP_USB_BULK_HDR_LEN+5*sizeof(uint32_t))
 
#define PTP_CONTAINER_CONTYPE_OFF 4
#define PTP_CONTAINER_OPCODE_OFF 6
#define PTP_CONTAINER_TRANSID_OFF 8
#define PTP_CONTAINER_PAYLOAD_OFF 12
#define PTP_CONTAINER_PARAM1_OFF 12
#define PTP_CONTAINER_PARAM2_OFF 16
#define PTP_CONTAINER_PARAM3_OFF 20
 
#define PTP_USB_INT_PACKET_LEN 8
 
/* PTP USB Asynchronous Event Interrupt Data Format */
struct PTPUSBEventContainer
{
uint32_t length;
uint16_t type;
uint16_t code;
uint32_t trans_id;
uint32_t param1;
uint32_t param2;
uint32_t param3;
};
 
/* USB container types */
#define PTP_USB_CONTAINER_UNDEFINED 0x0000
#define PTP_USB_CONTAINER_COMMAND 0x0001
#define PTP_USB_CONTAINER_DATA 0x0002
#define PTP_USB_CONTAINER_RESPONSE 0x0003
#define PTP_USB_CONTAINER_EVENT 0x0004
 
/* Vendor IDs */
#define PTP_VENDOR_EASTMAN_KODAK 0x00000001
#define PTP_VENDOR_SEIKO_EPSON 0x00000002
#define PTP_VENDOR_AGILENT 0x00000003
#define PTP_VENDOR_POLAROID 0x00000004
#define PTP_VENDOR_AGFA_GEVAERT 0x00000005
#define PTP_VENDOR_MICROSOFT 0x00000006
#define PTP_VENDOR_EQUINOX 0x00000007
#define PTP_VENDOR_VIEWQUEST 0x00000008
#define PTP_VENDOR_STMICROELECTRONICS 0x00000009
#define PTP_VENDOR_NIKON 0x0000000A
#define PTP_VENDOR_CANON 0x0000000B
#define PTP_VENDOR_FOTONATION 0x0000000C
#define PTP_VENDOR_PENTAX 0x0000000D
#define PTP_VENDOR_FUJI 0x0000000E
 
/* Operation Codes */
#define PTP_OC_Undefined 0x1000
#define PTP_OC_GetDeviceInfo 0x1001
#define PTP_OC_OpenSession 0x1002
#define PTP_OC_CloseSession 0x1003
#define PTP_OC_GetStorageIDs 0x1004
#define PTP_OC_GetStorageInfo 0x1005
#define PTP_OC_GetNumObjects 0x1006
#define PTP_OC_GetObjectHandles 0x1007
#define PTP_OC_GetObjectInfo 0x1008
#define PTP_OC_GetObject 0x1009
#define PTP_OC_GetThumb 0x100A
#define PTP_OC_DeleteObject 0x100B
#define PTP_OC_SendObjectInfo 0x100C
#define PTP_OC_SendObject 0x100D
#define PTP_OC_InitiateCapture 0x100E
#define PTP_OC_FormatStore 0x100F
#define PTP_OC_ResetDevice 0x1010
#define PTP_OC_SelfTest 0x1011
#define PTP_OC_SetObjectProtection 0x1012
#define PTP_OC_PowerDown 0x1013
#define PTP_OC_GetDevicePropDesc 0x1014
#define PTP_OC_GetDevicePropValue 0x1015
#define PTP_OC_SetDevicePropValue 0x1016
#define PTP_OC_ResetDevicePropValue 0x1017
#define PTP_OC_TerminateOpenCapture 0x1018
#define PTP_OC_MoveObject 0x1019
#define PTP_OC_CopyObject 0x101A
#define PTP_OC_GetPartialObject 0x101B
#define PTP_OC_InitiateOpenCapture 0x101C
 
/* Proprietary vendor extension operations mask */
#define PTP_OC_EXTENSION_MASK 0xF000
#define PTP_OC_EXTENSION 0x9000
 
/* Response Codes */
#define PTP_RC_Undefined 0x2000
#define PTP_RC_OK 0x2001
#define PTP_RC_GeneralError 0x2002
#define PTP_RC_SessionNotOpen 0x2003
#define PTP_RC_InvalidTransactionID 0x2004
#define PTP_RC_OperationNotSupported 0x2005
#define PTP_RC_ParameterNotSupported 0x2006
#define PTP_RC_IncompleteTransfer 0x2007
#define PTP_RC_InvalidStorageId 0x2008
#define PTP_RC_InvalidObjectHandle 0x2009
#define PTP_RC_DevicePropNotSupported 0x200A
#define PTP_RC_InvalidObjectFormatCode 0x200B
#define PTP_RC_StoreFull 0x200C
#define PTP_RC_ObjectWriteProtected 0x200D
#define PTP_RC_StoreReadOnly 0x200E
#define PTP_RC_AccessDenied 0x200F
#define PTP_RC_NoThumbnailPresent 0x2010
#define PTP_RC_SelfTestFailed 0x2011
#define PTP_RC_PartialDeletion 0x2012
#define PTP_RC_StoreNotAvailable 0x2013
#define PTP_RC_SpecificationByFormatUnsupported 0x2014
#define PTP_RC_NoValidObjectInfo 0x2015
#define PTP_RC_InvalidCodeFormat 0x2016
#define PTP_RC_UnknownVendorCode 0x2017
#define PTP_RC_CaptureAlreadyTerminated 0x2018
#define PTP_RC_DeviceBusy 0x2019
#define PTP_RC_InvalidParentObject 0x201A
#define PTP_RC_InvalidDevicePropFormat 0x201B
#define PTP_RC_InvalidDevicePropValue 0x201C
#define PTP_RC_InvalidParameter 0x201D
#define PTP_RC_SessionAlreadyOpened 0x201E
#define PTP_RC_TransactionCanceled 0x201F
#define PTP_RC_SpecificationOfDestinationUnsupported 0x2020
 
/* Proprietary vendor extension response code mask */
#define PTP_RC_EXTENSION_MASK 0xF000
#define PTP_RC_EXTENSION 0xA000
 
/* PTP Event Codes */
#define PTP_EC_Undefined 0x4000
#define PTP_EC_CancelTransaction 0x4001
#define PTP_EC_ObjectAdded 0x4002
#define PTP_EC_ObjectRemoved 0x4003
#define PTP_EC_StoreAdded 0x4004
#define PTP_EC_StoreRemoved 0x4005
#define PTP_EC_DevicePropChanged 0x4006
#define PTP_EC_ObjectInfoChanged 0x4007
#define PTP_EC_DeviceInfoChanged 0x4008
#define PTP_EC_RequestObjectTransfer 0x4009
#define PTP_EC_StoreFull 0x400A
#define PTP_EC_DeviceReset 0x400B
#define PTP_EC_StorageInfoChanged 0x400C
#define PTP_EC_CaptureComplete 0x400D
#define PTP_EC_UnreportedStatus 0x400E
 
#define PTP_HANDLER_SPECIAL 0xffffffff
#define PTP_HANDLER_ROOT 0x00000000
 
/* max ptp string length INCLUDING terminating null character */
#define PTP_MAXSTRLEN 255
 
/* PTP Object Format Codes */
 
/* ancillary formats */
#define PTP_OFC_Undefined 0x3000
#define PTP_OFC_Association 0x3001
#define PTP_OFC_Script 0x3002
#define PTP_OFC_Executable 0x3003
#define PTP_OFC_Text 0x3004
#define PTP_OFC_HTML 0x3005
#define PTP_OFC_DPOF 0x3006
#define PTP_OFC_AIFF 0x3007
#define PTP_OFC_WAV 0x3008
#define PTP_OFC_MP3 0x3009
#define PTP_OFC_AVI 0x300A
#define PTP_OFC_MPEG 0x300B
#define PTP_OFC_ASF 0x300C
#define PTP_OFC_QT 0x300D /* guessing */
 
/* image formats */
#define PTP_OFC_EXIF_JPEG 0x3801
#define PTP_OFC_TIFF_EP 0x3802
#define PTP_OFC_FlashPix 0x3803
#define PTP_OFC_BMP 0x3804
#define PTP_OFC_CIFF 0x3805
#define PTP_OFC_Undefined_0x3806 0x3806
#define PTP_OFC_GIF 0x3807
#define PTP_OFC_JFIF 0x3808
#define PTP_OFC_PCD 0x3809
#define PTP_OFC_PICT 0x380A
#define PTP_OFC_PNG 0x380B
#define PTP_OFC_Undefined_0x380C 0x380C
#define PTP_OFC_TIFF 0x380D
#define PTP_OFC_TIFF_IT 0x380E
#define PTP_OFC_JP2 0x380F
#define PTP_OFC_JPX 0x3810
 
/* PTP Association Types */
#define PTP_AT_Undefined 0x0000
#define PTP_AT_GenericFolder 0x0001
#define PTP_AT_Album 0x0002
#define PTP_AT_TimeSequence 0x0003
#define PTP_AT_HorizontalPanoramic 0x0004
#define PTP_AT_VerticalPanoramic 0x0005
#define PTP_AT_2DPanoramic 0x0006
#define PTP_AT_AncillaryData 0x0007
 
/* PTP Protection Status */
#define PTP_PS_NoProtection 0x0000
#define PTP_PS_ReadOnly 0x0001
 
/* PTP Storage Types */
#define PTP_ST_Undefined 0x0000
#define PTP_ST_FixedROM 0x0001
#define PTP_ST_RemovableROM 0x0002
#define PTP_ST_FixedRAM 0x0003
#define PTP_ST_RemovableRAM 0x0004
 
/* PTP FilesystemType Values */
#define PTP_FST_Undefined 0x0000
#define PTP_FST_GenericFlat 0x0001
#define PTP_FST_GenericHierarchical 0x0002
#define PTP_FST_DCF 0x0003
 
/* PTP StorageInfo AccessCapability Values */
#define PTP_AC_ReadWrite 0x0000
#define PTP_AC_ReadOnly 0x0001
#define PTP_AC_ReadOnly_with_Object_Deletion 0x0002
 
/* DataType Codes */
#define PTP_DTC_UNDEF 0x0000
#define PTP_DTC_INT8 0x0001
#define PTP_DTC_UINT8 0x0002
#define PTP_DTC_INT16 0x0003
#define PTP_DTC_UINT16 0x0004
#define PTP_DTC_INT32 0x0005
#define PTP_DTC_UINT32 0x0006
#define PTP_DTC_INT64 0x0007
#define PTP_DTC_UINT64 0x0008
#define PTP_DTC_INT128 0x0009
#define PTP_DTC_UINT128 0x000A
#define PTP_DTC_AINT8 0x4001
#define PTP_DTC_AUINT8 0x4002
#define PTP_DTC_AINT16 0x4003
#define PTP_DTC_AUINT16 0x4004
#define PTP_DTC_AINT32 0x4005
#define PTP_DTC_AUINT32 0x4006
#define PTP_DTC_AINT64 0x4007
#define PTP_DTC_AUINT64 0x4008
#define PTP_DTC_AINT128 0x4009
#define PTP_DTC_AUINT128 0x400A
#define PTP_DTC_STR 0xFFFF
 
/* Device Properties Codes */
#define PTP_DPC_Undefined 0x5000
#define PTP_DPC_BatteryLevel 0x5001
#define PTP_DPC_FunctionalMode 0x5002
#define PTP_DPC_ImageSize 0x5003
#define PTP_DPC_CompressionSetting 0x5004
#define PTP_DPC_WhiteBalance 0x5005
#define PTP_DPC_RGBGain 0x5006
#define PTP_DPC_FNumber 0x5007
#define PTP_DPC_FocalLength 0x5008
#define PTP_DPC_FocusDistance 0x5009
#define PTP_DPC_FocusMode 0x500A
#define PTP_DPC_ExposureMeteringMode 0x500B
#define PTP_DPC_FlashMode 0x500C
#define PTP_DPC_ExposureTime 0x500D
#define PTP_DPC_ExposureProgramMode 0x500E
#define PTP_DPC_ExposureIndex 0x500F
#define PTP_DPC_ExposureBiasCompensation 0x5010
#define PTP_DPC_DateTime 0x5011
#define PTP_DPC_CaptureDelay 0x5012
#define PTP_DPC_StillCaptureMode 0x5013
#define PTP_DPC_Contrast 0x5014
#define PTP_DPC_Sharpness 0x5015
#define PTP_DPC_DigitalZoom 0x5016
#define PTP_DPC_EffectMode 0x5017
#define PTP_DPC_BurstNumber 0x5018
#define PTP_DPC_BurstInterval 0x5019
#define PTP_DPC_TimelapseNumber 0x501A
#define PTP_DPC_TimelapseInterval 0x501B
#define PTP_DPC_FocusMeteringMode 0x501C
#define PTP_DPC_UploadURL 0x501D
#define PTP_DPC_Artist 0x501E
#define PTP_DPC_CopyrightInfo 0x501F
 
/* Proprietary vendor extension device property mask */
#define PTP_DPC_EXTENSION_MASK 0xF000
#define PTP_DPC_EXTENSION 0xD000
 
/* Device Property Form Flag */
#define PTP_DPFF_None 0x00
#define PTP_DPFF_Range 0x01
#define PTP_DPFF_Enumeration 0x02
 
/* Device Property GetSet type */
#define PTP_DPGS_Get 0x00
#define PTP_DPGS_GetSet 0x01
 
#endif //__PTPCONST_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptpdebug.cpp
0,0 → 1,133
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "ptpdebug.h"
 
void HexDump::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
for (uint16_t j=0; j<len; j++, byteCount++, byteTotal++)
{
if (!byteCount)
{
PrintHex<uint16_t>(byteTotal);
Serial.print(": ");
}
PrintHex<uint8_t>(pbuf[j]);
Serial.print(" ");
 
if (byteCount == 15)
{
Serial.println("");
byteCount = 0xFF;
}
}
}
 
void EOSEventDump::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint8_t *p = (uint8_t*)pbuf;
uint16_t cntdn = (uint16_t)len;
 
switch (parseStage)
{
case 0:
// Get PTP data packet size
ptppktSize = *((uint32_t*)p);
 
// Return if the packet has only one empty record
if (ptppktSize == 0x14)
return;
 
Serial.println("\r\n");
 
for (uint8_t i=0; i<4; i++)
{
PrintHex<uint8_t>(((uint8_t*)&ptppktSize)[i]);
Serial.print(" ");
}
 
// Skip PTP packet header
p += 12;
cntdn -= 12;
parseStage ++;
case 1:
parseSubstage = 0;
parseStage ++;
case 2:
while (1)
{
switch (parseSubstage)
{
// CR after each event record
case 0:
Serial.println("");
valueParser.Initialize(&valueBuffer);
parseSubstage ++;
 
// Parse record size value
case 1:
//Serial.println("1");
if (!valueParser.Parse(&p, &cntdn))
return;
recordSize = (uint32_t)theBuffer;
for (uint8_t i=0; i<4; i++)
{
PrintHex<uint8_t>(((uint8_t*)&theBuffer)[i]);
Serial.print(" ");
}
recordSize -= 4;
valueParser.Initialize(&valueBuffer);
parseSubstage ++;
 
// Parse the first uint32_t value
case 2:
//Serial.println("2");
if (!valueParser.Parse(&p, &cntdn))
return;
 
for (uint8_t i=0; i<4; i++)
{
PrintHex<uint8_t>(((uint8_t*)&theBuffer)[i]);
Serial.print(" ");
}
recordSize -= 4;
 
// Return if empty(last) record
if (recordSize == 0x08 && (uint32_t)theBuffer == 0)
{
parseSubstage = 0;
parseStage = 0;
return;
}
parseSubstage ++;
 
// Print the rest of the record
case 3:
//Serial.println("3");
for (; recordSize && cntdn; recordSize--, cntdn--, p++)
{
PrintHex<uint8_t>(*p);
Serial.print(" ");
}
if (!recordSize)
parseSubstage = 0;
if (!cntdn)
return;
 
} // switch (parseSubstage)
} // while(1)
} // switch (parseStage)
}
/C-OSD/arducam-osd/libraries/PTPCamera/ptpdebug.h
0,0 → 1,86
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTPDEBUG_H__
#define __PTPDEBUG_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "ptpcallback.h"
 
void Notify(const char* msg);
void Message(const char* msg, uint16_t rcode);
 
template <class T>
void PrintHex(T val)
{
T mask = (((T)1) << (((sizeof(T) << 1) - 1) << 2));
while (mask > 1)
{
if (val < mask)
Serial.print("0");
 
mask >>= 4;
}
Serial.print((T)val, HEX);
}
 
template <class T>
void PrintHex2(Print *prn, T val)
{
T mask = (((T)1) << (((sizeof(T) << 1) - 1) << 2));
while (mask > 1)
{
if (val < mask)
prn->print("0");
 
mask >>= 4;
}
prn->print((T)val, HEX);
}
 
class HexDump : public PTPReadParser
{
uint8_t byteCount;
uint16_t byteTotal;
 
public:
HexDump() : byteCount(0), byteTotal(0) {};
void Initialize() { byteCount = 0; byteTotal = 0; };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
#include "ptpcallback.h"
 
class EOSEventDump : public PTPReadParser
{
uint32_t ptppktSize;
uint16_t recordSize;
uint8_t parseStage;
uint8_t parseSubstage;
 
MultiByteValueParser valueParser;
MultiValueBuffer valueBuffer;
uint32_t theBuffer;
public:
EOSEventDump() : ptppktSize(0), recordSize(0), parseStage(0), parseSubstage(0)
{ valueBuffer.valueSize = 4; valueBuffer.pValue = &theBuffer; };
void Initialize() { ptppktSize = 0; recordSize = 0; parseStage = 0; valueParser.Initialize(&valueBuffer); };
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
#endif // __PTPDEBUG_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptpdpparser.h
0,0 → 1,240
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTPDPPARSER_H__
#define __PTPDPPARSER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <ptpconst.h>
#include <ptp.h>
#include <valuelist.h>
 
template <class VALUE_TYPE>
struct PTPDevicePropValue
{
VALUE_TYPE valCurrent;
uint8_t listForm;
VALUE_TYPE arrValues[3];
 
static void SaveEnumValue(MultiValueBuffer *p, uint32_t count, void *me)
{
PTPDevicePropValue<VALUE_TYPE> *dp = (PTPDevicePropValue<VALUE_TYPE>*)me;
if (!dp)
{
PTPTRACE("NULL pointer!!!\r\n");
return;
}
switch (dp->listForm)
{
case 2:
if (dp->arrValues[1] != dp->valCurrent || (dp->arrValues[1] == dp->valCurrent && dp->arrValues[2] <= dp->valCurrent))
{
dp->arrValues[0] = dp->arrValues[1];
dp->arrValues[1] = dp->arrValues[2];
dp->arrValues[2] = *((VALUE_TYPE*)p->pValue);
}
break;
case 1:
dp->arrValues[count] = *((VALUE_TYPE*)p->pValue);
break;
}
};
};
 
template <class VALUE_TYPE>
class PTPDevPropParser : public PTPReadParser
{
uint8_t nStage;
uint8_t enStage;
uint8_t formFlag;
MultiValueBuffer theBuffer;
uint8_t varBuffer[sizeof(VALUE_TYPE)];
uint16_t enLen;
uint16_t enLenCntdn;
MultiByteValueParser valParser;
PTPDevicePropValue<VALUE_TYPE> *pDPValue;
bool ParseValue (uint8_t **pp, uint16_t *pcntdn, VALUE_TYPE&);
bool ParseEnumSingle(uint8_t **pp, uint16_t *pcntdn);
PTPListParser enumParser;
uint8_t GetDataSize();
public:
PTPDevPropParser(PTPDevicePropValue<VALUE_TYPE> *p) :
pDPValue(p),
nStage(0),
enStage(0),
formFlag(0),
enLen(0),
enLenCntdn(0)
{
theBuffer.valueSize = sizeof(VALUE_TYPE);
theBuffer.pValue = varBuffer;
}
virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset);
};
 
template <class VALUE_TYPE>
bool PTPDevPropParser<VALUE_TYPE>::ParseValue(uint8_t **pp, uint16_t *pcntdn, VALUE_TYPE &val)
{
val = *((VALUE_TYPE*)*pp);
(*pp) += sizeof(VALUE_TYPE);
(*pcntdn) -= sizeof(VALUE_TYPE);
return true;
}
 
template <class VALUE_TYPE>
bool PTPDevPropParser<VALUE_TYPE>::ParseEnumSingle(uint8_t **pp, uint16_t *pcntdn)
{
switch(enStage)
{
case 0:
enumParser.Initialize(2, sizeof(VALUE_TYPE), &theBuffer);
enStage ++;
case 1:
if (!enumParser.Parse(pp, pcntdn, (PTP_ARRAY_EL_FUNC)&PTPDevicePropValue<VALUE_TYPE>::SaveEnumValue, pDPValue))
return false;
enStage = 0;
} // switch
return true;
}
 
template <class VALUE_TYPE>
void PTPDevPropParser<VALUE_TYPE>::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
{
uint16_t cntdn = (uint16_t)len;
uint8_t *p = (uint8_t*)pbuf;
 
VALUE_TYPE vt = 1;
 
switch (nStage)
{
case 0:
p += 17;
cntdn -= 17;
nStage = 1;
case 1:
if (!ParseValue(&p, &cntdn, vt))
return;
nStage = 2;
case 2:
if (!ParseValue(&p, &cntdn, pDPValue->valCurrent))
return;
nStage = 3;
case 3:
for (uint8_t i=0; i<3; i++)
pDPValue->arrValues[i] = pDPValue->valCurrent;
formFlag = (*p);
pDPValue->listForm = formFlag;
p ++;
cntdn --;
nStage = 4;
case 4:
if (formFlag == 1)
enumParser.Initialize(2, sizeof(VALUE_TYPE), &theBuffer, PTPListParser::modeRange);
nStage = 5;
case 5:
if (formFlag == 1)
if (!enumParser.Parse(&p, &cntdn, (PTP_ARRAY_EL_FUNC)&PTPDevicePropValue<VALUE_TYPE>::SaveEnumValue, pDPValue))
return;
if (formFlag == 2)
if (!ParseEnumSingle(&p, &cntdn))
return;
nStage = 0;
}
}
 
template <class VALUE_TYPE>
uint16_t StepUp(PTP *ptp, uint16_t prop)
{
PTPDevicePropValue<VALUE_TYPE> val;
PTPDevPropParser<VALUE_TYPE> prs(&val);
 
uint16_t ret = ptp->GetDevicePropDesc(prop, &prs);
if (ret != PTP_RC_OK)
return ret;
 
if (val.listForm == 2)
if (val.arrValues[1] == val.valCurrent)
return ptp->SetDevicePropValue(prop, (VALUE_TYPE)val.arrValues[2]);
if (val.listForm == 1)
if (val.valCurrent + val.arrValues[2] <= val.arrValues[1])
return ptp->SetDevicePropValue(prop, (VALUE_TYPE)(val.valCurrent + val.arrValues[2]));
return PTP_RC_OK;
}
 
template <class VALUE_TYPE>
uint16_t StepDown(PTP *ptp, uint16_t prop)
{
PTPDevicePropValue<VALUE_TYPE> val;
PTPDevPropParser<VALUE_TYPE> prs(&val);
uint16_t ret = ptp->GetDevicePropDesc(prop, &prs);
if (ret != PTP_RC_OK)
return ret;
if (val.listForm == 2)
{
if (val.arrValues[1] == val.valCurrent && val.arrValues[0] < val.arrValues[1])
return ptp->SetDevicePropValue(prop, (VALUE_TYPE)val.arrValues[0]);
if (val.arrValues[2] == val.valCurrent)
return ptp->SetDevicePropValue(prop, (VALUE_TYPE)val.arrValues[1]);
}
if (val.listForm == 1)
{
VALUE_TYPE new_val = val.valCurrent - val.arrValues[2];
if (new_val >= val.arrValues[0] && new_val < val.valCurrent)
return ptp->SetDevicePropValue(prop, (VALUE_TYPE)(val.valCurrent - val.arrValues[2]));
}
return PTP_RC_OK;
}
 
template <class VALUE_TYPE, class LIST_VALUE_TYPE, const uint8_t TABLE_SIZE, const uint8_t TEXT_SIZE>
uint16_t GetValueTitle(PTP *ptp, uint16_t prop, const ValueTitle<LIST_VALUE_TYPE, TEXT_SIZE> *p, const char **t)
{
VALUE_TYPE val;
uint16_t ret = ptp->GetDevicePropValue(prop, val);
if (ret != PTP_RC_OK)
return ret;
*t = (char*)FindTitle<LIST_VALUE_TYPE, TEXT_SIZE>(TABLE_SIZE, p, (LIST_VALUE_TYPE)val);
return ret;
}
 
template <class VALUE_TYPE, class LIST_VALUE_TYPE, const uint8_t TABLE_SIZE, const uint8_t TEXT_SIZE>
uint16_t PrintValueTitle(PTP *ptp, uint16_t prop, const ValueTitle<LIST_VALUE_TYPE, TEXT_SIZE> *p )
{
const char *title;
 
if (GetValueTitle<LIST_VALUE_TYPE, LIST_VALUE_TYPE, TABLE_SIZE, TEXT_SIZE>(ptp, prop, p, &title) == PTP_RC_OK)
Notify(title);
}
 
#endif // __PTPDPPARSER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/ptpmsgstr.h
0,0 → 1,95
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __PTPMSGSTR_H__
#define __PTPMSGSTR_H__
 
const char MsgErrDeviceConf[] PROGMEM = "Error configuring device. Returned:";
const char MsgErrProtoConf[] PROGMEM = "Error configuring boot protocol. Returned:";
const char MsgDeviceInitialized[] PROGMEM = "Device initialized";
 
#ifdef PTP_HANDLE_RESPONSES
//const char msgUndefined[] PROGMEM = "Undefined";
const char msgOK[] PROGMEM = "OK";
const char msgGeneralError[] PROGMEM = "GeneralError";
const char msgSessionNotOpen[] PROGMEM = "SessionNotOpen";
const char msgInvalidTransactionID[] PROGMEM = "InvalidTransactionID";
const char msgOperationNotSupported[] PROGMEM = "OperationNotSupported";
const char msgParameterNotSupported[] PROGMEM = "ParameterNotSupported";
const char msgIncompleteTransfer[] PROGMEM = "IncompleteTransfer";
const char msgInvalidStorageId[] PROGMEM = "InvalidStorageId";
const char msgInvalidObjectHandle[] PROGMEM = "InvalidObjectHandle";
const char msgDevicePropNotSupported[] PROGMEM = "DevicePropNotSupported";
const char msgInvalidObjectFormatCode[] PROGMEM = "InvalidObjectFormatCode";
const char msgStoreFull[] PROGMEM = "StoreFull";
const char msgObjectWriteProtected[] PROGMEM = "ObjectWriteProtected";
const char msgStoreReadOnly[] PROGMEM = "StoreReadOnly";
const char msgAccessDenied[] PROGMEM = "AccessDenied";
const char msgNoThumbnailPresent[] PROGMEM = "NoThumbnailPresent";
const char msgSelfTestFailed[] PROGMEM = "SelfTestFailed";
const char msgPartialDeletion[] PROGMEM = "PartialDeletion";
const char msgStoreNotAvailable[] PROGMEM = "StoreNotAvailable";
const char msgSpecificationByFormatUnsupported [] PROGMEM = "SpecificationByFormatUnsupported";
const char msgNoValidObjectInfo[] PROGMEM = "NoValidObjectInfo";
const char msgInvalidCodeFormat[] PROGMEM = "InvalidCodeFormat";
const char msgUnknownVendorCode[] PROGMEM = "UnknownVendorCode";
const char msgCaptureAlreadyTerminated[] PROGMEM = "CaptureAlreadyTerminated";
const char msgDeviceBusy[] PROGMEM = "DeviceBusy";
const char msgInvalidParentObject[] PROGMEM = "InvalidParentObject";
const char msgInvalidDevicePropFormat[] PROGMEM = "InvalidDevicePropFormat";
const char msgInvalidDevicePropValue[] PROGMEM = "InvalidDevicePropValue";
const char msgInvalidParameter[] PROGMEM = "InvalidParameter";
const char msgSessionAlreadyOpened[] PROGMEM = "SessionAlreadyOpened";
const char msgTransactionCanceled[] PROGMEM = "TransactionCanceled";
const char msgSpecificationOfDestinationUnsupported[] PROGMEM = "SpecificationOfDestinationUnsupported";
#endif
 
#if 0
const char msgUndefined[] PROGMEM = "Undefined";
const char msgBatteryLevel[] PROGMEM = "BatteryLevel";
const char msgFunctionalMode[] PROGMEM = "FunctionalMode";
const char msgImageSize[] PROGMEM = "ImageSize";
const char msgCompressionSetting[] PROGMEM = "CompressionSetting";
const char msgWhiteBalance[] PROGMEM = "WhiteBalance";
const char msgRGBGain[] PROGMEM = "RGBGain";
const char msgFNumber[] PROGMEM = "FNumber";
const char msgFocalLength[] PROGMEM = "FocalLength";
const char msgFocusDistance[] PROGMEM = "FocusDistance";
const char msgFocusMode[] PROGMEM = "FocusMode";
const char msgExposureMeteringMode[] PROGMEM = "ExposureMeteringMode";
const char msgFlashMode[] PROGMEM = "FlashMode";
const char msgExposureTime[] PROGMEM = "ExposureTime";
const char msgExposureProgramMode[] PROGMEM = "ExposureProgramMode";
const char msgExposureIndex[] PROGMEM = "ExposureIndex";
const char msgExposureBiasCompensation[] PROGMEM = "ExposureBiasCompensation";
const char msgDateTime[] PROGMEM = "DateTime";
const char msgCaptureDelay[] PROGMEM = "CaptureDelay";
const char msgStillCaptureMode[] PROGMEM = "StillCaptureMode";
const char msgContrast[] PROGMEM = "Contrast";
const char msgSharpness[] PROGMEM = "Sharpness";
const char msgDigitalZoom[] PROGMEM = "DigitalZoom";
const char msgEffectMode[] PROGMEM = "EffectMode";
const char msgBurstNumber[] PROGMEM = "BurstNumber";
const char msgBurstInterval[] PROGMEM = "BurstInterval";
const char msgTimelapseNumber[] PROGMEM = "TimelapseNumber";
const char msgTimelapseInterval[] PROGMEM = "TimelapseInterval";
const char msgFocusMeteringMode[] PROGMEM = "FocusMeteringMode";
const char msgUploadURL[] PROGMEM = "UploadURL";
const char msgArtist[] PROGMEM = "Artist";
const char msgCopyrightInfo[] PROGMEM = "CopyrightInfo";
#endif
 
#endif //__PTPMSGSTR_H__
/C-OSD/arducam-osd/libraries/PTPCamera/scheduler.cpp
0,0 → 1,88
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "scheduler.h"
 
 
uint8_t DaysPerMonth(time_t t)
{
uint8_t mon = month(t);
switch (mon)
{
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return (IS_LEAP_YEAR(year(t))) ? 29 : 28;
default:
return 31;
}
}
 
bool SchedulerTask::Set(TaskCallback pfunc, uint8_t pt, time_t time, uint8_t num)
{
timeToFire = time;
taskAttribs.bmTaskSet = 1;
taskAttribs.bmEnabled = 0;
taskAttribs.bmPeriodType = pt;
pCallback = pfunc;
countDown = num;
return true;
}
 
bool SchedulerTask::Run(time_t time)
{
if (!IsSet() || !IsEnabled())
return true;
if (time >= timeToFire)
{
pCallback();
if (countDown != DO_IT_FOREVER)
countDown --;
UpdateTime();
}
return true;
}
 
bool SchedulerTask::UpdateTime()
{
if (!countDown)
return true;
switch (taskAttribs.bmPeriodType)
{
case enHourly:
timeToFire += SECS_PER_HOUR;
break;
case enDaily:
timeToFire += SECS_PER_DAY;
break;
case enWeekly:
timeToFire += SECS_PER_WEEK;
break;
case enMonthly:
timeToFire += DaysPerMonth(timeToFire) * SECS_PER_DAY;
break;
case enYearly:
timeToFire += DAYS_PER_YEAR(year(timeToFire));
break;
}
return true;
}
/C-OSD/arducam-osd/libraries/PTPCamera/scheduler.h
0,0 → 1,253
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __SCHEDULER_H__
#define __SCHEDULER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <../Time/Time.h>
#include "WProgram.h"
 
#define DO_IT_FOREVER 0xFF
#define INVALID_TASK_ID 0xFF
#define IS_LEAP_YEAR(Y) ( ((Y)>0) && !((Y)%4) && ( ((Y)%100) || !((Y)%400) ) )
#define DAYS_PER_YEAR(Y) ( ((IS_LEAP_YEAR((Y))) ? 366 : 365) )
 
typedef void (*TaskCallback)();
 
uint8_t DaysPerMonth(time_t t);
 
class SimpleClock
{
time_t unixTime;
public:
SimpleClock() : unixTime(0) {};
SimpleClock(time_t time) : unixTime(time) {};
bool SetTime(time_t time) { if (!time) return false; unixTime = time; return true; };
time_t GetTime() { return unixTime; };
void IncrementTime() { ++unixTime; };
};
 
class SchedulerTask
{
public:
enum PeriodTypes { enOnce, enHourly, enDaily, enWeekly, enMonthly, enYearly };
struct TaskAttributes
{
uint8_t bmAllocated : 1;
uint8_t bmTaskSet : 1;
uint8_t bmEnabled : 1;
uint8_t bmPeriodType : 3;
};
TaskAttributes taskAttribs;
uint8_t countDown;
time_t timeToFire;
TaskCallback pCallback;
bool IsAllocated() { return (taskAttribs.bmAllocated == 1); };
bool IsEnabled() { return (taskAttribs.bmEnabled == 1); };
bool IsSet() { return (taskAttribs.bmTaskSet == 1); };
 
protected:
virtual bool UpdateTime(); // updates time for the next extcution time
 
public:
SchedulerTask() :
countDown(0),
timeToFire(0),
pCallback(NULL)
{ *((uint8_t*)&taskAttribs) = 0; };
void SetAllocated(bool bAllocated) { taskAttribs.bmAllocated = (bAllocated) ? 1 : 0; };
void SetEnabled(bool bEnabled) { taskAttribs.bmEnabled = (bEnabled) ? 1 : 0; };
bool Set(TaskCallback pfunc, uint8_t pt, time_t time, uint8_t num = DO_IT_FOREVER);
bool Reset() { timeToFire = 0; *((uint8_t*)&taskAttribs) = 0; pCallback = NULL; countDown = 0; };
virtual bool Run(time_t time);
};
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
class Scheduler : public SimpleClock
{
TASK_TYPE taskList[MAX_TASKS];
 
uint8_t AllocateTask();
void DeallocateTask(uint8_t task_id);
uint8_t CreateTask(const TaskCallback task, uint8_t type, time_t time, uint8_t num);
public:
uint8_t DailyTask(TaskCallback task, uint8_t hours = 0, uint8_t mins = 0, uint8_t secs = 0, uint8_t num = DO_IT_FOREVER);
uint8_t WeeklyTask(TaskCallback task, uint8_t dow = 1, uint8_t hours = 0, uint8_t mins = 0, uint8_t secs = 0, uint8_t num = DO_IT_FOREVER);
uint8_t MonthlyTask(TaskCallback task, uint8_t day = 0, uint8_t hours = 0, uint8_t mins = 0, uint8_t secs = 0, uint8_t num = DO_IT_FOREVER);
uint8_t YearlyTask(TaskCallback task, uint8_t mon, uint8_t day = 1, uint8_t hours = 0, uint8_t mins = 0, uint8_t secs = 0, uint8_t num = DO_IT_FOREVER);
void KillTask(uint8_t task_id) { DeallocateTask(task_id); };
bool Run();
};
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::AllocateTask()
{
for (uint8_t i=0; i<MAX_TASKS; i++)
if (!taskList[i].IsAllocated())
{
taskList[i].SetAllocated(true);
return i;
}
return INVALID_TASK_ID;
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
void Scheduler<TASK_TYPE, MAX_TASKS>::DeallocateTask(uint8_t id)
{
taskList[id].Reset();
taskList[id].SetAllocated(false);
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::CreateTask(const TaskCallback task, uint8_t type, time_t time, uint8_t num)
{
uint8_t id = AllocateTask();
if (id == INVALID_TASK_ID)
return INVALID_TASK_ID;
if (taskList[id].Set(task, type, time, num))
{
taskList[id].SetEnabled(true);
return id;
}
else
DeallocateTask(id);
return INVALID_TASK_ID;
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::DailyTask(TaskCallback task, uint8_t hours, uint8_t mins, uint8_t secs, uint8_t num)
{
if (hours > 23 || mins > 59 || secs > 59)
return INVALID_TASK_ID;
time_t time = GetTime();
tmElements_t tm;
tm.Hour = hours;
tm.Minute = mins;
tm.Second = secs;
tm.Day = day(time);
tm.Month = month(time);
tm.Year = year(time);
time_t t = makeTime(tm);
if (t < time)
t += SECS_PER_DAY;
return CreateTask(task, SchedulerTask::enDaily, t, num);
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::WeeklyTask(TaskCallback task, uint8_t dow, uint8_t hours, uint8_t mins, uint8_t secs, uint8_t num)
{
if (hours > 23 || mins > 59 || secs > 59 || dow < 1 || dow > 7)
return INVALID_TASK_ID;
time_t time = GetTime();
tmElements_t tm;
tm.Hour = hours;
tm.Minute = mins;
tm.Second = secs;
tm.Day = day(time);
tm.Month = month(time);
tm.Year = year(time);
time_t t = makeTime(tm);
uint8_t wd = weekday(time);
uint8_t days_to_add = (wd < dow) ? dow - wd : 7 - wd + dow;
if (days_to_add)
t += days_to_add * SECS_PER_DAY;
if (t < time)
t+= SECS_PER_WEEK;
return CreateTask(task, SchedulerTask::enWeekly, t, num);
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::MonthlyTask(TaskCallback task, uint8_t day, uint8_t hours, uint8_t mins, uint8_t secs, uint8_t num)
{
if (hours > 23 || mins > 59 || secs > 59 || day > 31)
return INVALID_TASK_ID;
time_t time = GetTime();
tmElements_t tm;
tm.Hour = hours;
tm.Minute = mins;
tm.Second = secs;
tm.Day = day;
tm.Month = month(time);
tm.Year = year(time);
time_t t = makeTime(tm);
if (t < time)
t += DaysPerMonth(t) * SECS_PER_DAY;
return CreateTask((const TaskCallback)task, SchedulerTask::enMonthly, t, (uint8_t)num);
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
uint8_t Scheduler<TASK_TYPE, MAX_TASKS>::YearlyTask(TaskCallback task, uint8_t mon, uint8_t day, uint8_t hours, uint8_t mins, uint8_t secs, uint8_t num)
{
if (hours > 23 || mins > 59 || secs > 59 || day > 31 || mon > 12)
return INVALID_TASK_ID;
time_t time = GetTime();
uint16_t y = year(time);
tmElements_t tm;
tm.Hour = hours;
tm.Minute = mins;
tm.Second = secs;
tm.Day = day;
tm.Month = mon;
tm.Year = y;
time_t t = makeTime(tm);
if (t < time)
t += DAYS_PER_YEAR(y) * SECS_PER_DAY;
return CreateTask(task, SchedulerTask::enYearly, t, num);
}
 
template <class TASK_TYPE, const uint8_t MAX_TASKS>
bool Scheduler<TASK_TYPE, MAX_TASKS>::Run()
{
IncrementTime();
time_t time = GetTime();
for (uint8_t i=0; i<MAX_TASKS; i++)
if (!taskList[i].Run(time))
return false;
return true;
}
 
#endif // __SCHEDULER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/simplefifo.h
0,0 → 1,86
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#if !defined(__SIMPLEFIFO_H__)
#define __SIMPLEFIFO_H__
 
template <class TYPE, const uint8_t SIZE>
class SimpleFIFO
{
TYPE theBuffer[SIZE];
uint8_t tail, head;
private:
void inc(uint8_t &val)
{
val ++;
if (val >= SIZE)
val = 0;
};
public:
SimpleFIFO() :
tail(0),
head(0)
{
};
uint8_t Size()
{
if (tail == head)
return 0;
if (tail > head)
return (tail - head);
else
return (SIZE - head + tail);
};
void Empty()
{
tail = head = 0;
};
void Push(TYPE val)
{
if (Size() >= SIZE-1)
return;
theBuffer[tail] = val;
inc(tail);
// Serial.print(">");
// Serial.print(head,DEC);
// Serial.print(":");
// Serial.print(tail,DEC);
// Serial.print(":");
// Serial.println(Size(),DEC);
};
TYPE Pop()
{
if (head == tail)
return (TYPE)0;
TYPE ret = theBuffer[head];
inc(head);
// Serial.print("<");
// Serial.print(head,DEC);
// Serial.print(":");
// Serial.print(tail,DEC);
// Serial.print(":");
// Serial.println(Size(),DEC);
return ret;
};
};
 
 
#endif // __SIMPLEFIFO_H__
/C-OSD/arducam-osd/libraries/PTPCamera/simpletimer.cpp
0,0 → 1,88
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "simpletimer.h"
 
bool SimpleTimer::Set(TimerCallback task, uint32_t timeout, bool once)
{
if (!task)
return false;
timeOut = timeout;
pCallback = task;
timerAttribs.bmOneTime = (once) ? 1 : 0;
timerAttribs.bmTimerSet = 1;
timerAttribs.bmEnabled = 0;
return true;
}
 
void SimpleTimer::Reset()
{
timerAttribs.bmTimerSet = 0;
timerAttribs.bmEnabled = 0;
timerAttribs.bmOneTime = 0;
timerAttribs.bmSign = 0;
pCallback = NULL;
}
 
bool SimpleTimer::Enable()
{
if (!pCallback || !timeOut)
return false;
uint32_t time = millis();
timeToFire = time + timeOut;
timerAttribs.bmEnabled = 1;
timerAttribs.bmSign = time & MSB_MASK;
return true;
}
 
void SimpleTimer::Disable()
{
timerAttribs.bmEnabled = 0;
}
 
void SimpleTimer::Run()
{
if (timerAttribs.bmEnabled == 0)
return;
if (TimeoutEllapsed())
{
if (pCallback)
pCallback();
if (timerAttribs.bmOneTime == 1)
timerAttribs.bmEnabled = 0;
}
}
 
bool SimpleTimer::TimeoutEllapsed()
{
bool ret = false;
uint32_t time = millis();
if (time >= timeToFire || (time < timeToFire && timerAttribs.bmSign == 1) )
{
timeToFire = time + timeOut;
ret = true;
}
timerAttribs.bmSign = (time & MSB_MASK) ? 1 : 0;
return ret;
}
/C-OSD/arducam-osd/libraries/PTPCamera/simpletimer.h
0,0 → 1,108
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __SIMPLETIMER_H__
#define __SIMPLETIMER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "WProgram.h"
 
#define MSB_MASK 0x80000000
 
typedef void (*TimerCallback)();
 
class SimpleTimer
{
struct TimerAttributes
{
uint8_t bmAllocated : 1; // 1 if allocated for some routine
uint8_t bmTimerSet : 1; // 1 if all data for the timer is set
uint8_t bmEnabled : 1; // 1 if enabled and running
uint8_t bmOneTime : 1; // 1 if the task should be executed onece
uint8_t bmSign : 1; // necessary to handle millis() rollovers
};
TimerAttributes timerAttribs;
uint32_t timeOut;
uint32_t timeToFire;
TimerCallback pCallback;
bool TimeoutEllapsed();
public:
SimpleTimer() : timeOut(0), timeToFire(0), pCallback(NULL) { *((uint8_t*)&timerAttribs) = 0; };
void SetAllocated(bool yes) { timerAttribs.bmAllocated = (yes) ? 1 : 0; };
bool IsAllocated() { return timerAttribs.bmAllocated == 1; };
bool IsEnabled() { return timerAttribs.bmEnabled == 1; };
bool Set(TimerCallback task, uint32_t timeout, bool once = false);
void Reset();
bool Enable();
void Disable();
void Run();
 
uint32_t TimeLeft()
{
if (timerAttribs.bmEnabled != 1)
return 0;
 
int32_t time_left = timeToFire - millis();
return (time_left > 0) ? time_left : 0;
};
};
 
#define INVALID_TIMER_ID 0
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
class TimerPool
{
TIMER_TYPE thePool[POOL_SIZE];
 
public:
TimerPool() {};
uint8_t SetTimer(TimerCallback pfunc, uint32_t msec, bool once);
bool EnableTimer(uint8_t timer_id) { if (!timer_id) return false; thePool[timer_id-1].Enable(); return true; };
bool DisableTimer(uint8_t timer_id) { if (!timer_id) return false; thePool[timer_id-1].Disable(); return true; };
bool ReleaseTimer(uint8_t &timer_id){ if (!timer_id) return false; thePool[timer_id-1].SetAllocated(false); thePool[timer_id-1].Reset(); timer_id = 0; return true; };
void Run();
};
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
uint8_t TimerPool<TIMER_TYPE, POOL_SIZE>::SetTimer(TimerCallback pfunc, uint32_t msec, bool once)
{
for (uint8_t i=0; i<POOL_SIZE; i++)
{
if (!thePool[i].IsAllocated())
{
thePool[i].SetAllocated(true);
thePool[i].SetTimer(pfunc, msec, once);
return i + 1;
}
}
return INVALID_TIMER_ID;
}
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
void TimerPool<TIMER_TYPE, POOL_SIZE>::Run()
{
for (uint8_t i=0; i<POOL_SIZE; i++)
thePool[i].Run();
}
 
#endif // __SIMPLETIMER_H__
/C-OSD/arducam-osd/libraries/PTPCamera/valuelist.h
0,0 → 1,238
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#if !defined(__VALUELIST_H__)
#define __VALUELIST_H__
 
#include <avr/eeprom.h>
#include "WProgram.h"
 
 
template <class ValueType, const uint8_t TitleSize>
struct ValueTitle
{
ValueType value;
const char title[TitleSize];
};
 
template <class ValueType, const uint16_t ListSize>
class ValueList
{
public:
uint16_t listSize;
ValueType valueList[ListSize];
ValueType currentValue;
 
ValueType GetNext()
{
for (uint16_t i=0; i<listSize; i++)
if (valueList[i] == currentValue)
return ((i+1 < listSize) ? valueList[i+1] : currentValue);
return currentValue;
};
 
ValueType GetPrev()
{
for (uint16_t i=0; i<listSize; i++)
if (valueList[i] == currentValue)
return ((i-1 >= 0) ? valueList[i-1] : currentValue);
return currentValue;
};
};
 
 
 
template <class ValueType, const uint8_t TitleSize>
const char* FindTitle(uint8_t size, const ValueTitle<ValueType, TitleSize> *p, ValueType val)
{
for (int i=0; i<size; i++)
{
if (pgm_read_byte(&(p[i].value)) == val)
return (const char*)p[i].title;
}
return PSTR("N/A");
}
 
 
class EEPROMByteList
{
const uint16_t listOffset;
const uint8_t maxListSize;
uint8_t listSize;
 
uint16_t GetValueAddress(uint8_t val)
{
uint16_t tail = listOffset+listSize+2;
for (uint16_t i=listOffset+1; i<tail; i++)
if (eeprom_read_byte((uint8_t*)i) == val)
return i;
 
return 0xffff;
};
public:
EEPROMByteList(uint16_t list_offset, uint16_t max_size) : listOffset(list_offset), maxListSize(max_size), listSize(0)
{
};
uint16_t GetValueIndex(uint8_t val)
{
uint16_t addr = GetValueAddress(val);
 
return (addr == 0xffff) ? addr : addr - listOffset - 1;
};
 
void SetSize(uint8_t size)
{
listSize = (size < maxListSize) ? size : maxListSize;
if (eeprom_read_byte((uint8_t*) listOffset) != listSize)
eeprom_write_byte((uint8_t*) listOffset, listSize);
};
uint8_t GetSize()
{
return listSize;
};
uint8_t Get(uint8_t i)
{
return (eeprom_read_byte((uint8_t*)(listOffset + 1 + ((i < listSize) ? i : listOffset+listSize-1))));
};
void Set(uint8_t i, uint8_t val)
{
if (i < listSize)
{
uint16_t pos = listOffset + i + 1;
if (eeprom_read_byte((uint8_t*) pos) != val)
eeprom_write_byte((uint8_t*) pos, val);
}
};
uint8_t GetNext(uint8_t val, uint8_t di=1)
{
uint16_t addr = GetValueAddress(val);
 
uint16_t tail = listOffset+listSize;
 
if (addr == 0xffff)
return eeprom_read_byte((uint8_t*)tail);
 
addr += di;
 
return eeprom_read_byte((uint8_t*)((addr > tail) ? tail : addr));
};
 
uint8_t GetPrev(uint8_t val, uint8_t di=1)
{
uint16_t addr = GetValueAddress(val);
 
if (addr == 0xffff)
return eeprom_read_byte((uint8_t*)(listOffset+1));
 
addr -= di;
 
return eeprom_read_byte((uint8_t*)((addr <= listOffset) ? listOffset+1 : addr));
};
};
 
 
 
template <class VALUE_TYPE, const uint16_t MAX_LIST_SIZE>
class SRAMValueList
{
VALUE_TYPE theList[MAX_LIST_SIZE];
uint16_t listSize;
 
uint16_t GetValueAddress(VALUE_TYPE val)
{
for (uint16_t i=0; i<listSize; i++)
if (theList[i] == val)
return i;
 
return 0xffff;
};
 
public:
SRAMValueList() : listSize(0)
{
};
 
uint16_t GetValueIndex(VALUE_TYPE val)
{
return GetValueAddress(val);
};
void SetSize(uint16_t size)
{
listSize = (size <= MAX_LIST_SIZE) ? size : MAX_LIST_SIZE;
};
uint16_t GetSize()
{
return listSize;
};
VALUE_TYPE Get(uint16_t i)
{
return (theList[(i < listSize) ? i : listSize-1]);
};
void Set(uint16_t i, VALUE_TYPE val)
{
if (i < listSize)
theList[i] = val;
};
void Append(VALUE_TYPE val)
{
if (listSize < MAX_LIST_SIZE)
theList[listSize++] = val;
};
uint8_t GetNext(VALUE_TYPE val, uint8_t di=1)
{
uint16_t addr = GetValueAddress(val);
 
if (addr == 0xffff)
return theList[(addr < listSize) ? addr : listSize - 1];
 
addr += di;
 
return theList[(addr < listSize) ? addr : listSize-1];
};
 
uint8_t GetPrev(VALUE_TYPE val, uint8_t di=1)
{
uint16_t addr = GetValueAddress(val);
 
if (addr == 0xffff)
return theList[0];
 
addr -= di;
 
return theList[(addr < listSize) ? addr : 0];
};
};
 
#endif // #define __VALUELIST_H__
/C-OSD/arducam-osd/libraries/SimpleTimer/SimpleTimer.cpp
0,0 → 1,88
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#include "SimpleTimer.h"
 
bool SimpleTimer::Set(TimerCallback task, uint32_t timeout, bool once)
{
if (!task)
return false;
timeOut = timeout;
pCallback = task;
timerAttribs.bmOneTime = (once) ? 1 : 0;
timerAttribs.bmTimerSet = 1;
timerAttribs.bmEnabled = 0;
return true;
}
 
void SimpleTimer::Reset()
{
timerAttribs.bmTimerSet = 0;
timerAttribs.bmEnabled = 0;
timerAttribs.bmOneTime = 0;
timerAttribs.bmSign = 0;
pCallback = NULL;
}
 
bool SimpleTimer::Enable()
{
if (!pCallback || !timeOut)
return false;
uint32_t time = millis();
timeToFire = time + timeOut;
timerAttribs.bmEnabled = 1;
timerAttribs.bmSign = time & MSB_MASK;
return true;
}
 
void SimpleTimer::Disable()
{
timerAttribs.bmEnabled = 0;
}
 
void SimpleTimer::Run()
{
if (timerAttribs.bmEnabled == 0)
return;
if (TimeoutEllapsed())
{
if (pCallback)
pCallback();
if (timerAttribs.bmOneTime == 1)
timerAttribs.bmEnabled = 0;
}
}
 
bool SimpleTimer::TimeoutEllapsed()
{
bool ret = false;
uint32_t time = millis();
if (time >= timeToFire || (time < timeToFire && timerAttribs.bmSign == 1) )
{
timeToFire = time + timeOut;
ret = true;
}
timerAttribs.bmSign = (time & MSB_MASK) ? 1 : 0;
return ret;
}
/C-OSD/arducam-osd/libraries/SimpleTimer/SimpleTimer.h
0,0 → 1,113
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved.
 
This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").
 
Contact information
-------------------
 
Circuits At Home, LTD
Web : http://www.circuitsathome.com
e-mail : support@circuitsathome.com
*/
#ifndef __SIMPLETIMER_H__
#define __SIMPLETIMER_H__
 
#include <inttypes.h>
#include <avr/pgmspace.h>
// Get the common arduino functions
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "wiring.h"
#endif
 
#define MSB_MASK 0x80000000
 
typedef void (*TimerCallback)();
 
class SimpleTimer
{
struct TimerAttributes
{
uint8_t bmAllocated : 1; // 1 if allocated for some routine
uint8_t bmTimerSet : 1; // 1 if all data for the timer is set
uint8_t bmEnabled : 1; // 1 if enabled and running
uint8_t bmOneTime : 1; // 1 if the task should be executed onece
uint8_t bmSign : 1; // necessary to handle millis() rollovers
};
TimerAttributes timerAttribs;
uint32_t timeOut;
uint32_t timeToFire;
TimerCallback pCallback;
bool TimeoutEllapsed();
public:
SimpleTimer() : timeOut(0), timeToFire(0), pCallback(NULL) { *((uint8_t*)&timerAttribs) = 0; };
void SetAllocated(bool yes) { timerAttribs.bmAllocated = (yes) ? 1 : 0; };
bool IsAllocated() { return timerAttribs.bmAllocated == 1; };
bool IsEnabled() { return timerAttribs.bmEnabled == 1; };
bool Set(TimerCallback task, uint32_t timeout, bool once = false);
void Reset();
bool Enable();
void Disable();
void Run();
 
uint32_t TimeLeft()
{
if (timerAttribs.bmEnabled != 1)
return 0;
 
int32_t time_left = timeToFire - millis();
return (time_left > 0) ? time_left : 0;
};
};
 
#define INVALID_TIMER_ID 0
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
class TimerPool
{
TIMER_TYPE thePool[POOL_SIZE];
 
public:
TimerPool() {};
uint8_t SetTimer(TimerCallback pfunc, uint32_t msec, bool once);
bool EnableTimer(uint8_t timer_id) { if (!timer_id) return false; thePool[timer_id-1].Enable(); return true; };
bool DisableTimer(uint8_t timer_id) { if (!timer_id) return false; thePool[timer_id-1].Disable(); return true; };
bool ReleaseTimer(uint8_t &timer_id){ if (!timer_id) return false; thePool[timer_id-1].SetAllocated(false); thePool[timer_id-1].Reset(); timer_id = 0; return true; };
void Run();
};
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
uint8_t TimerPool<TIMER_TYPE, POOL_SIZE>::SetTimer(TimerCallback pfunc, uint32_t msec, bool once)
{
for (uint8_t i=0; i<POOL_SIZE; i++)
{
if (!thePool[i].IsAllocated())
{
thePool[i].SetAllocated(true);
thePool[i].SetTimer(pfunc, msec, once);
return i + 1;
}
}
return INVALID_TIMER_ID;
}
 
template <class TIMER_TYPE, const uint8_t POOL_SIZE>
void TimerPool<TIMER_TYPE, POOL_SIZE>::Run()
{
for (uint8_t i=0; i<POOL_SIZE; i++)
thePool[i].Run();
}
 
#endif // __SIMPLETIMER_H__
/C-OSD/arducam-osd/libraries/USBHOST/Max3421e.cpp
0,0 → 1,270
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* MAX3421E USB host controller support */
 
#include "Max3421e.h"
// #include "Max3421e_constants.h"
 
static byte vbusState;
 
/* Functions */
 
/* Constructor */
MAX3421E::MAX3421E()
{
spi_init();
pinMode( MAX_INT, INPUT);
pinMode( MAX_GPX, INPUT );
pinMode( MAX_SS, OUTPUT );
digitalWrite(MAX_SS,HIGH);
pinMode( MAX_RESET, OUTPUT );
digitalWrite( MAX_RESET, HIGH ); //release MAX3421E from reset
}
 
byte MAX3421E::getVbusState( void )
{
return( vbusState );
}
/* initialization */
//void MAX3421E::init()
//{
// /* setup pins */
// pinMode( MAX_INT, INPUT);
// pinMode( MAX_GPX, INPUT );
// pinMode( MAX_SS, OUTPUT );
// //pinMode( BPNT_0, OUTPUT );
// //pinMode( BPNT_1, OUTPUT );
// //digitalWrite( BPNT_0, LOW );
// //digitalWrite( BPNT_1, LOW );
// Deselect_MAX3421E;
// pinMode( MAX_RESET, OUTPUT );
// digitalWrite( MAX_RESET, HIGH ); //release MAX3421E from reset
//}
//byte MAX3421E::getVbusState( void )
//{
// return( vbusState );
//}
//void MAX3421E::toggle( byte pin )
//{
// digitalWrite( pin, HIGH );
// digitalWrite( pin, LOW );
//}
/* Single host register write */
void MAX3421E::regWr( byte reg, byte val)
{
digitalWrite(MAX_SS,LOW);
SPDR = ( reg | 0x02 );
while(!( SPSR & ( 1 << SPIF )));
SPDR = val;
while(!( SPSR & ( 1 << SPIF )));
digitalWrite(MAX_SS,HIGH);
return;
}
/* multiple-byte write */
/* returns a pointer to a memory position after last written */
char * MAX3421E::bytesWr( byte reg, byte nbytes, char * data )
{
digitalWrite(MAX_SS,LOW);
SPDR = ( reg | 0x02 );
while( nbytes-- ) {
while(!( SPSR & ( 1 << SPIF ))); //check if previous byte was sent
SPDR = ( *data ); // send next data byte
data++; // advance data pointer
}
while(!( SPSR & ( 1 << SPIF )));
digitalWrite(MAX_SS,HIGH);
return( data );
}
/* GPIO write. GPIO byte is split between 2 registers, so two writes are needed to write one byte */
/* GPOUT bits are in the low nibble. 0-3 in IOPINS1, 4-7 in IOPINS2 */
/* upper 4 bits of IOPINS1, IOPINS2 are read-only, so no masking is necessary */
void MAX3421E::gpioWr( byte val )
{
regWr( rIOPINS1, val );
val = val >>4;
regWr( rIOPINS2, val );
return;
}
/* Single host register read */
byte MAX3421E::regRd( byte reg )
{
byte tmp;
digitalWrite(MAX_SS,LOW);
SPDR = reg;
while(!( SPSR & ( 1 << SPIF )));
SPDR = 0; //send empty byte
while(!( SPSR & ( 1 << SPIF )));
digitalWrite(MAX_SS,HIGH);
return( SPDR );
}
/* multiple-bytes register read */
/* returns a pointer to a memory position after last read */
char * MAX3421E::bytesRd ( byte reg, byte nbytes, char * data )
{
digitalWrite(MAX_SS,LOW);
SPDR = reg;
while(!( SPSR & ( 1 << SPIF ))); //wait
while( nbytes ) {
SPDR = 0; //send empty byte
nbytes--;
while(!( SPSR & ( 1 << SPIF )));
*data = SPDR;
data++;
}
digitalWrite(MAX_SS,HIGH);
return( data );
}
/* GPIO read. See gpioWr for explanation */
/* GPIN pins are in high nibbles of IOPINS1, IOPINS2 */
byte MAX3421E::gpioRd( void )
{
byte tmpbyte = 0;
tmpbyte = regRd( rIOPINS2 ); //pins 4-7
tmpbyte &= 0xf0; //clean lower nibble
tmpbyte |= ( regRd( rIOPINS1 ) >>4 ) ; //shift low bits and OR with upper from previous operation. Upper nibble zeroes during shift, at least with this compiler
return( tmpbyte );
}
/* reset MAX3421E using chip reset bit. SPI configuration is not affected */
boolean MAX3421E::reset()
{
byte tmp = 0;
regWr( rUSBCTL, bmCHIPRES ); //Chip reset. This stops the oscillator
regWr( rUSBCTL, 0x00 ); //Remove the reset
while(!(regRd( rUSBIRQ ) & bmOSCOKIRQ )) { //wait until the PLL is stable
tmp++; //timeout after 256 attempts
if( tmp == 0 ) {
return( false );
}
}
return( true );
}
/* turn USB power on/off */
/* does nothing, returns TRUE. Left for compatibility with old sketches */
/* will be deleted eventually */
///* ON pin of VBUS switch (MAX4793 or similar) is connected to GPOUT7 */
///* OVERLOAD pin of Vbus switch is connected to GPIN7 */
///* OVERLOAD state low. NO OVERLOAD or VBUS OFF state high. */
boolean MAX3421E::vbusPwr ( boolean action )
{
// byte tmp;
// tmp = regRd( rIOPINS2 ); //copy of IOPINS2
// if( action ) { //turn on by setting GPOUT7
// tmp |= bmGPOUT7;
// }
// else { //turn off by clearing GPOUT7
// tmp &= ~bmGPOUT7;
// }
// regWr( rIOPINS2, tmp ); //send GPOUT7
// if( action ) {
// delay( 60 );
// }
// if (( regRd( rIOPINS2 ) & bmGPIN7 ) == 0 ) { // check if overload is present. MAX4793 /FLAG ( pin 4 ) goes low if overload
// return( false );
// }
return( true ); // power on/off successful
}
/* probe bus to determine device presense and speed and switch host to this speed */
void MAX3421E::busprobe( void )
{
byte bus_sample;
bus_sample = regRd( rHRSL ); //Get J,K status
bus_sample &= ( bmJSTATUS|bmKSTATUS ); //zero the rest of the byte
switch( bus_sample ) { //start full-speed or low-speed host
case( bmJSTATUS ):
if(( regRd( rMODE ) & bmLOWSPEED ) == 0 ) {
regWr( rMODE, MODE_FS_HOST ); //start full-speed host
vbusState = FSHOST;
}
else {
regWr( rMODE, MODE_LS_HOST); //start low-speed host
vbusState = LSHOST;
}
break;
case( bmKSTATUS ):
if(( regRd( rMODE ) & bmLOWSPEED ) == 0 ) {
regWr( rMODE, MODE_LS_HOST ); //start low-speed host
vbusState = LSHOST;
}
else {
regWr( rMODE, MODE_FS_HOST ); //start full-speed host
vbusState = FSHOST;
}
break;
case( bmSE1 ): //illegal state
vbusState = SE1;
break;
case( bmSE0 ): //disconnected state
vbusState = SE0;
break;
}//end switch( bus_sample )
}
/* MAX3421E initialization after power-on */
void MAX3421E::powerOn()
{
/* Configure full-duplex SPI, interrupt pulse */
regWr( rPINCTL,( bmFDUPSPI + bmINTLEVEL + bmGPXB )); //Full-duplex SPI, level interrupt, GPX
if( reset() == false ) { //stop/start the oscillator
Serial.println("Error: OSCOKIRQ failed to assert");
}
 
/* configure host operation */
regWr( rMODE, bmDPPULLDN|bmDMPULLDN|bmHOST|bmSEPIRQ ); // set pull-downs, Host, Separate GPIN IRQ on GPX
regWr( rHIEN, bmCONDETIE|bmFRAMEIE ); //connection detection
/* check if device is connected */
regWr( rHCTL,bmSAMPLEBUS ); // sample USB bus
while(!(regRd( rHCTL ) & bmSAMPLEBUS )); //wait for sample operation to finish
busprobe(); //check if anything is connected
regWr( rHIRQ, bmCONDETIRQ ); //clear connection detect interrupt
regWr( rCPUCTL, 0x01 ); //enable interrupt pin
}
/* MAX3421 state change task and interrupt handler */
byte MAX3421E::Task( void )
{
byte rcode = 0;
byte pinvalue;
//Serial.print("Vbus state: ");
//Serial.println( vbusState, HEX );
pinvalue = digitalRead( MAX_INT );
if( pinvalue == LOW ) {
rcode = IntHandler();
}
pinvalue = digitalRead( MAX_GPX );
if( pinvalue == LOW ) {
GpxHandler();
}
// usbSM(); //USB state machine
return( rcode );
}
byte MAX3421E::IntHandler()
{
byte HIRQ;
byte HIRQ_sendback = 0x00;
HIRQ = regRd( rHIRQ ); //determine interrupt source
//if( HIRQ & bmFRAMEIRQ ) { //->1ms SOF interrupt handler
// HIRQ_sendback |= bmFRAMEIRQ;
//}//end FRAMEIRQ handling
if( HIRQ & bmCONDETIRQ ) {
busprobe();
HIRQ_sendback |= bmCONDETIRQ;
}
/* End HIRQ interrupts handling, clear serviced IRQs */
regWr( rHIRQ, HIRQ_sendback );
return( HIRQ_sendback );
}
byte MAX3421E::GpxHandler()
{
byte GPINIRQ = regRd( rGPINIRQ ); //read GPIN IRQ register
// if( GPINIRQ & bmGPINIRQ7 ) { //vbus overload
// vbusPwr( OFF ); //attempt powercycle
// delay( 1000 );
// vbusPwr( ON );
// regWr( rGPINIRQ, bmGPINIRQ7 );
// }
return( GPINIRQ );
}
 
//void MAX3421E::usbSM( void ) //USB state machine
//{
//
//
//}
/C-OSD/arducam-osd/libraries/USBHOST/Max3421e.h
0,0 → 1,54
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* MAX3421E functions */
#ifndef _MAX3421E_H_
#define _MAX3421E_H_
 
 
//#include <Spi.h>
//#include <WProgram.h>
#include "WProgram.h"
#include "Max3421e_constants.h"
 
class MAX3421E /* : public SPI */ {
// byte vbusState;
public:
MAX3421E( void );
byte getVbusState( void );
// void toggle( byte pin );
static void regWr( byte, byte );
char * bytesWr( byte, byte, char * );
static void gpioWr( byte );
byte regRd( byte );
char * bytesRd( byte, byte, char * );
byte gpioRd( void );
boolean reset();
boolean vbusPwr ( boolean );
void busprobe( void );
void powerOn();
byte IntHandler();
byte GpxHandler();
byte Task();
private:
static void spi_init() {
uint8_t tmp;
// initialize SPI pins
pinMode(SCK_PIN, OUTPUT);
pinMode(MOSI_PIN, OUTPUT);
pinMode(MISO_PIN, INPUT);
pinMode(SS_PIN, OUTPUT);
digitalWrite( SS_PIN, HIGH );
/* mode 00 (CPOL=0, CPHA=0) master, fclk/2. Mode 11 (CPOL=11, CPHA=11) is also supported by MAX3421E */
SPCR = 0x50;
SPSR = 0x01;
/**/
tmp = SPSR;
tmp = SPDR;
}
// void init();
friend class Max_LCD;
};
 
 
 
 
#endif //_MAX3421E_H_
/C-OSD/arducam-osd/libraries/USBHOST/Max3421e_constants.h
0,0 → 1,236
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* MAX3421E register/bit names and bitmasks */
 
#ifndef _MAX3421Econstants_h_
#define _MAX3421Econstants_h_
 
/* SPI pins for diffrent Arduinos */
 
#if defined(__AVR_ATmega1280__) || (__AVR_ATmega2560__)
#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#define SS_PIN 53
#endif
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
#define SCK_PIN 13
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10
#endif
 
#define MAX_SS 10
#define MAX_INT 9
#define MAX_GPX 8
#define MAX_RESET 7
 
/* "Breakpoint" pins for debugging */
//#define BPNT_0 3
//#define BPNT_1 2
//#define Select_MAX3421E digitalWrite(MAX_SS,LOW)
//#define Deselect_MAX3421E digitalWrite(MAX_SS,HIGH)
 
/* */
 
#define ON true
#define OFF false
 
/* VBUS states */
#define SE0 0
#define SE1 1
#define FSHOST 2
#define LSHOST 3
 
/* MAX3421E command byte format: rrrrr0wa where 'r' is register number */
//
// MAX3421E Registers in HOST mode.
//
#define rRCVFIFO 0x08 //1<<3
#define rSNDFIFO 0x10 //2<<3
#define rSUDFIFO 0x20 //4<<3
#define rRCVBC 0x30 //6<<3
#define rSNDBC 0x38 //7<<3
 
#define rUSBIRQ 0x68 //13<<3
/* USBIRQ Bits */
#define bmVBUSIRQ 0x40 //b6
#define bmNOVBUSIRQ 0x20 //b5
#define bmOSCOKIRQ 0x01 //b0
 
#define rUSBIEN 0x70 //14<<3
/* USBIEN Bits */
#define bmVBUSIE 0x40 //b6
#define bmNOVBUSIE 0x20 //b5
#define bmOSCOKIE 0x01 //b0
 
#define rUSBCTL 0x78 //15<<3
/* USBCTL Bits */
#define bmCHIPRES 0x20 //b5
#define bmPWRDOWN 0x10 //b4
 
#define rCPUCTL 0x80 //16<<3
/* CPUCTL Bits */
#define bmPUSLEWID1 0x80 //b7
#define bmPULSEWID0 0x40 //b6
#define bmIE 0x01 //b0
 
#define rPINCTL 0x88 //17<<3
/* PINCTL Bits */
#define bmFDUPSPI 0x10 //b4
#define bmINTLEVEL 0x08 //b3
#define bmPOSINT 0x04 //b2
#define bmGPXB 0x02 //b1
#define bmGPXA 0x01 //b0
// GPX pin selections
#define GPX_OPERATE 0x00
#define GPX_VBDET 0x01
#define GPX_BUSACT 0x02
#define GPX_SOF 0x03
 
#define rREVISION 0x90 //18<<3
 
#define rIOPINS1 0xa0 //20<<3
 
/* IOPINS1 Bits */
#define bmGPOUT0 0x01
#define bmGPOUT1 0x02
#define bmGPOUT2 0x04
#define bmGPOUT3 0x08
#define bmGPIN0 0x10
#define bmGPIN1 0x20
#define bmGPIN2 0x40
#define bmGPIN3 0x80
 
#define rIOPINS2 0xa8 //21<<3
/* IOPINS2 Bits */
#define bmGPOUT4 0x01
#define bmGPOUT5 0x02
#define bmGPOUT6 0x04
#define bmGPOUT7 0x08
#define bmGPIN4 0x10
#define bmGPIN5 0x20
#define bmGPIN6 0x40
#define bmGPIN7 0x80
 
#define rGPINIRQ 0xb0 //22<<3
/* GPINIRQ Bits */
#define bmGPINIRQ0 0x01
#define bmGPINIRQ1 0x02
#define bmGPINIRQ2 0x04
#define bmGPINIRQ3 0x08
#define bmGPINIRQ4 0x10
#define bmGPINIRQ5 0x20
#define bmGPINIRQ6 0x40
#define bmGPINIRQ7 0x80
 
#define rGPINIEN 0xb8 //23<<3
/* GPINIEN Bits */
#define bmGPINIEN0 0x01
#define bmGPINIEN1 0x02
#define bmGPINIEN2 0x04
#define bmGPINIEN3 0x08
#define bmGPINIEN4 0x10
#define bmGPINIEN5 0x20
#define bmGPINIEN6 0x40
#define bmGPINIEN7 0x80
 
#define rGPINPOL 0xc0 //24<<3
/* GPINPOL Bits */
#define bmGPINPOL0 0x01
#define bmGPINPOL1 0x02
#define bmGPINPOL2 0x04
#define bmGPINPOL3 0x08
#define bmGPINPOL4 0x10
#define bmGPINPOL5 0x20
#define bmGPINPOL6 0x40
#define bmGPINPOL7 0x80
 
#define rHIRQ 0xc8 //25<<3
/* HIRQ Bits */
#define bmBUSEVENTIRQ 0x01 // indicates BUS Reset Done or BUS Resume
#define bmRWUIRQ 0x02
#define bmRCVDAVIRQ 0x04
#define bmSNDBAVIRQ 0x08
#define bmSUSDNIRQ 0x10
#define bmCONDETIRQ 0x20
#define bmFRAMEIRQ 0x40
#define bmHXFRDNIRQ 0x80
 
#define rHIEN 0xd0 //26<<3
/* HIEN Bits */
#define bmBUSEVENTIE 0x01
#define bmRWUIE 0x02
#define bmRCVDAVIE 0x04
#define bmSNDBAVIE 0x08
#define bmSUSDNIE 0x10
#define bmCONDETIE 0x20
#define bmFRAMEIE 0x40
#define bmHXFRDNIE 0x80
 
#define rMODE 0xd8 //27<<3
/* MODE Bits */
#define bmHOST 0x01
#define bmLOWSPEED 0x02
#define bmHUBPRE 0x04
#define bmSOFKAENAB 0x08
#define bmSEPIRQ 0x10
#define bmDELAYISO 0x20
#define bmDMPULLDN 0x40
#define bmDPPULLDN 0x80
 
#define rPERADDR 0xe0 //28<<3
 
#define rHCTL 0xe8 //29<<3
/* HCTL Bits */
#define bmBUSRST 0x01
#define bmFRMRST 0x02
#define bmSAMPLEBUS 0x04
#define bmSIGRSM 0x08
#define bmRCVTOG0 0x10
#define bmRCVTOG1 0x20
#define bmSNDTOG0 0x40
#define bmSNDTOG1 0x80
 
#define rHXFR 0xf0 //30<<3
/* Host transfer token values for writing the HXFR register (R30) */
/* OR this bit field with the endpoint number in bits 3:0 */
#define tokSETUP 0x10 // HS=0, ISO=0, OUTNIN=0, SETUP=1
#define tokIN 0x00 // HS=0, ISO=0, OUTNIN=0, SETUP=0
#define tokOUT 0x20 // HS=0, ISO=0, OUTNIN=1, SETUP=0
#define tokINHS 0x80 // HS=1, ISO=0, OUTNIN=0, SETUP=0
#define tokOUTHS 0xA0 // HS=1, ISO=0, OUTNIN=1, SETUP=0
#define tokISOIN 0x40 // HS=0, ISO=1, OUTNIN=0, SETUP=0
#define tokISOOUT 0x60 // HS=0, ISO=1, OUTNIN=1, SETUP=0
 
#define rHRSL 0xf8 //31<<3
/* HRSL Bits */
#define bmRCVTOGRD 0x10
#define bmSNDTOGRD 0x20
#define bmKSTATUS 0x40
#define bmJSTATUS 0x80
#define bmSE0 0x00 //SE0 - disconnect state
#define bmSE1 0xc0 //SE1 - illegal state
/* Host error result codes, the 4 LSB's in the HRSL register */
#define hrSUCCESS 0x00
#define hrBUSY 0x01
#define hrBADREQ 0x02
#define hrUNDEF 0x03
#define hrNAK 0x04
#define hrSTALL 0x05
#define hrTOGERR 0x06
#define hrWRONGPID 0x07
#define hrBADBC 0x08
#define hrPIDERR 0x09
#define hrPKTERR 0x0A
#define hrCRCERR 0x0B
#define hrKERR 0x0C
#define hrJERR 0x0D
#define hrTIMEOUT 0x0E
#define hrBABBLE 0x0F
 
#define MODE_FS_HOST (bmDPPULLDN|bmDMPULLDN|bmHOST|bmSOFKAENAB)
#define MODE_LS_HOST (bmDPPULLDN|bmDMPULLDN|bmHOST|bmLOWSPEED|bmSOFKAENAB)
 
 
#endif //_MAX3421Econstants_h_
/C-OSD/arducam-osd/libraries/USBHOST/Max_LCD.cpp
0,0 → 1,250
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
//this code is heavily borrowed from official Arduino source v.0017
// link to original http://code.google.com/p/arduino/source/browse/trunk/hardware/libraries/LiquidCrystal/LiquidCrystal.cpp
#include "Max_LCD.h"
#include "Max3421e.h"
 
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "WProgram.h"
 
// When the display powers up, it is configured as follows:
//
// 1. Display clear
// 2. Function set:
// DL = 1; 8-bit interface data
// N = 0; 1-line display
// F = 0; 5x8 dot character font
// 3. Display on/off control:
// D = 0; Display off
// C = 0; Cursor off
// B = 0; Blinking off
// 4. Entry mode set:
// I/D = 1; Increment by 1
// S = 0; No shift
//
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
// can't assume that it's in that state when a sketch starts
 
// pin definition and set/clear
 
#define RS 0x04 // RS pin
#define E 0x08 // E pin
 
#define SET_RS lcdPins |= RS
#define CLR_RS lcdPins &= ~RS
#define SET_E lcdPins |= E
#define CLR_E lcdPins &= ~E
 
#define SENDlcdPins() MAX3421E::gpioWr( lcdPins )
#define LCD_sendcmd(a) { CLR_RS; \
sendbyte(a); \
}
#define LCD_sendchar(a) { SET_RS; \
sendbyte(a); \
}
static byte lcdPins; //copy of LCD pins
 
Max_LCD::Max_LCD()
{
lcdPins = 0;
}
 
 
void Max_LCD::init()
{
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
// MAX3421E::gpioWr(0x55);
begin(16, 1);
}
 
void Max_LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
if (lines > 1) {
_displayfunction |= LCD_2LINE;
}
_numlines = lines;
_currline = 0;
 
// for some 1 line displays you can select a 10 pixel high font
if ((dotsize != 0) && (lines == 1)) {
_displayfunction |= LCD_5x10DOTS;
}
 
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
// according to datasheet, we need at least 40ms after power rises above 2.7V
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
delayMicroseconds(50000);
lcdPins = 0x30;
SET_E;
SENDlcdPins();
CLR_E;
SENDlcdPins();
delayMicroseconds(10000); // wait min 4.1ms
//second try
SET_E;
SENDlcdPins();
CLR_E;
SENDlcdPins();
delayMicroseconds(10000); // wait min 4.1ms
// third go!
SET_E;
SENDlcdPins();
CLR_E;
SENDlcdPins();
delayMicroseconds(10000);
// finally, set to 4-bit interface
lcdPins = 0x20;
//SET_RS;
SET_E;
SENDlcdPins();
//CLR_RS;
CLR_E;
SENDlcdPins();
delayMicroseconds(10000);
// finally, set # lines, font size, etc.
command(LCD_FUNCTIONSET | _displayfunction);
 
// turn the display on with no cursor or blinking default
_displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;
display();
 
// clear it off
clear();
 
// Initialize to default text direction (for romance languages)
_displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
// set the entry mode
command(LCD_ENTRYMODESET | _displaymode);
}
 
/********** high level commands, for the user! */
void Max_LCD::clear()
{
command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
 
void Max_LCD::home()
{
command(LCD_RETURNHOME); // set cursor position to zero
delayMicroseconds(2000); // this command takes a long time!
}
 
void Max_LCD::setCursor(uint8_t col, uint8_t row)
{
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row > _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
 
// Turn the display on/off (quickly)
void Max_LCD::noDisplay() {
_displaycontrol &= ~LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Max_LCD::display() {
_displaycontrol |= LCD_DISPLAYON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
 
// Turns the underline cursor on/off
void Max_LCD::noCursor() {
_displaycontrol &= ~LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Max_LCD::cursor() {
_displaycontrol |= LCD_CURSORON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
 
 
// Turn on and off the blinking cursor
void Max_LCD::noBlink() {
_displaycontrol &= ~LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
void Max_LCD::blink() {
_displaycontrol |= LCD_BLINKON;
command(LCD_DISPLAYCONTROL | _displaycontrol);
}
 
// These commands scroll the display without changing the RAM
void Max_LCD::scrollDisplayLeft(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
}
void Max_LCD::scrollDisplayRight(void) {
command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
}
 
// This is for text that flows Left to Right
void Max_LCD::leftToRight(void) {
_displaymode |= LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
 
// This is for text that flows Right to Left
void Max_LCD::rightToLeft(void) {
_displaymode &= ~LCD_ENTRYLEFT;
command(LCD_ENTRYMODESET | _displaymode);
}
 
// This will 'right justify' text from the cursor
void Max_LCD::autoscroll(void) {
_displaymode |= LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
 
// This will 'left justify' text from the cursor
void Max_LCD::noAutoscroll(void) {
_displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
command(LCD_ENTRYMODESET | _displaymode);
}
 
// Allows us to fill the first 8 CGRAM locations
// with custom characters
void Max_LCD::createChar(uint8_t location, uint8_t charmap[]) {
location &= 0x7; // we only have 8 locations 0-7
command(LCD_SETCGRAMADDR | (location << 3));
for (int i=0; i<8; i++) {
write(charmap[i]);
}
}
 
/*********** mid level commands, for sending data/cmds */
 
inline void Max_LCD::command(uint8_t value) {
LCD_sendcmd(value);
delayMicroseconds(100);
}
 
inline void Max_LCD::write(uint8_t value) {
LCD_sendchar(value);
}
 
void Max_LCD::sendbyte( uint8_t val )
{
lcdPins &= 0x0f; //prepare place for the upper nibble
lcdPins |= ( val & 0xf0 ); //copy upper nibble to LCD variable
SET_E; //send
SENDlcdPins();
delayMicroseconds(2);
CLR_E;
delayMicroseconds(2);
SENDlcdPins();
lcdPins &= 0x0f; //prepare place for the lower nibble
lcdPins |= ( val << 4 ) & 0xf0; //copy lower nibble to LCD variable
SET_E; //send
SENDlcdPins();
CLR_E;
SENDlcdPins();
delayMicroseconds(100);
}
/C-OSD/arducam-osd/libraries/USBHOST/Max_LCD.h
0,0 → 1,87
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
//HD44780 compatible LCD display via MAX3421E GPOUT support header
//pinout: D[4-7] -> GPOUT[4-7], RS-> GPOUT[2], E ->GPOUT[3]
//
//this code is heavily borrowed from official Arduino source v.0017
// link to original http://code.google.com/p/arduino/source/browse/trunk/hardware/libraries/LiquidCrystal/LiquidCrystal.h
//
#ifndef _Max_LCD_h_
#define _Max_LCD_h_
 
#include <inttypes.h>
#include "Print.h"
 
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80
 
// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00
 
// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00
 
// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00
 
// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00
 
class Max_LCD : public Print {
public:
Max_LCD();
void init();
void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
void clear();
void home();
void noDisplay();
void display();
void noBlink();
void blink();
void noCursor();
void cursor();
void scrollDisplayLeft();
void scrollDisplayRight();
void leftToRight();
void rightToLeft();
void autoscroll();
void noAutoscroll();
void createChar(uint8_t, uint8_t[]);
void setCursor(uint8_t, uint8_t);
virtual void write(uint8_t);
void command(uint8_t);
private:
void sendbyte( uint8_t val );
uint8_t _displayfunction; //tokill
uint8_t _displaycontrol;
uint8_t _displaymode;
uint8_t _initialized;
uint8_t _numlines,_currline;
};
 
 
 
 
#endif
/C-OSD/arducam-osd/libraries/USBHOST/README
0,0 → 1,4
This is a library for MAX3421E-based USB Host Shield for Arduino -> http://www.circuitsathome.com/arduino_usb_host_shield_projects
 
More information can be found at http://www.circuitsathome.com
 
/C-OSD/arducam-osd/libraries/USBHOST/Usb.cpp
0,0 → 1,378
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* USB functions */
 
#include "Usb.h"
 
static byte usb_error = 0;
static byte usb_task_state;
DEV_RECORD devtable[ USB_NUMDEVICES + 1 ];
EP_RECORD dev0ep; //Endpoint data structure used during enumeration for uninitialized device
 
 
/* constructor */
 
USB::USB () {
usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE; //set up state machine
init();
}
/* Initialize data structures */
void USB::init()
{
byte i;
for( i = 0; i < ( USB_NUMDEVICES + 1 ); i++ ) {
devtable[ i ].epinfo = NULL; //clear device table
devtable[ i ].devclass = 0;
}
devtable[ 0 ].epinfo = &dev0ep; //set single ep for uninitialized device
// not necessary dev0ep.MaxPktSize = 8; //minimum possible
dev0ep.sndToggle = bmSNDTOG0; //set DATA0/1 toggles to 0
dev0ep.rcvToggle = bmRCVTOG0;
}
byte USB::getUsbTaskState( void )
{
return( usb_task_state );
}
void USB::setUsbTaskState( byte state )
{
usb_task_state = state;
}
EP_RECORD* USB::getDevTableEntry( byte addr, byte ep )
{
EP_RECORD* ptr;
ptr = devtable[ addr ].epinfo;
ptr += ep;
return( ptr );
}
/* set device table entry */
/* each device is different and has different number of endpoints. This function plugs endpoint record structure, defined in application, to devtable */
void USB::setDevTableEntry( byte addr, EP_RECORD* eprecord_ptr )
{
devtable[ addr ].epinfo = eprecord_ptr;
//return();
}
/* Control transfer. Sets address, endpoint, fills control packet with necessary data, dispatches control packet, and initiates bulk IN transfer, */
/* depending on request. Actual requests are defined as inlines */
/* return codes: */
/* 00 = success */
/* 01-0f = non-zero HRSLT */
byte USB::ctrlReq( byte addr, byte ep, byte bmReqType, byte bRequest, byte wValLo, byte wValHi, unsigned int wInd, unsigned int nbytes, char* dataptr, unsigned int nak_limit )
{
boolean direction = false; //request direction, IN or OUT
byte rcode;
SETUP_PKT setup_pkt;
 
regWr( rPERADDR, addr ); //set peripheral address
if( bmReqType & 0x80 ) {
direction = true; //determine request direction
}
/* fill in setup packet */
setup_pkt.ReqType_u.bmRequestType = bmReqType;
setup_pkt.bRequest = bRequest;
setup_pkt.wVal_u.wValueLo = wValLo;
setup_pkt.wVal_u.wValueHi = wValHi;
setup_pkt.wIndex = wInd;
setup_pkt.wLength = nbytes;
bytesWr( rSUDFIFO, 8, ( char *)&setup_pkt ); //transfer to setup packet FIFO
rcode = dispatchPkt( tokSETUP, ep, nak_limit ); //dispatch packet
//Serial.println("Setup packet"); //DEBUG
if( rcode ) { //return HRSLT if not zero
Serial.print("Setup packet error: ");
Serial.print( rcode, HEX );
return( rcode );
}
//Serial.println( direction, HEX );
if( dataptr != NULL ) { //data stage, if present
rcode = ctrlData( addr, ep, nbytes, dataptr, direction );
}
if( rcode ) { //return error
Serial.print("Data packet error: ");
Serial.print( rcode, HEX );
return( rcode );
}
rcode = ctrlStatus( ep, direction ); //status stage
return( rcode );
}
/* Control transfer with status stage and no data stage */
/* Assumed peripheral address is already set */
byte USB::ctrlStatus( byte ep, boolean direction, unsigned int nak_limit )
{
byte rcode;
if( direction ) { //GET
rcode = dispatchPkt( tokOUTHS, ep, nak_limit );
}
else {
rcode = dispatchPkt( tokINHS, ep, nak_limit );
}
return( rcode );
}
/* Control transfer with data stage. Stages 2 and 3 of control transfer. Assumes preipheral address is set and setup packet has been sent */
byte USB::ctrlData( byte addr, byte ep, unsigned int nbytes, char* dataptr, boolean direction, unsigned int nak_limit )
{
byte rcode;
if( direction ) { //IN transfer
devtable[ addr ].epinfo[ ep ].rcvToggle = bmRCVTOG1;
rcode = inTransfer( addr, ep, nbytes, dataptr, nak_limit );
return( rcode );
}
else { //OUT transfer
devtable[ addr ].epinfo[ ep ].sndToggle = bmSNDTOG1;
rcode = outTransfer( addr, ep, nbytes, dataptr, nak_limit );
return( rcode );
}
}
/* IN transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
/* Keep sending INs and writes data to memory area pointed by 'data' */
/* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
fe USB xfer timeout */
byte USB::inTransfer( byte addr, byte ep, unsigned int nbytes, char* data, unsigned int nak_limit )
{
byte rcode;
byte pktsize;
byte maxpktsize = devtable[ addr ].epinfo[ ep ].MaxPktSize;
unsigned int xfrlen = 0;
regWr( rHCTL, devtable[ addr ].epinfo[ ep ].rcvToggle ); //set toggle value
while( 1 ) { // use a 'return' to exit this loop
rcode = dispatchPkt( tokIN, ep, nak_limit ); //IN packet to EP-'endpoint'. Function takes care of NAKS.
if( rcode ) {
return( rcode ); //should be 0, indicating ACK. Else return error code.
}
/* check for RCVDAVIRQ and generate error if not present */
/* the only case when absense of RCVDAVIRQ makes sense is when toggle error occured. Need to add handling for that */
if(( regRd( rHIRQ ) & bmRCVDAVIRQ ) == 0 ) {
return ( 0xf0 ); //receive error
}
pktsize = regRd( rRCVBC ); //number of received bytes
data = bytesRd( rRCVFIFO, pktsize, data );
regWr( rHIRQ, bmRCVDAVIRQ ); // Clear the IRQ & free the buffer
xfrlen += pktsize; // add this packet's byte count to total transfer length
/* The transfer is complete under two conditions: */
/* 1. The device sent a short packet (L.T. maxPacketSize) */
/* 2. 'nbytes' have been transferred. */
if (( pktsize < maxpktsize ) || (xfrlen >= nbytes )) { // have we transferred 'nbytes' bytes?
if( regRd( rHRSL ) & bmRCVTOGRD ) { //save toggle value
devtable[ addr ].epinfo[ ep ].rcvToggle = bmRCVTOG1;
}
else {
devtable[ addr ].epinfo[ ep ].rcvToggle = bmRCVTOG0;
}
return( 0 );
}
}//while( 1 )
}
/* OUT transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
/* Handles NAK bug per Maxim Application Note 4000 for single buffer transfer */
/* rcode 0 if no errors. rcode 01-0f is relayed from HRSL */
/* major part of this function borrowed from code shared by Richard Ibbotson */
byte USB::outTransfer( byte addr, byte ep, unsigned int nbytes, char* data, unsigned int nak_limit )
{
byte rcode, retry_count;
char* data_p = data; //local copy of the data pointer
unsigned int bytes_tosend, nak_count;
unsigned int bytes_left = nbytes;
byte maxpktsize = devtable[ addr ].epinfo[ ep ].MaxPktSize;
unsigned long timeout = millis() + USB_XFER_TIMEOUT;
if (!maxpktsize) { //todo: move this check close to epinfo init. Make it 1< pktsize <64
return 0xFE;
}
regWr( rHCTL, devtable[ addr ].epinfo[ ep ].sndToggle ); //set toggle value
while( bytes_left ) {
retry_count = 0;
nak_count = 0;
bytes_tosend = ( bytes_left >= maxpktsize ) ? maxpktsize : bytes_left;
bytesWr( rSNDFIFO, bytes_tosend, data_p ); //filling output FIFO
regWr( rSNDBC, bytes_tosend ); //set number of bytes
regWr( rHXFR, ( tokOUT | ep )); //dispatch packet
while(!(regRd( rHIRQ ) & bmHXFRDNIRQ )); //wait for the completion IRQ
regWr( rHIRQ, bmHXFRDNIRQ ); //clear IRQ
rcode = ( regRd( rHRSL ) & 0x0f );
while( rcode && ( timeout > millis())) {
switch( rcode ) {
case hrNAK:
nak_count++;
if( nak_limit && ( nak_count == USB_NAK_LIMIT )) {
return( rcode); //return NAK
}
break;
case hrTIMEOUT:
retry_count++;
if( retry_count == USB_RETRY_LIMIT ) {
return( rcode ); //return TIMEOUT
}
break;
default:
return( rcode );
}//switch( rcode...
/* process NAK according to Host out NAK bug */
regWr( rSNDBC, 0 );
regWr( rSNDFIFO, *data_p );
regWr( rSNDBC, bytes_tosend );
regWr( rHXFR, ( tokOUT | ep )); //dispatch packet
while(!(regRd( rHIRQ ) & bmHXFRDNIRQ )); //wait for the completion IRQ
regWr( rHIRQ, bmHXFRDNIRQ ); //clear IRQ
rcode = ( regRd( rHRSL ) & 0x0f );
}//while( rcode && ....
bytes_left -= bytes_tosend;
data_p += bytes_tosend;
}//while( bytes_left...
devtable[ addr ].epinfo[ ep ].sndToggle = ( regRd( rHRSL ) & bmSNDTOGRD ) ? bmSNDTOG1 : bmSNDTOG0; //update toggle
return( rcode ); //should be 0 in all cases
}
/* dispatch usb packet. Assumes peripheral address is set and relevant buffer is loaded/empty */
/* If NAK, tries to re-send up to nak_limit times */
/* If nak_limit == 0, do not count NAKs, exit after timeout */
/* If bus timeout, re-sends up to USB_RETRY_LIMIT times */
/* return codes 0x00-0x0f are HRSLT( 0x00 being success ), 0xff means timeout */
byte USB::dispatchPkt( byte token, byte ep, unsigned int nak_limit )
{
unsigned long timeout = millis() + USB_XFER_TIMEOUT;
byte tmpdata;
byte rcode;
unsigned int nak_count = 0;
char retry_count = 0;
 
while( timeout > millis() ) {
regWr( rHXFR, ( token|ep )); //launch the transfer
rcode = 0xff;
while( millis() < timeout ) { //wait for transfer completion
tmpdata = regRd( rHIRQ );
if( tmpdata & bmHXFRDNIRQ ) {
regWr( rHIRQ, bmHXFRDNIRQ ); //clear the interrupt
rcode = 0x00;
break;
}//if( tmpdata & bmHXFRDNIRQ
}//while ( millis() < timeout
if( rcode != 0x00 ) { //exit if timeout
return( rcode );
}
rcode = ( regRd( rHRSL ) & 0x0f ); //analyze transfer result
switch( rcode ) {
case hrNAK:
nak_count ++;
if( nak_limit && ( nak_count == nak_limit )) {
return( rcode );
}
break;
case hrTIMEOUT:
retry_count ++;
if( retry_count == USB_RETRY_LIMIT ) {
return( rcode );
}
break;
default:
return( rcode );
}//switch( rcode
}//while( timeout > millis()
return( rcode );
}
/* USB main task. Performs enumeration/cleanup */
void USB::Task( void ) //USB state machine
{
byte i;
byte rcode;
static byte tmpaddr;
byte tmpdata;
static unsigned long delay = 0;
USB_DEVICE_DESCRIPTOR buf;
tmpdata = getVbusState();
/* modify USB task state if Vbus changed */
 
switch( tmpdata ) {
case SE1: //illegal state
usb_task_state = USB_DETACHED_SUBSTATE_ILLEGAL;
break;
case SE0: //disconnected
if(( usb_task_state & USB_STATE_MASK ) != USB_STATE_DETACHED ) {
usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE;
}
break;
case FSHOST: //attached
case LSHOST:
if(( usb_task_state & USB_STATE_MASK ) == USB_STATE_DETACHED ) {
delay = millis() + USB_SETTLE_DELAY;
usb_task_state = USB_ATTACHED_SUBSTATE_SETTLE;
}
break;
}// switch( tmpdata
//Serial.print("USB task state: ");
//Serial.println( usb_task_state, HEX );
switch( usb_task_state ) {
case USB_DETACHED_SUBSTATE_INITIALIZE:
init();
usb_task_state = USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE;
break;
case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: //just sit here
break;
case USB_DETACHED_SUBSTATE_ILLEGAL: //just sit here
break;
case USB_ATTACHED_SUBSTATE_SETTLE: //setlle time for just attached device
if( delay < millis() ) {
usb_task_state = USB_ATTACHED_SUBSTATE_RESET_DEVICE;
}
break;
case USB_ATTACHED_SUBSTATE_RESET_DEVICE:
regWr( rHCTL, bmBUSRST ); //issue bus reset
usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE;
break;
case USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE:
if(( regRd( rHCTL ) & bmBUSRST ) == 0 ) {
tmpdata = regRd( rMODE ) | bmSOFKAENAB; //start SOF generation
regWr( rMODE, tmpdata );
// regWr( rMODE, bmSOFKAENAB );
usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_SOF;
delay = millis() + 20; //20ms wait after reset per USB spec
}
break;
case USB_ATTACHED_SUBSTATE_WAIT_SOF: //todo: change check order
if( regRd( rHIRQ ) & bmFRAMEIRQ ) { //when first SOF received we can continue
if( delay < millis() ) { //20ms passed
usb_task_state = USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE;
}
}
break;
case USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE:
// toggle( BPNT_0 );
devtable[ 0 ].epinfo->MaxPktSize = 8; //set max.packet size to min.allowed
rcode = getDevDescr( 0, 0, 8, ( char* )&buf );
if( rcode == 0 ) {
devtable[ 0 ].epinfo->MaxPktSize = buf.bMaxPacketSize0;
usb_task_state = USB_STATE_ADDRESSING;
}
else {
usb_error = USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE;
usb_task_state = USB_STATE_ERROR;
}
break;
case USB_STATE_ADDRESSING:
for( i = 1; i < USB_NUMDEVICES; i++ ) {
if( devtable[ i ].epinfo == NULL ) {
devtable[ i ].epinfo = devtable[ 0 ].epinfo; //set correct MaxPktSize
//temporary record
//until plugged with real device endpoint structure
rcode = setAddr( 0, 0, i );
if( rcode == 0 ) {
tmpaddr = i;
usb_task_state = USB_STATE_CONFIGURING;
}
else {
usb_error = USB_STATE_ADDRESSING; //set address error
usb_task_state = USB_STATE_ERROR;
}
break; //break if address assigned or error occured during address assignment attempt
}
}//for( i = 1; i < USB_NUMDEVICES; i++
if( usb_task_state == USB_STATE_ADDRESSING ) { //no vacant place in devtable
usb_error = 0xfe;
usb_task_state = USB_STATE_ERROR;
}
break;
case USB_STATE_CONFIGURING:
break;
case USB_STATE_RUNNING:
break;
case USB_STATE_ERROR:
break;
}// switch( usb_task_state
}
/C-OSD/arducam-osd/libraries/USBHOST/Usb.h
0,0 → 1,175
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* USB functions */
#ifndef _usb_h_
#define _usb_h_
 
#include <Max3421e.h>
#include "ch9.h"
 
/* Common setup data constant combinations */
#define bmREQ_GET_DESCR USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //get descriptor request type
#define bmREQ_SET USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //set request type for all but 'set feature' and 'set interface'
#define bmREQ_CL_GET_INTF USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE //get interface request type
/* HID requests */
#define bmREQ_HIDOUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
#define bmREQ_HIDIN USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
#define bmREQ_HIDREPORT USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_INTERFACE
 
#define USB_XFER_TIMEOUT 5000 //USB transfer timeout in milliseconds, per section 9.2.6.1 of USB 2.0 spec
#define USB_NAK_LIMIT 32000 //NAK limit for a transfer. o meand NAKs are not counted
#define USB_RETRY_LIMIT 3 //retry limit for a transfer
#define USB_SETTLE_DELAY 200 //settle delay in milliseconds
#define USB_NAK_NOWAIT 1 //used in Richard's PS2/Wiimote code
 
#define USB_NUMDEVICES 2 //number of USB devices
 
/* USB state machine states */
 
#define USB_STATE_MASK 0xf0
 
#define USB_STATE_DETACHED 0x10
#define USB_DETACHED_SUBSTATE_INITIALIZE 0x11
#define USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE 0x12
#define USB_DETACHED_SUBSTATE_ILLEGAL 0x13
#define USB_ATTACHED_SUBSTATE_SETTLE 0x20
#define USB_ATTACHED_SUBSTATE_RESET_DEVICE 0x30
#define USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE 0x40
#define USB_ATTACHED_SUBSTATE_WAIT_SOF 0x50
#define USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE 0x60
#define USB_STATE_ADDRESSING 0x70
#define USB_STATE_CONFIGURING 0x80
#define USB_STATE_RUNNING 0x90
#define USB_STATE_ERROR 0xa0
 
// byte usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE
 
/* USB Setup Packet Structure */
typedef struct {
union { // offset description
byte bmRequestType; // 0 Bit-map of request type
struct {
byte recipient: 5; // Recipient of the request
byte type: 2; // Type of request
byte direction: 1; // Direction of data X-fer
};
}ReqType_u;
byte bRequest; // 1 Request
union {
unsigned int wValue; // 2 Depends on bRequest
struct {
byte wValueLo;
byte wValueHi;
};
}wVal_u;
unsigned int wIndex; // 4 Depends on bRequest
unsigned int wLength; // 6 Depends on bRequest
} SETUP_PKT, *PSETUP_PKT;
 
/* Endpoint information structure */
/* bToggle of endpoint 0 initialized to 0xff */
/* during enumeration bToggle is set to 00 */
typedef struct {
byte epAddr; //copy from endpoint descriptor. Bit 7 indicates direction ( ignored for control endpoints )
byte Attr; // Endpoint transfer type.
unsigned int MaxPktSize; // Maximum packet size.
byte Interval; // Polling interval in frames.
byte sndToggle; //last toggle value, bitmask for HCTL toggle bits
byte rcvToggle; //last toggle value, bitmask for HCTL toggle bits
/* not sure if both are necessary */
} EP_RECORD;
/* device record structure */
typedef struct {
EP_RECORD* epinfo; //device endpoint information
byte devclass; //device class
} DEV_RECORD;
 
 
 
class USB : public MAX3421E {
//data structures
/* device table. Filled during enumeration */
/* index corresponds to device address */
/* each entry contains pointer to endpoint structure */
/* and device class to use in various places */
//DEV_RECORD devtable[ USB_NUMDEVICES + 1 ];
//EP_RECORD dev0ep; //Endpoint data structure used during enumeration for uninitialized device
 
//byte usb_task_state;
 
public:
USB( void );
byte getUsbTaskState( void );
void setUsbTaskState( byte state );
EP_RECORD* getDevTableEntry( byte addr, byte ep );
void setDevTableEntry( byte addr, EP_RECORD* eprecord_ptr );
byte ctrlReq( byte addr, byte ep, byte bmReqType, byte bRequest, byte wValLo, byte wValHi, unsigned int wInd, unsigned int nbytes, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
/* Control requests */
byte getDevDescr( byte addr, byte ep, unsigned int nbytes, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte getConfDescr( byte addr, byte ep, unsigned int nbytes, byte conf, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte getStrDescr( byte addr, byte ep, unsigned int nbytes, byte index, unsigned int langid, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte setAddr( byte oldaddr, byte ep, byte newaddr, unsigned int nak_limit = USB_NAK_LIMIT );
byte setConf( byte addr, byte ep, byte conf_value, unsigned int nak_limit = USB_NAK_LIMIT );
/**/
byte setProto( byte addr, byte ep, byte interface, byte protocol, unsigned int nak_limit = USB_NAK_LIMIT );
byte getProto( byte addr, byte ep, byte interface, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte getReportDescr( byte addr, byte ep, unsigned int nbytes, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte setReport( byte addr, byte ep, unsigned int nbytes, byte interface, byte report_type, byte report_id, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte getReport( byte addr, byte ep, unsigned int nbytes, byte interface, byte report_type, byte report_id, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte getIdle( byte addr, byte ep, byte interface, byte reportID, char* dataptr, unsigned int nak_limit = USB_NAK_LIMIT );
byte setIdle( byte addr, byte ep, byte interface, byte reportID, byte duration, unsigned int nak_limit = USB_NAK_LIMIT );
/**/
byte ctrlData( byte addr, byte ep, unsigned int nbytes, char* dataptr, boolean direction, unsigned int nak_limit = USB_NAK_LIMIT );
byte ctrlStatus( byte ep, boolean direction, unsigned int nak_limit = USB_NAK_LIMIT );
byte inTransfer( byte addr, byte ep, unsigned int nbytes, char* data, unsigned int nak_limit = USB_NAK_LIMIT );
byte outTransfer( byte addr, byte ep, unsigned int nbytes, char* data, unsigned int nak_limit = USB_NAK_LIMIT );
byte dispatchPkt( byte token, byte ep, unsigned int nak_limit = USB_NAK_LIMIT );
void Task( void );
private:
void init();
};
 
//get device descriptor
inline byte USB::getDevDescr( byte addr, byte ep, unsigned int nbytes, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, dataptr, nak_limit ));
}
//get configuration descriptor
inline byte USB::getConfDescr( byte addr, byte ep, unsigned int nbytes, byte conf, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, dataptr, nak_limit ));
}
//get string descriptor
inline byte USB::getStrDescr( byte addr, byte ep, unsigned int nbytes, byte index, unsigned int langid, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, nbytes, dataptr, nak_limit ));
}
//set address
inline byte USB::setAddr( byte oldaddr, byte ep, byte newaddr, unsigned int nak_limit ) {
return( ctrlReq( oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, NULL, nak_limit ));
}
//set configuration
inline byte USB::setConf( byte addr, byte ep, byte conf_value, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, NULL, nak_limit ));
}
//class requests
inline byte USB::setProto( byte addr, byte ep, byte interface, byte protocol, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDOUT, HID_REQUEST_SET_PROTOCOL, protocol, 0x00, interface, 0x0000, NULL, nak_limit ));
}
inline byte USB::getProto( byte addr, byte ep, byte interface, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDIN, HID_REQUEST_GET_PROTOCOL, 0x00, 0x00, interface, 0x0001, dataptr, nak_limit ));
}
//get HID report descriptor
inline byte USB::getReportDescr( byte addr, byte ep, unsigned int nbytes, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDREPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_REPORT, 0x0000, nbytes, dataptr, nak_limit ));
}
inline byte USB::setReport( byte addr, byte ep, unsigned int nbytes, byte interface, byte report_type, byte report_id, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDOUT, HID_REQUEST_SET_REPORT, report_id, report_type, interface, nbytes, dataptr, nak_limit ));
}
inline byte USB::getReport( byte addr, byte ep, unsigned int nbytes, byte interface, byte report_type, byte report_id, char* dataptr, unsigned int nak_limit ) { // ** RI 04/11/09
return( ctrlReq( addr, ep, bmREQ_HIDIN, HID_REQUEST_GET_REPORT, report_id, report_type, interface, nbytes, dataptr, nak_limit ));
}
/* returns one byte of data in dataptr */
inline byte USB::getIdle( byte addr, byte ep, byte interface, byte reportID, char* dataptr, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDIN, HID_REQUEST_GET_IDLE, reportID, 0, interface, 0x0001, dataptr, nak_limit ));
}
inline byte USB::setIdle( byte addr, byte ep, byte interface, byte reportID, byte duration, unsigned int nak_limit ) {
return( ctrlReq( addr, ep, bmREQ_HIDOUT, HID_REQUEST_SET_IDLE, reportID, duration, interface, 0x0000, NULL, nak_limit ));
}
#endif //_usb_h_
/C-OSD/arducam-osd/libraries/USBHOST/ch9.h
0,0 → 1,168
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
/* USB chapter 9 structures */
#ifndef _ch9_h_
#define _ch9_h_
 
/* Misc.USB constants */
#define DEV_DESCR_LEN 18 //device descriptor length
#define CONF_DESCR_LEN 9 //configuration descriptor length
#define INTR_DESCR_LEN 9 //interface descriptor length
#define EP_DESCR_LEN 7 //endpoint descriptor length
 
/* Standard Device Requests */
 
#define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS
#define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE
#define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE
#define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS
#define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR
#define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR
#define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION
#define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION
#define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE
#define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE
#define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME
 
#define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt
#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up
#define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode
 
/* Setup Data Constants */
 
#define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer
#define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer
#define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard
#define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class
#define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor
#define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device
#define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface
#define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint
#define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other
 
/* USB descriptors */
 
#define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor.
#define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor.
#define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor.
#define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor.
#define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor.
#define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier.
#define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration.
#define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power.
#define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor.
 
/* OTG SET FEATURE Constants */
#define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP
#define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP
#define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP
 
/* USB Endpoint Transfer Types */
#define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint.
#define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint.
#define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint.
#define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint.
#define bmUSB_TRANSFER_TYPE 0x03 // bit mask to separate transfer type from ISO attributes
 
 
/* Standard Feature Selectors for CLEAR_FEATURE Requests */
#define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient
#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient
#define USB_FEATURE_TEST_MODE 2 // Device recipient
 
/* HID constants. Not part of chapter 9 */
/* Class-Specific Requests */
#define HID_REQUEST_GET_REPORT 0x01
#define HID_REQUEST_GET_IDLE 0x02
#define HID_REQUEST_GET_PROTOCOL 0x03
#define HID_REQUEST_SET_REPORT 0x09
#define HID_REQUEST_SET_IDLE 0x0A
#define HID_REQUEST_SET_PROTOCOL 0x0B
 
/* Class Descriptor Types */
#define HID_DESCRIPTOR_HID 0x21
#define HID_DESCRIPTOR_REPORT 0x22
#define HID_DESRIPTOR_PHY 0x23
 
/* Protocol Selection */
#define BOOT_PROTOCOL 0x00
#define RPT_PROTOCOL 0x01
/* HID Interface Class Code */
#define HID_INTF 0x03
/* HID Interface Class SubClass Codes */
#define BOOT_INTF_SUBCLASS 0x01
/* HID Interface Class Protocol Codes */
#define HID_PROTOCOL_NONE 0x00
#define HID_PROTOCOL_KEYBOARD 0x01
#define HID_PROTOCOL_MOUSE 0x02
 
 
/* descriptor data structures */
 
/* Device descriptor structure */
typedef struct {
byte bLength; // Length of this descriptor.
byte bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE).
unsigned int bcdUSB; // USB Spec Release Number (BCD).
byte bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
byte bDeviceSubClass; // Subclass code (assigned by the USB-IF).
byte bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
byte bMaxPacketSize0; // Maximum packet size for endpoint 0.
unsigned int idVendor; // Vendor ID (assigned by the USB-IF).
unsigned int idProduct; // Product ID (assigned by the manufacturer).
unsigned int bcdDevice; // Device release number (BCD).
byte iManufacturer; // Index of String Descriptor describing the manufacturer.
byte iProduct; // Index of String Descriptor describing the product.
byte iSerialNumber; // Index of String Descriptor with the device's serial number.
byte bNumConfigurations; // Number of possible configurations.
} USB_DEVICE_DESCRIPTOR;
 
/* Configuration descriptor structure */
typedef struct
{
byte bLength; // Length of this descriptor.
byte bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION).
unsigned int wTotalLength; // Total length of all descriptors for this configuration.
byte bNumInterfaces; // Number of interfaces in this configuration.
byte bConfigurationValue; // Value of this configuration (1 based).
byte iConfiguration; // Index of String Descriptor describing the configuration.
byte bmAttributes; // Configuration characteristics.
byte bMaxPower; // Maximum power consumed by this configuration.
} USB_CONFIGURATION_DESCRIPTOR;
 
/* Interface descriptor structure */
typedef struct
{
byte bLength; // Length of this descriptor.
byte bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE).
byte bInterfaceNumber; // Number of this interface (0 based).
byte bAlternateSetting; // Value of this alternate interface setting.
byte bNumEndpoints; // Number of endpoints in this interface.
byte bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
byte bInterfaceSubClass; // Subclass code (assigned by the USB-IF).
byte bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
byte iInterface; // Index of String Descriptor describing the interface.
} USB_INTERFACE_DESCRIPTOR;
 
/* Endpoint descriptor structure */
typedef struct
{
byte bLength; // Length of this descriptor.
byte bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT).
byte bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN).
byte bmAttributes; // Endpoint transfer type.
unsigned int wMaxPacketSize; // Maximum packet size.
byte bInterval; // Polling interval in frames.
} USB_ENDPOINT_DESCRIPTOR;
 
/* HID descriptor */
typedef struct {
byte bLength;
byte bDescriptorType;
unsigned int bcdHID;
byte bCountryCode;
byte bNumDescriptors;
byte bDescrType;
unsigned int wDescriptorLength;
} USB_HID_DESCRIPTOR;
 
#endif // _ch9_h_
/C-OSD/arducam-osd/libraries/USBHOST/examples/LCDkbd.pde
0,0 → 1,335
/* MAX3421E USB Host controller LCD/keyboard demonstration */
#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <Max_LCD.h>
 
/* keyboard data taken from configuration descriptor */
#define KBD_ADDR 1
#define KBD_EP 1
#define KBD_IF 0
#define EP_MAXPKTSIZE 8
#define EP_POLL 0x0a
/**/
//******************************************************************************
// macros to identify special charaters(other than Digits and Alphabets)
//******************************************************************************
#define BANG (0x1E)
#define AT (0x1F)
#define POUND (0x20)
#define DOLLAR (0x21)
#define PERCENT (0x22)
#define CAP (0x23)
#define AND (0x24)
#define STAR (0x25)
#define OPENBKT (0x26)
#define CLOSEBKT (0x27)
 
#define RETURN (0x28)
#define ESCAPE (0x29)
#define BACKSPACE (0x2A)
#define TAB (0x2B)
#define SPACE (0x2C)
#define HYPHEN (0x2D)
#define EQUAL (0x2E)
#define SQBKTOPEN (0x2F)
#define SQBKTCLOSE (0x30)
#define BACKSLASH (0x31)
#define SEMICOLON (0x33)
#define INVCOMMA (0x34)
#define TILDE (0x35)
#define COMMA (0x36)
#define PERIOD (0x37)
#define FRONTSLASH (0x38)
#define DELETE (0x4c)
/**/
/* Modifier masks. One for both modifiers */
#define SHIFT 0x22
#define CTRL 0x11
#define ALT 0x44
#define GUI 0x88
/**/
/* "Sticky keys */
#define CAPSLOCK (0x39)
#define NUMLOCK (0x53)
#define SCROLLLOCK (0x47)
/* Sticky keys output report bitmasks */
#define bmNUMLOCK 0x01
#define bmCAPSLOCK 0x02
#define bmSCROLLLOCK 0x04
/**/
EP_RECORD ep_record[ 2 ]; //endpoint record structure for the keyboard
 
char buf[ 8 ] = { 0 }; //keyboard buffer
char old_buf[ 8 ] = { 0 }; //last poll
/* Sticky key state */
bool numLock = false;
bool capsLock = false;
bool scrollLock = false;
bool line = false;
 
void setup();
void loop();
 
MAX3421E Max;
USB Usb;
Max_LCD LCD;
 
void setup() {
// set up the LCD's number of rows and columns:
LCD.begin(16, 2);
LCD.home();
Serial.begin( 9600 );
Serial.println("Start");
Max.powerOn();
delay( 200 );
}
 
void loop() {
Max.Task();
Usb.Task();
if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING ) { //wait for addressing state
kbd_init();
Usb.setUsbTaskState( USB_STATE_RUNNING );
}
if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) { //poll the keyboard
kbd_poll();
}
}
/* Initialize keyboard */
void kbd_init( void )
{
byte rcode = 0; //return code
/**/
/* Initialize data structures */
ep_record[ 0 ] = *( Usb.getDevTableEntry( 0,0 )); //copy endpoint 0 parameters
ep_record[ 1 ].MaxPktSize = EP_MAXPKTSIZE;
ep_record[ 1 ].Interval = EP_POLL;
ep_record[ 1 ].sndToggle = bmSNDTOG0;
ep_record[ 1 ].rcvToggle = bmRCVTOG0;
Usb.setDevTableEntry( 1, ep_record ); //plug kbd.endpoint parameters to devtable
/* Configure device */
rcode = Usb.setConf( KBD_ADDR, 0, 1 );
if( rcode ) {
Serial.print("Error attempting to configure keyboard. Return code :");
Serial.println( rcode, HEX );
while(1); //stop
}
/* Set boot protocol */
rcode = Usb.setProto( KBD_ADDR, 0, 0, 0 );
if( rcode ) {
Serial.print("Error attempting to configure boot protocol. Return code :");
Serial.println( rcode, HEX );
while( 1 ); //stop
}
LCD.print("Keyboard initialized");
delay(2000);
LCD.clear();
LCD.home();
Serial.println("Keyboard initialized");
}
 
/* Poll keyboard and print result */
/* buffer starts at position 2, 0 is modifier key state and 1 is irrelevant */
void kbd_poll( void )
{
char i;
static char leds = 0;
byte rcode = 0; //return code
/* poll keyboard */
rcode = Usb.inTransfer( KBD_ADDR, KBD_EP, 8, buf );
if( rcode != 0 ) {
return;
}//if ( rcode..
for( i = 2; i < 8; i++ ) {
if( buf[ i ] == 0 ) { //end of non-empty space
break;
}
if( buf_compare( buf[ i ] ) == false ) { //if new key
switch( buf[ i ] ) {
case CAPSLOCK:
capsLock =! capsLock;
leds = ( capsLock ) ? leds |= bmCAPSLOCK : leds &= ~bmCAPSLOCK; // set or clear bit 1 of LED report byte
break;
case NUMLOCK:
numLock =! numLock;
leds = ( numLock ) ? leds |= bmNUMLOCK : leds &= ~bmNUMLOCK; // set or clear bit 0 of LED report byte
break;
case SCROLLLOCK:
scrollLock =! scrollLock;
leds = ( scrollLock ) ? leds |= bmSCROLLLOCK : leds &= ~bmSCROLLLOCK; // set or clear bit 2 of LED report byte
break;
case DELETE:
LCD.clear();
LCD.home();
line = false;
break;
case RETURN:
line =! line;
LCD.setCursor( 0, line );
break;
default:
//LCD.print("A"); //output
LCD.print( HIDtoA( buf[ i ], buf[ 0 ] ));
Serial.print(HIDtoA( buf[ i ], buf[ 0 ] ));
break;
}//switch( buf[ i ...
rcode = Usb.setReport( KBD_ADDR, 0, 1, KBD_IF, 0x02, 0, &leds );
if( rcode ) {
Serial.print("Set report error: ");
Serial.println( rcode, HEX );
}//if( rcode ...
}//if( buf_compare( buf[ i ] ) == false ...
}//for( i = 2...
for( i = 2; i < 8; i++ ) { //copy new buffer to old
old_buf[ i ] = buf[ i ];
}
}
/* compare byte against bytes in old buffer */
bool buf_compare( byte data )
{
char i;
for( i = 2; i < 8; i++ ) {
if( old_buf[ i ] == data ) {
return( true );
}
}
return( false );
}
 
/* HID to ASCII converter. Takes HID keyboard scancode, returns ASCII code */
byte HIDtoA( byte HIDbyte, byte mod )
{
/* upper row of the keyboard, numbers and special symbols */
if( HIDbyte >= 0x1e && HIDbyte <= 0x27 ) {
if(( mod & SHIFT ) || numLock ) { //shift key pressed
switch( HIDbyte ) {
case BANG: return( 0x21 );
case AT: return( 0x40 );
case POUND: return( 0x23 );
case DOLLAR: return( 0x24 );
case PERCENT: return( 0x25 );
case CAP: return( 0x5e );
case AND: return( 0x26 );
case STAR: return( 0x2a );
case OPENBKT: return( 0x28 );
case CLOSEBKT: return( 0x29 );
}//switch( HIDbyte...
}
else { //numbers
if( HIDbyte == 0x27 ) { //zero
return( 0x30 );
}
else {
return( HIDbyte + 0x13 );
}
}//numbers
}//if( HIDbyte >= 0x1e && HIDbyte <= 0x27
/**/
/* number pad. Arrows are not supported */
if(( HIDbyte >= 0x59 && HIDbyte <= 0x61 ) && ( numLock == true )) { // numbers 1-9
return( HIDbyte - 0x28 );
}
if(( HIDbyte == 0x62 ) && ( numLock == true )) { //zero
return( 0x30 );
}
/* Letters a-z */
if( HIDbyte >= 0x04 && HIDbyte <= 0x1d ) {
if((( capsLock == true ) && ( mod & SHIFT ) == 0 ) || (( capsLock == false ) && ( mod & SHIFT ))) { //upper case
return( HIDbyte + 0x3d );
}
else { //lower case
return( HIDbyte + 0x5d );
}
}//if( HIDbyte >= 0x04 && HIDbyte <= 0x1d...
/* Other special symbols */
if( HIDbyte >= 0x2c && HIDbyte <= 0x38 ) {
switch( HIDbyte ) {
case SPACE: return( 0x20 );
case HYPHEN:
if(( mod & SHIFT ) == false ) {
return( 0x2d );
}
else {
return( 0x5f );
}
case EQUAL:
if(( mod & SHIFT ) == false ) {
return( 0x3d );
}
else {
return( 0x2b );
}
case SQBKTOPEN:
if(( mod & SHIFT ) == false ) {
return( 0x5b );
}
else {
return( 0x7b );
}
case SQBKTCLOSE:
if(( mod & SHIFT ) == false ) {
return( 0x5d );
}
else {
return( 0x7d );
}
case BACKSLASH:
if(( mod & SHIFT ) == false ) {
return( 0x5c );
}
else {
return( 0x7c );
}
case SEMICOLON:
if(( mod & SHIFT ) == false ) {
return( 0x3b );
}
else {
return( 0x3a );
}
case INVCOMMA:
if(( mod & SHIFT ) == false ) {
return( 0x27 );
}
else {
return( 0x22 );
}
case TILDE:
if(( mod & SHIFT ) == false ) {
return( 0x60 );
}
else {
return( 0x7e );
}
case COMMA:
if(( mod & SHIFT ) == false ) {
return( 0x2c );
}
else {
return( 0x3c );
}
case PERIOD:
if(( mod & SHIFT ) == false ) {
return( 0x2e );
}
else {
return( 0x3e );
}
case FRONTSLASH:
if(( mod & SHIFT ) == false ) {
return( 0x2f );
}
else {
return( 0x3f );
}
default:
break;
}//switch( HIDbyte..
}//if( HIDbye >= 0x2d && HIDbyte <= 0x38..
return( 0 );
}
 
 
 
 
/C-OSD/arducam-osd/libraries/USBHOST/examples/PS3LCD.pde
0,0 → 1,566
 
 
/* MAX3421E USB Host controller LCD/PS3 demonstration */
#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include <Max_LCD.h>
#include <MemoryFree.h>
#include <avr/pgmspace.h>
 
/*The application will work in reduced host mode, so we can save program and data
memory space. After verifying the PID and VID we will use known values for the
configuration values for device, interface, endpoints and HID */
 
/* PS3 data taken from descriptors */
#define PS3_ADDR 1
#define PS3_VID_LO 0x4c // Sony VID
#define PS3_VID_HI 0x05
#define PS3_PID_LO 0x68 // Batch Device
#define PS3_PID_HI 0x02
#define PS3_CONFIGURATION 1
#define PS3_IF 0
#define PS3_NUM_EP 3
#define EP_MAXPKTSIZE 64
#define EP_INTERRUPT 0x03
#define EP_POLL 0x01
#define CONTROL_EP 0
#define OUTPUT_EP 1
#define REPORT_EP 2
 
 
#define PS3_F4_REPORT_LEN 4
#define PS3_F5_REPORT_LEN 8
#define PS3_01_REPORT_LEN 48
#define HID_REPORT_FEATURE 3
#define HID_REPORT_OUTPUT 2
#define PS3_F4_REPORT_ID 0xF4
#define PS3_01_REPORT_ID 0x01
#define PS3_F5_REPORT_ID 0xF5
 
/* Defines for the PS3 Data in the HID Report
*/
#define LAnalogX buf[6]
#define LAnalogY buf[7]
#define RAnalogX buf[8]
#define RAnalogY buf[9]
#define buttons1 buf[2]
#define buttons2 buf[3]
#define buttons3 buf[4]
#define buttonchange ((buttons1 != oldbuttons1) | (buttons2 != oldbuttons2))
#define buSelect (buttons1 & 0x01)
#define buLAnalog (buttons1 & 0x02)
#define buRAnalog (buttons1 & 0x04)
#define buStart (buttons1 & 0x08)
#define buUp (buttons1 & 0x10)
#define buRight (buttons1 & 0x20)
#define buDown (buttons1 & 0x40)
#define buLeft (buttons1 & 0x80)
#define buL2 (buttons2 & 0x01)
#define buR2 (buttons2 & 0x02)
#define buL1 (buttons2 & 0x04)
#define buR1 (buttons2 & 0x08)
#define buTriangle (buttons2 & 0x10)
#define buCircle (buttons2 & 0x20)
#define buCross (buttons2 & 0x40)
#define buSquare (buttons2 & 0x80)
#define buPS (buttons3 & 0x01)
#define AnalogUp buf[14]
#define AnalogRight buf[15]
#define AnalogDown buf[16]
#define AnalogLeft buf[17]
#define AnalogL2 buf[18]
#define AnalogR2 buf[19]
#define AnalogL1 buf[20]
#define AnalogR1 buf[21]
#define AnalogTriangle buf[22]
#define AnalogCircle buf[23]
#define AnalogCross buf[24]
#define AnalogSquare buf[25]
#define AccelX (((unsigned char)buf[42] | (unsigned char)buf[41] << 8)-512)
#define AccelY (((unsigned char)buf[44] | (unsigned char)buf[43] << 8)-512)
#define AccelZ (((unsigned char)buf[46] | (unsigned char)buf[45] << 8)-512)
#define GyroX (((unsigned char)buf[48] | (unsigned char)buf[47] << 8)-512)
 
 
 
/*Menu screens
 
*/
#define Root 0
#define Basic 1
#define Buttons 2
#define Joystick 3
#define Pressure 4
#define Accelerometer 5
#define LED 6
#define Bdaddr 7
#define Freememory 8
 
 
/* Menu Text
*/
 
prog_char menutext_0[] PROGMEM = "Select Test";
prog_char menutext_1[] PROGMEM = "Basic Tests";
prog_char menutext_2[] PROGMEM = "Buttons Test";
prog_char menutext_3[] PROGMEM = "Joystick Test";
prog_char menutext_4[] PROGMEM = "Pressure Test";
prog_char menutext_5[] PROGMEM = "Motion Test";
prog_char menutext_6[] PROGMEM = "LED/Rumble Test";
prog_char menutext_7[] PROGMEM = "Bluetooth Addr";
prog_char menutext_8[] PROGMEM = "Free Memory";
 
 
PROGMEM const char *menu_table[] =
{
menutext_0,
menutext_1,
menutext_2,
menutext_3,
menutext_4,
menutext_5,
menutext_6,
menutext_7,
menutext_8 };
 
prog_char output_01_report[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xff, 0x27, 0x10, 0x00, 0x32, 0xff,
0x27, 0x10, 0x00, 0x32, 0xff, 0x27, 0x10, 0x00,
0x32, 0xff, 0x27, 0x10, 0x00, 0x32, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
 
prog_char feature_F4_report[] PROGMEM = {0x42, 0x0c, 0x00, 0x00};
 
EP_RECORD ep_record[ PS3_NUM_EP ]; //endpoint record structure for the PS3 controller
 
char buf[ 64 ] = { 0 }; //General purpose buffer for usb data
char oldbuttons1, oldbuttons2;
char screen, selscreen;
char lcdbuffer[17];
unsigned char bdaddr[6];
char bdcursor;
char ledrum;
char lrcursor;
 
 
void setup();
void loop();
 
MAX3421E Max;
USB Usb;
Max_LCD LCD;
 
void setup() {
// set up the LCD's number of rows and columns:
LCD.begin(16, 2);
LCD.home();
LCD.print("PS3 Controller");
LCD.setCursor(0,1);
LCD.print("Wait for connect");
Serial.begin( 9600 );
Serial.println("PS3 Controller Start");
Serial.print("freeMemory() reports ");
Serial.println( freeMemory() );
Max.powerOn();
delay(200);
}
 
void loop() {
 
Max.Task();
Usb.Task();
if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING ) { //wait for addressing state
PS3_init();
process_report();
Usb.setUsbTaskState( USB_STATE_RUNNING );
}
if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) { //poll the PS3 Controller
PS3_poll();
}
}
/* Initialize PS3 Controller */
void PS3_init( void )
{
byte rcode = 0; //return code
byte i;
/**/
 
/* Initialize data structures for endpoints of device 1*/
ep_record[ CONTROL_EP ] = *( Usb.getDevTableEntry( 0,0 )); //copy endpoint 0 parameters
ep_record[ OUTPUT_EP ].epAddr = 0x02; // PS3 output endpoint
ep_record[ OUTPUT_EP ].Attr = EP_INTERRUPT;
ep_record[ OUTPUT_EP ].MaxPktSize = EP_MAXPKTSIZE;
ep_record[ OUTPUT_EP ].Interval = EP_POLL;
ep_record[ OUTPUT_EP ].sndToggle = bmSNDTOG0;
ep_record[ OUTPUT_EP ].rcvToggle = bmRCVTOG0;
ep_record[ REPORT_EP ].epAddr = 0x01; // PS3 report endpoint
ep_record[ REPORT_EP ].Attr = EP_INTERRUPT;
ep_record[ REPORT_EP ].MaxPktSize = EP_MAXPKTSIZE;
ep_record[ REPORT_EP ].Interval = EP_POLL;
ep_record[ REPORT_EP ].sndToggle = bmSNDTOG0;
ep_record[ REPORT_EP ].rcvToggle = bmRCVTOG0;
Usb.setDevTableEntry( PS3_ADDR, ep_record ); //plug kbd.endpoint parameters to devtable
/* read the device descriptor and check VID and PID*/
rcode = Usb.getDevDescr( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, DEV_DESCR_LEN , buf );
if( rcode ) {
Serial.print("Error attempting read device descriptor. Return code :");
Serial.println( rcode, HEX );
while(1); //stop
}
if((buf[ 8 ] != PS3_VID_LO) || (buf[ 9 ] != PS3_VID_HI) || (buf[ 10 ] != PS3_PID_LO) || (buf[ 11 ] != PS3_PID_HI) ) {
Serial.print("Unsupported USB Device");
while(1); //stop
}
/* Configure device */
rcode = Usb.setConf( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_CONFIGURATION );
if( rcode ) {
Serial.print("Error attempting to configure PS3 controller. Return code :");
Serial.println( rcode, HEX );
while(1); //stop
}
/* Set the PS3 controller to send reports */
for (i=0; i < PS3_F4_REPORT_LEN; i++) buf[i] = pgm_read_byte_near( feature_F4_report + i);
rcode = Usb.setReport( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_F4_REPORT_LEN, PS3_IF, HID_REPORT_FEATURE, PS3_F4_REPORT_ID , buf );
if( rcode ) {
Serial.print("Set report error: ");
Serial.println( rcode, HEX );
while(1); //stop
}
/* Set the PS3 controller LED 1 On */
for (i=0; i < PS3_01_REPORT_LEN; i++) buf[i] = pgm_read_byte_near( output_01_report + i);
rcode = Usb.setReport( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_01_REPORT_LEN, PS3_IF, HID_REPORT_OUTPUT, PS3_01_REPORT_ID , buf );
if( rcode ) {
Serial.print("Set report error: ");
Serial.println( rcode, HEX );
while(1); //stop
}
LCD.print("PS3 initialized");
Serial.println("PS3 initialized");
delay(200);
screen = Root;
selscreen = Basic;
LCD.clear();
LCD.home();
LCD.print("Main Menu");
LCD.setCursor(0,1);
strcpy_P(lcdbuffer, (char*)pgm_read_word(&(menu_table[selscreen])));
LCD.print(lcdbuffer);
 
}
 
/* Poll PS3 and print result */
 
void PS3_poll( void )
{
byte rcode = 0; //return code
/* poll PS3 */
rcode = Usb.inTransfer(PS3_ADDR, ep_record[ REPORT_EP ].epAddr, PS3_01_REPORT_LEN, buf );
if( rcode != 0 ) {
return;
}
process_report();
return;
}
 
void process_report(void)
{
byte i, j, mask;
if(buPS){
screen = Root;
selscreen = Basic;
LCD.clear();
LCD.home();
LCD.print("Main Menu");
LCD.setCursor(0,1);
strcpy_P(lcdbuffer, (char*)pgm_read_word(&(menu_table[selscreen])));
LCD.print(lcdbuffer);
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
 
}
switch (screen){
case Root:
if(buttonchange){
if(buDown) selscreen--;
else if(buUp | buSelect) selscreen++;
else if(buStart) {
screen = selscreen;
LCD.clear();
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
break;
}
else {
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
break;
}
if (selscreen == 0) selscreen = 1;
if (selscreen > 8) selscreen = 1;
LCD.clear();
LCD.home();
LCD.print("Main Menu:");
LCD.setCursor(0,1);
strcpy_P(lcdbuffer, (char*)pgm_read_word(&(menu_table[selscreen])));
LCD.print(lcdbuffer);
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
}
break;
case Basic:
if(buttonchange){
LCD.home();
if (buL1) LCD.print('X');
else LCD.print(' ');
LCD.print(" Test L/R");
LCD.setCursor(0,1);
if (buL2) LCD.print('X');
else LCD.print(' ');
LCD.print(" Buttons");
LCD.setCursor(15,0);
if (buR1) LCD.print('X');
else LCD.print(' ');
LCD.setCursor(15,1);
if (buR2) LCD.print('X');
else LCD.print(' ');
}
break;
case Buttons:
if(buttonchange){
LCD.home();
LCD.print("0123456789ABCDEF");
LCD.setCursor(0,1);
mask = 1;
for( i = 0; i < 8; i++){
if (buttons1 & mask) lcdbuffer[i] = '^';
else lcdbuffer[i] = ' ';
mask <<= 1;
}
mask = 1;
for( i = 0; i < 8; i++){
if (buttons2 & mask) lcdbuffer[i+8] = '^';
else lcdbuffer[i+8] = ' ';
mask <<= 1;
}
LCD.print(lcdbuffer);
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
}
break;
case Joystick:
LCD.home();
LCD.print('^');
LCD.print((unsigned char)LAnalogY, DEC);
LCD.print(" ");
LCD.setCursor(8,0);
LCD.print('^');
LCD.print((unsigned char)RAnalogY, DEC);
LCD.print(" ");
LCD.setCursor(0,1);
LCD.print('>');
LCD.print((unsigned char)LAnalogX, DEC);
LCD.print(" ");
LCD.setCursor(8,1);
LCD.print('>');
LCD.print((unsigned char)RAnalogX, DEC);
LCD.print(" ");
break;
case Pressure:
LCD.home();
LCD.print((unsigned char)AnalogUp, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogDown, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogLeft, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogRight, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogL1, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogR1, DEC);
LCD.print(" ");
LCD.setCursor(0,1);
LCD.print((unsigned char)AnalogCircle, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogTriangle, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogSquare, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogCross, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogL2, DEC);
LCD.print(" ");
LCD.print((unsigned char)AnalogR2, DEC);
LCD.print(" ");
break;
case Accelerometer:
LCD.home();
LCD.print('X');
LCD.print(AccelX, DEC);
LCD.print(" ");
LCD.setCursor(8,0);
LCD.print('Y');
LCD.print(AccelY, DEC);
LCD.print(" ");
LCD.setCursor(0,1);
LCD.print('Z');
LCD.print(AccelZ, DEC);
LCD.print(" ");
LCD.setCursor(8,1);
LCD.print('G');
LCD.print(GyroX, DEC);
LCD.print(" ");
break;
case LED:
if(buttonchange){
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
if (buRight) lrcursor++;
else if (buLeft) lrcursor--;
else if (buUp) ledrum |= 1 << lrcursor;
else if (buDown) ledrum &= ~(1 << lrcursor);
if (lrcursor > 7) lrcursor = 0;
if (lrcursor < 0) lrcursor = 7;
}
LCD.home();
LCD.print("1 2 3 4 S W ");
LCD.setCursor(0,1);
j = 0;
for (i=0; i < 6; i++){
if(ledrum & 1 << i) lcdbuffer[j] = 'X';
else lcdbuffer[j] = ' ';
j++; ;
lcdbuffer[j] = ' ';
j++;
}
lcdbuffer[j] = 0;
LCD.print(lcdbuffer);
LCD.setCursor((lrcursor * 2),1);
LCD.cursor();
/* default buffer values */
for (i=0; i < PS3_01_REPORT_LEN; i++) buf[i] = pgm_read_byte_near( output_01_report + i);
/* LED setings */
buf[9] = (ledrum & 0x0f) << 1;
/* rumble settings */
if (ledrum & 0x30){
buf[1] = buf[3] = 0xfe;
if (ledrum & 0x10) buf[4] = 0xff;
else buf[2] = 0xff;
}
Usb.setReport( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_01_REPORT_LEN, PS3_IF, HID_REPORT_OUTPUT, PS3_01_REPORT_ID , buf );
 
delay(100);
LCD.noCursor();
break;
case Bdaddr:
if(buttonchange){
oldbuttons1 = buttons1;
oldbuttons2 = buttons2;
if (buRight) bdcursor++;
else if (buLeft) bdcursor--;
if (bdcursor > 11) bdcursor = 0;
if (bdcursor < 0) bdcursor = 11;
if(buUp){
if(bdcursor % 2){
if ((bdaddr[bdcursor /2] & 0x0f) == 0x0f) bdaddr[bdcursor /2] &= 0xf0;
bdaddr[bdcursor / 2] += 0x1;
}
else{
if ((bdaddr[bdcursor /2] & 0xf0) == 0xf0) bdaddr[bdcursor /2] &= 0x0f;
bdaddr[bdcursor / 2] += 0x10;
}
}
else if (buDown){
if(bdcursor % 2){
if ((bdaddr[bdcursor /2] & 0x0f) == 0x0) bdaddr[bdcursor /2] |= 0x0f;
bdaddr[bdcursor / 2] -= 0x1;
}
else{
if ((bdaddr[bdcursor /2] & 0xf0) == 0x0) bdaddr[bdcursor /2] |= 0xf0;
bdaddr[bdcursor / 2] -= 0x10;
}
}
if( buCross){
buf[0] = 0x01;
buf[1] = 0x00;
for (i=0; i < 6; i++){
buf[i+2] = bdaddr[i];
}
Serial.println( "bdaddr");
Usb.setReport( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_F5_REPORT_LEN, PS3_IF, HID_REPORT_FEATURE, PS3_F5_REPORT_ID , buf );
}
}
LCD.home();
LCD.print("R: ");
Usb.getReport( PS3_ADDR, ep_record[ CONTROL_EP ].epAddr, PS3_F5_REPORT_LEN, PS3_IF, HID_REPORT_FEATURE, PS3_F5_REPORT_ID , buf );
for( i=0; i < 6; i++){
if ((unsigned char)buf[i+2] < 16) LCD.print ('0');
LCD.print((unsigned char)buf[i + 2], HEX);
}
LCD.setCursor(0,1);
LCD.print("W: ");
for( i=0; i < 6; i++){
if (bdaddr[i] < 16) LCD.print ('0');
LCD.print(bdaddr[i], HEX);
}
LCD.setCursor(3 + bdcursor ,1);
LCD.cursor();
delay(100);
LCD.noCursor();
break;
case Freememory:
LCD.home();
LCD.print("Free Memory ");
LCD.print( freeMemory(), DEC );
LCD.setCursor(0,1);
break;
default:
break;
}
return;
}
 
 
 
 
/C-OSD/arducam-osd/libraries/USBHOST/examples/arm_mouse.pde
0,0 → 1,284
/* AL5D robotic arm manual control using USB mouse. Servo controller by Renbotics with some pins swapped, USB Host Shield by Circuits At Home */
#include <ServoShield.h>
#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#define DEVADDR 1
#define CONFVALUE 1
 
 
 
 
/* Arm dimensions( mm ) */
#define BASE_HGT 67.31 //base hight 2.65"
#define HUMERUS 146.05 //shoulder-to-elbow "bone" 5.75"
#define ULNA 187.325 //elbow-to-wrist "bone" 7.375"
#define GRIPPER 100.00 //gripper (incl.heavy duty wrist rotate mechanism) length 3.94"
 
#define ftl(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) //float to long conversion
 
/* Servo names/numbers */
/* Base servo HS-485HB */
#define BAS_SERVO 0
/* Shoulder Servo HS-5745-MG */
#define SHL_SERVO 1
/* Elbow Servo HS-5745-MG */
#define ELB_SERVO 2
/* Wrist servo HS-645MG */
#define WRI_SERVO 3
/* Wrist rotate servo HS-485HB */
#define WRO_SERVO 4
/* Gripper servo HS-422 */
#define GRI_SERVO 5
 
//#define ARM_PARK set_arm( -50, 140, 100, 0 ) //arm parking position
 
/* pre-calculations */
float hum_sq = HUMERUS*HUMERUS;
float uln_sq = ULNA*ULNA;
 
void setup();
void loop();
ServoShield servos; //ServoShield object
MAX3421E Max;
USB Usb;
//ServoShield servos; //ServoShield object
 
/* Arm data structure */
struct {
float x_coord; // X coordinate of the gripper tip
float y_coord; // Y coordinate of the gripper tip
float z_coord; //Z coordinate of the gripper tip
float gripper_angle; //gripper angle
int16_t gripper_servo; //gripper servo pulse duration
int16_t wrist_rotate; //wrist rotate servo pulse duration
} armdata;
void setup()
{
/* set servo end points */
servos.setbounds( BAS_SERVO, 900, 2100 );
servos.setbounds( SHL_SERVO, 1000, 2100 );
servos.setbounds( ELB_SERVO, 900, 2100 );
servos.setbounds( WRI_SERVO, 600, 2400 );
servos.setbounds( WRO_SERVO, 600, 2400 );
servos.setbounds( GRI_SERVO, 890, 2100 );
/**/
// servo_park();
arm_park();
servos.start(); //Start the servo shield
Max.powerOn();
Serial.begin( 115200 );
Serial.println("Start");
delay( 500 );
//ARM_PARK;
}
 
void loop()
{
byte rcode;
//delay( 10 );
set_arm( armdata.x_coord, armdata.y_coord, armdata.z_coord, armdata.gripper_angle );
servos.setposition( WRO_SERVO, armdata.wrist_rotate );
servos.setposition( GRI_SERVO, armdata.gripper_servo );
//ARM_PARK;
// circle();
Max.Task();
Usb.Task();
if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING ) {
mouse_init();
}//if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING...
if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) { //poll the keyboard
rcode = mouse_poll();
if( rcode ) {
Serial.print("Mouse Poll Error: ");
Serial.println( rcode, HEX );
}//if( rcode...
}//if( Usb.getUsbTaskState() == USB_STATE_RUNNING...
//Serial.println( armdata.gripper_servo, DEC );
}
 
/* Initialize mouse */
void mouse_init( void )
{
byte rcode = 0; //return code
/**/
Usb.setDevTableEntry( 1, Usb.getDevTableEntry( 0,0 ) ); //copy device 0 endpoint information to device 1
/* Configure device */
rcode = Usb.setConf( DEVADDR, 0, CONFVALUE );
if( rcode ) {
Serial.print("Error configuring mouse. Return code : ");
Serial.println( rcode, HEX );
while(1); //stop
}//if( rcode...
Usb.setUsbTaskState( USB_STATE_RUNNING );
return;
}
 
/* Poll mouse using Get Report and fill arm data structure */
byte mouse_poll( void )
{
byte rcode;
char buf[ 4 ]; //mouse buffer
static uint16_t delay = 500; //delay before park
 
/* poll mouse */
rcode = Usb.getReport( DEVADDR, 0, 4, 0, 1, 0, buf );
if( rcode ) { //error
return( rcode );
}
// todo: add arm limit check
armdata.x_coord += ( buf[ 1 ] * -0.1 );
armdata.y_coord += ( buf[ 2 ] * -0.1 );
switch( buf[ 0 ] ) { //read buttons
case 0x00: //no buttons pressed
armdata.z_coord += ( buf[ 3 ] * -2 ) ;
break;
case 0x01: //button 1 pressed. Wheel sets gripper angle
armdata.gripper_servo += ( buf[ 3 ] * -20 );
/* check gripper boundaries */
if( armdata.gripper_servo < 1000 ) {
armdata.gripper_servo = 1000;
}
if( armdata.gripper_servo > 2100 ) {
armdata.gripper_servo = 2100;
}
break;
case 0x02: //button 2 pressed. Wheel sets wrist rotate
armdata.wrist_rotate += ( buf[ 3 ] * -10 );
/* check wrist rotate boundaries */
if( armdata.wrist_rotate < 600 ) {
armdata.wrist_rotate = 600;
}
if( armdata.wrist_rotate > 2400 ) {
armdata.wrist_rotate = 2400;
}
break;
case 0x04: //wheel button pressed. Wheel controls gripper
armdata.gripper_angle += ( buf[ 3 ] * -1 );
/* check gripper angle boundaries */
if( armdata.gripper_angle < -90 ) {
armdata.gripper_angle = -90;
}
if( armdata.gripper_angle > 90 ) {
armdata.gripper_angle = 90;
}
break;
case 0x07: //all 3 buttons pressed. Park the arm
arm_park();
break;
}//switch( buf[ 0 ...
Serial.println( armdata.wrist_rotate, DEC );
}
 
 
/* arm positioning routine utilizing inverse kinematics */
/* z is height, y is distance from base center out, x is side to side. y,z can only be positive */
//void set_arm( uint16_t x, uint16_t y, uint16_t z, uint16_t grip_angle )
void set_arm( float x, float y, float z, float grip_angle_d )
{
float grip_angle_r = radians( grip_angle_d ); //grip angle in radians for use in calculations
/* Base angle and radial distance from x,y coordinates */
float bas_angle_r = atan2( x, y );
float rdist = sqrt(( x * x ) + ( y * y ));
/* rdist is y coordinate for the arm */
y = rdist;
/* Grip offsets calculated based on grip angle */
float grip_off_z = ( sin( grip_angle_r )) * GRIPPER;
float grip_off_y = ( cos( grip_angle_r )) * GRIPPER;
/* Wrist position */
float wrist_z = ( z - grip_off_z ) - BASE_HGT;
float wrist_y = y - grip_off_y;
/* Shoulder to wrist distance ( AKA sw ) */
float s_w = ( wrist_z * wrist_z ) + ( wrist_y * wrist_y );
float s_w_sqrt = sqrt( s_w );
/* s_w angle to ground */
//float a1 = atan2( wrist_y, wrist_z );
float a1 = atan2( wrist_z, wrist_y );
/* s_w angle to humerus */
float a2 = acos((( hum_sq - uln_sq ) + s_w ) / ( 2 * HUMERUS * s_w_sqrt ));
/* shoulder angle */
float shl_angle_r = a1 + a2;
float shl_angle_d = degrees( shl_angle_r );
/* elbow angle */
float elb_angle_r = acos(( hum_sq + uln_sq - s_w ) / ( 2 * HUMERUS * ULNA ));
float elb_angle_d = degrees( elb_angle_r );
float elb_angle_dn = -( 180.0 - elb_angle_d );
/* wrist angle */
float wri_angle_d = ( grip_angle_d - elb_angle_dn ) - shl_angle_d;
/* Servo pulses */
float bas_servopulse = 1500.0 - (( degrees( bas_angle_r )) * 11.11 );
float shl_servopulse = 1500.0 + (( shl_angle_d - 90.0 ) * 6.6 );
float elb_servopulse = 1500.0 - (( elb_angle_d - 90.0 ) * 6.6 );
float wri_servopulse = 1500 + ( wri_angle_d * 11.1 );
 
/* Set servos */
servos.setposition( BAS_SERVO, ftl( bas_servopulse ));
servos.setposition( WRI_SERVO, ftl( wri_servopulse ));
servos.setposition( SHL_SERVO, ftl( shl_servopulse ));
servos.setposition( ELB_SERVO, ftl( elb_servopulse ));
}
 
/* moves the arm to parking position */
void arm_park()
{
set_arm( armdata.x_coord = -50, armdata.y_coord = 140, armdata.z_coord = 100, armdata.gripper_angle = 0 );
servos.setposition( WRO_SERVO, armdata.wrist_rotate = 600 );
servos.setposition( GRI_SERVO, armdata.gripper_servo = 900 );
}
 
/* move servos to parking position */
void servo_park()
{
servos.setposition( BAS_SERVO, 1715 );
servos.setposition( SHL_SERVO, 2100 );
servos.setposition( ELB_SERVO, 2100 );
servos.setposition( WRI_SERVO, 1800 );
servos.setposition( WRO_SERVO, 600 );
servos.setposition( GRI_SERVO, 900 );
return;
}
 
void zero_x()
{
for( double yaxis = 150.0; yaxis < 356.0; yaxis += 1 ) {
set_arm( 0, yaxis, 127.0, 0 );
delay( 10 );
}
for( double yaxis = 356.0; yaxis > 150.0; yaxis -= 1 ) {
set_arm( 0, yaxis, 127.0, 0 );
delay( 10 );
}
}
 
/* moves arm in a straight line */
void line()
{
for( double xaxis = -100.0; xaxis < 100.0; xaxis += 0.5 ) {
set_arm( xaxis, 250, 100, 0 );
delay( 10 );
}
for( float xaxis = 100.0; xaxis > -100.0; xaxis -= 0.5 ) {
set_arm( xaxis, 250, 100, 0 );
delay( 10 );
}
}
 
void circle()
{
#define RADIUS 80.0
//float angle = 0;
float zaxis,yaxis;
for( float angle = 0.0; angle < 360.0; angle += 1.0 ) {
yaxis = RADIUS * sin( radians( angle )) + 200;
zaxis = RADIUS * cos( radians( angle )) + 200;
set_arm( 0, yaxis, zaxis, 0 );
delay( 1 );
}
}
/C-OSD/arducam-osd/libraries/USBHOST/examples/board_test/board_test.h
0,0 → 1,21
/* USB Host Shield board test sketch header */
#ifndef _BOARD_TEST_H_
#define _BOARD_TEST_H_
 
/* PGMSPACE */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
/* Messages */
const char startBanner [] PROGMEM = "\r\nCircuits At Home 2010"
"\r\nUSB Host Shield QC test routine\r\n";
const char anykey_msg [] PROGMEM = "\r\nPress any key to continue...";
const char testpassed_msg [] PROGMEM = "\r\nTest PASSED";
const char testfailed_msg [] PROGMEM = "\r\nTest FAILED*!*";
const char osctest_oscstate_msg [] PROGMEM = " Oscillator state is ";
const char test_halted_msg [] PROGMEM = "\r\nTest Halted."
"\r\n0x55 pattern is being transmitted via SPI to aid in troubleshooting";
const char spitest_fail_msg [] PROGMEM = "\r\nSPI transmit/receive mismatch"
"\r\nValue written: ";
 
#endif
/C-OSD/arducam-osd/libraries/USBHOST/examples/board_test/board_test.pde
0,0 → 1,296
/* USB Host Shield Board test routine. Runs after assembly to check board functionality */
 
/* USB related */
//#include <Spi.h>
#include <Max3421e.h>
#include <Max3421e_constants.h>
#include <Usb.h>
 
#include "board_test.h" /* Board test messages */
 
//#define MAX_SS 10
 
void setup();
void loop();
 
MAX3421E Max;
USB Usb;
 
void setup()
{
Serial.begin( 115200 );
//Serial.println("Start");
//Serial.println( SCK_PIN, DEC );
Max.powerOn();
printProgStr( startBanner );
printProgStr( anykey_msg );
//Serial.print( Max.getvar(), DEC);
}
 
void loop()
{
while( Serial.available() == 0 ); //wait for input
Serial.read(); //empty input buffer
/* start tests */
/* SPI short test */
if (!revregcheck()) test_halted();
/* GPIO test */
if (!gpiocheck()) printProgStr(PSTR("\r\nGPIO check failed. Make sure GPIO loopback adapter is installed"));
/* SPI long test */
if (!spitest()) test_halted(); //test SPI for transmission errors
if (!osctest()) printProgStr(PSTR("OSCOK test failed. Check the oscillator"));
if (!usbtest()) printProgStr(PSTR("USB connection test failed. Check traces from USB connector to MAX3421E, as well as VBUS")); //never gets here
/* All tests passed */
printProgStr( anykey_msg );
}
 
/* SPI short test. Checks connectivity to MAX3421E by reading REVISION register. */
/* Die rev.1 returns 0x01, rev.2 0x12, rev.3 0x13. Any other value is considered communication error */
bool revregcheck()
{
byte tmpbyte;
printProgStr(PSTR("\r\nReading REVISION register...Die revision "));
tmpbyte = Max.regRd( rREVISION );
switch( tmpbyte ) {
case( 0x01 ): //rev.01
printProgStr(PSTR("01"));
break;
case( 0x12 ): //rev.02
printProgStr(PSTR("02"));
break;
case( 0x13 ): //rev.03
printProgStr(PSTR("03"));
break;
default:
printProgStr(PSTR("invalid. Value returned: "));
print_hex( tmpbyte, 8 );
printProgStr( testfailed_msg );
return( false );
break;
}//switch( tmpbyte )...
printProgStr( testpassed_msg );
return( true );
}
/* SPI long test */
bool spitest()
{
byte l = 0;
byte k = 0;
byte gpinpol_copy = Max.regRd( rGPINPOL );
printProgStr(PSTR("\r\nSPI test. Each '.' indicates 64K transferred. Stops after transferring 1MB (16 dots)\r\n"));
/**/
for( byte j = 0; j < 16; j++ ) {
for( word i = 0; i < 65535; i++ ) {
Max.regWr( rGPINPOL, k );
l = Max.regRd( rGPINPOL);
if( l != k ) {
printProgStr( spitest_fail_msg );
print_hex( k, 8);
printProgStr(PSTR("Value read: "));
print_hex( l, 8 );
return( false ); //test failed
}
k++;
}//for( i = 0; i < 65535; i++
Serial.print(".");
}//for j = 0; j < 16...
Max.regWr( rGPINPOL, gpinpol_copy );
printProgStr(testpassed_msg);
return( true );
}
/* Oscillator test */
bool osctest()
{
printProgStr(PSTR("\r\nOscillator start/stop test."));
printProgStr( osctest_oscstate_msg );
check_OSCOKIRQ(); //print OSCOK state
printProgStr(PSTR("\r\nSetting CHIP RESET."));
Max.regWr( rUSBCTL, bmCHIPRES ); //Chip reset. This stops the oscillator
printProgStr( osctest_oscstate_msg );
check_OSCOKIRQ(); //print OSCOK state
printProgStr(PSTR("\r\nClearing CHIP RESET. "));
Max.regWr( rUSBCTL, 0x00 ); //Chip reset release
for( word i = 0; i < 65535; i++) {
if( Max.regRd( rUSBIRQ ) & bmOSCOKIRQ ) {
printProgStr(PSTR("PLL is stable. Time to stabilize - "));
Serial.print( i, DEC );
printProgStr(PSTR(" cycles"));
printProgStr( testpassed_msg );
return( true );
}
}//for i =
return(false);
}
/* Stop/start oscillator */
void check_OSCOKIRQ()
{
if( Max.regRd( rUSBIRQ ) & bmOSCOKIRQ ) { //checking oscillator state
printProgStr(PSTR("ON"));
}
else {
printProgStr(PSTR("OFF"));
}
}
/* Test USB connectivity */
bool usbtest()
{
byte rcode;
byte usbstate;
Max.powerOn();
delay( 200 );
printProgStr(PSTR("\r\nUSB Connectivity test. Waiting for device connection... "));
while( 1 ) {
delay( 200 );
Max.Task();
Usb.Task();
usbstate = Usb.getUsbTaskState();
switch( usbstate ) {
case( USB_ATTACHED_SUBSTATE_RESET_DEVICE ):
printProgStr(PSTR("\r\nDevice connected. Resetting"));
break;
case( USB_ATTACHED_SUBSTATE_WAIT_SOF ):
printProgStr(PSTR("\r\nReset complete. Waiting for the first SOF..."));
//delay( 1000 );
break;
case( USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE ):
printProgStr(PSTR("\r\nSOF generation started. Enumerating device."));
break;
case( USB_STATE_ADDRESSING ):
printProgStr(PSTR("\r\nSetting device address"));
//delay( 100 );
break;
case( USB_STATE_CONFIGURING ):
//delay( 1000 );
printProgStr(PSTR("\r\nGetting device descriptor"));
rcode = getdevdescr( 1 );
if( rcode ) {
printProgStr(PSTR("\r\nError reading device descriptor. Error code "));
print_hex( rcode, 8 );
}
else {
printProgStr(PSTR("\r\n\nAll tests passed. Press RESET to restart test"));
while(1);
}
break;
case( USB_STATE_ERROR ):
printProgStr(PSTR("\r\nUSB state machine reached error state"));
break;
default:
break;
}//switch
}//while(1)
}
/* Get device descriptor */
byte getdevdescr( byte addr )
{
USB_DEVICE_DESCRIPTOR buf;
byte rcode;
rcode = Usb.getDevDescr( addr, 0, 0x12, ( char *)&buf );
if( rcode ) {
return( rcode );
}
printProgStr(PSTR("\r\nDevice descriptor: "));
printProgStr(PSTR("\r\nDescriptor Length:\t"));
print_hex( buf.bLength, 8 );
printProgStr(PSTR("\r\nDescriptor type:\t"));
print_hex( buf.bDescriptorType, 8 );
printProgStr(PSTR("\r\nUSB version:\t"));
print_hex( buf.bcdUSB, 16 );
printProgStr(PSTR("\r\nDevice class:\t"));
print_hex( buf.bDeviceClass, 8 );
printProgStr(PSTR("\r\nDevice Subclass:\t"));
print_hex( buf.bDeviceSubClass, 8 );
printProgStr(PSTR("\r\nDevice Protocol:\t"));
print_hex( buf.bDeviceProtocol, 8 );
printProgStr(PSTR("\r\nMax.packet size:\t"));
print_hex( buf.bMaxPacketSize0, 8 );
printProgStr(PSTR("\r\nVendor ID:\t"));
print_hex( buf.idVendor, 16 );
printProgStr(PSTR("\r\nProduct ID:\t"));
print_hex( buf.idProduct, 16 );
printProgStr(PSTR("\r\nRevision ID:\t"));
print_hex( buf.bcdDevice, 16 );
printProgStr(PSTR("\r\nMfg.string index:\t"));
print_hex( buf.iManufacturer, 8 );
printProgStr(PSTR("\r\nProd.string index:\t"));
print_hex( buf.iProduct, 8 );
printProgStr(PSTR("\r\nSerial number index:\t"));
print_hex( buf.iSerialNumber, 8 );
printProgStr(PSTR("\r\nNumber of conf.:\t"));
print_hex( buf.bNumConfigurations, 8 );
return( 0 );
}
 
/* GPIO lines check. A loopback adapter connecting GPIN to GPOUT is assumed */
bool gpiocheck()
{
byte tmpbyte = 0;
printProgStr(PSTR("\r\nChecking GPIO lines. Install GPIO loopback adapter and press any key to continue..."));
while( Serial.available() == 0 ); //wait for input
Serial.read(); //empty input buffer
for( byte i = 0; i < 255; i++ ) {
Max.gpioWr( i );
tmpbyte = Max.gpioRd();
if( tmpbyte != i ) {
printProgStr(PSTR("GPIO read/write mismatch. Write: "));
Serial.print(i, HEX);
printProgStr(PSTR(" Read: "));
Serial.println( tmpbyte, HEX );
return( false );
}//if( tmpbyte != i )
}//for( i= 0...
printProgStr( testpassed_msg );
return( true );
}
/* Test halted state. Generates 0x55 to aid in SPI troubleshooting */
void test_halted()
{
printProgStr( test_halted_msg );
printProgStr(PSTR("\r\nPress RESET to restart test"));
while( 1 ) { //System Stop. Generating pattern to keep SCLK, MISO, MOSI, SS busy
digitalWrite(MAX_SS,LOW);
Max.regWr( 0x55, 0x55 );
// Spi.transfer( 0x55 );
digitalWrite(MAX_SS,HIGH);
}
}
/* given a PROGMEM string, use Serial.print() to send it out */
/* Some non-intuitive casting necessary: */
/* printProgStr(PSTR("Func.Mode:\t0x")); */
/* printProgStr((char*)pgm_read_word(&mtpopNames[(op & 0xFF)])); */
void printProgStr(const char* str )
{
if(!str) {
return;
}
char c;
while((c = pgm_read_byte(str++))) {
Serial.print(c,BYTE);
}
}
/* prints hex numbers with leading zeroes */
// copyright, Peter H Anderson, Baltimore, MD, Nov, '07
// source: http://www.phanderson.com/arduino/arduino_display.html
void print_hex(int v, int num_places)
{
int mask=0, n, num_nibbles, digit;
 
for (n=1; n<=num_places; n++)
{
mask = (mask << 1) | 0x0001;
}
v = v & mask; // truncate v to specified number of places
 
num_nibbles = num_places / 4;
if ((num_places % 4) != 0)
{
++num_nibbles;
}
 
do
{
digit = ((v >> (num_nibbles-1) * 4)) & 0x0f;
Serial.print(digit, HEX);
}
while(--num_nibbles);
}
/C-OSD/arducam-osd/libraries/USBHOST/examples/conf_descr_dump.pde
0,0 → 1,181
/* MAX3421E USB Host controller get configuration descriptor */
#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#define LOBYTE(x) ((char*)(&(x)))[0]
#define HIBYTE(x) ((char*)(&(x)))[1]
#define BUFSIZE 256 //buffer size
void setup();
void loop();
MAX3421E Max;
USB Usb;
void setup()
{
byte tmpdata = 0;
Serial.begin( 9600 );
Serial.println("Start");
Max.powerOn();
delay( 200 );
}
void loop()
{
byte rcode;
byte tmpbyte;
Max.Task();
Usb.Task();
if( Usb.getUsbTaskState() >= USB_STATE_CONFIGURING ) { //state configuring or higher
/* entering configuration number to decode. Restricted to first 10 configurations */
Serial.print("Enter configuration number: ");
while( Serial.available() == 0 ); //wait for input
tmpbyte = Serial.read();
Serial.println( tmpbyte );
tmpbyte -= 0x30; //convert to number
if( tmpbyte > 9 ) {
Serial.println("Not a number. Assuming configuration 0");
tmpbyte = 0;
}
rcode = getconfdescr( 1, tmpbyte ); //get configuration descriptor
if( rcode ) {
Serial.println( rcode, HEX );
}
// while( 1 ); //stop
}
}
byte getconfdescr( byte addr, byte conf )
{
char buf[ BUFSIZE ];
char* buf_ptr = buf;
byte rcode;
byte descr_length;
byte descr_type;
unsigned int total_length;
rcode = Usb.getConfDescr( addr, 0, 4, conf, buf ); //get total length
LOBYTE( total_length ) = buf[ 2 ];
HIBYTE( total_length ) = buf[ 3 ];
if( total_length > BUFSIZE ) { //check if total length is larger than buffer
Serial.println("Total length truncated to 256 bytes");
total_length = BUFSIZE;
}
rcode = Usb.getConfDescr( addr, 0, total_length, conf, buf ); //get the whole descriptor
while( buf_ptr < buf + total_length ) { //parsing descriptors
descr_length = *( buf_ptr );
descr_type = *( buf_ptr + 1 );
switch( descr_type ) {
case( USB_DESCRIPTOR_CONFIGURATION ):
printconfdescr( buf_ptr );
break;
case( USB_DESCRIPTOR_INTERFACE ):
printintfdescr( buf_ptr );
break;
case( USB_DESCRIPTOR_ENDPOINT ):
printepdescr( buf_ptr );
break;
default:
printunkdescr( buf_ptr );
break;
}//switch( descr_type
Serial.println("");
buf_ptr = ( buf_ptr + descr_length ); //advance buffer pointer
}//while( buf_ptr <=...
return( 0 );
}
/* prints hex numbers with leading zeroes */
// copyright, Peter H Anderson, Baltimore, MD, Nov, '07
// source: http://www.phanderson.com/arduino/arduino_display.html
void print_hex(int v, int num_places)
{
int mask=0, n, num_nibbles, digit;
for (n=1; n<=num_places; n++) {
mask = (mask << 1) | 0x0001;
}
v = v & mask; // truncate v to specified number of places
num_nibbles = num_places / 4;
if ((num_places % 4) != 0) {
++num_nibbles;
}
do {
digit = ((v >> (num_nibbles-1) * 4)) & 0x0f;
Serial.print(digit, HEX);
}
while(--num_nibbles);
}
/* function to print configuration descriptor */
void printconfdescr( char* descr_ptr )
{
USB_CONFIGURATION_DESCRIPTOR* conf_ptr = ( USB_CONFIGURATION_DESCRIPTOR* )descr_ptr;
Serial.println("Configuration descriptor:");
Serial.print("Total length:\t");
print_hex( conf_ptr->wTotalLength, 16 );
Serial.print("\r\nNum.intf:\t\t");
print_hex( conf_ptr->bNumInterfaces, 8 );
Serial.print("\r\nConf.value:\t");
print_hex( conf_ptr->bConfigurationValue, 8 );
Serial.print("\r\nConf.string:\t");
print_hex( conf_ptr->iConfiguration, 8 );
Serial.print("\r\nAttr.:\t\t");
print_hex( conf_ptr->bmAttributes, 8 );
Serial.print("\r\nMax.pwr:\t\t");
print_hex( conf_ptr->bMaxPower, 8 );
return;
}
/* function to print interface descriptor */
void printintfdescr( char* descr_ptr )
{
USB_INTERFACE_DESCRIPTOR* intf_ptr = ( USB_INTERFACE_DESCRIPTOR* )descr_ptr;
Serial.println("\r\nInterface descriptor:");
Serial.print("Intf.number:\t");
print_hex( intf_ptr->bInterfaceNumber, 8 );
Serial.print("\r\nAlt.:\t\t");
print_hex( intf_ptr->bAlternateSetting, 8 );
Serial.print("\r\nEndpoints:\t\t");
print_hex( intf_ptr->bNumEndpoints, 8 );
Serial.print("\r\nClass:\t\t");
print_hex( intf_ptr->bInterfaceClass, 8 );
Serial.print("\r\nSubclass:\t\t");
print_hex( intf_ptr->bInterfaceSubClass, 8 );
Serial.print("\r\nProtocol:\t\t");
print_hex( intf_ptr->bInterfaceProtocol, 8 );
Serial.print("\r\nIntf.string:\t");
print_hex( intf_ptr->iInterface, 8 );
return;
}
/* function to print endpoint descriptor */
void printepdescr( char* descr_ptr )
{
USB_ENDPOINT_DESCRIPTOR* ep_ptr = ( USB_ENDPOINT_DESCRIPTOR* )descr_ptr;
Serial.println("\r\nEndpoint descriptor:");
Serial.print("Endpoint address:\t");
print_hex( ep_ptr->bEndpointAddress, 8 );
Serial.print("\r\nAttr.:\t\t");
print_hex( ep_ptr->bmAttributes, 8 );
Serial.print("\r\nMax.pkt size:\t");
print_hex( ep_ptr->wMaxPacketSize, 16 );
Serial.print("\r\nPolling interval:\t");
print_hex( ep_ptr->bInterval, 8 );
return;
}
/*function to print unknown descriptor */
void printunkdescr( char* descr_ptr )
{
byte length = *descr_ptr;
byte i;
Serial.println("\r\nUnknown descriptor:");
Serial. print("Length:\t\t");
print_hex( *descr_ptr, 8 );
Serial.print("\r\nType:\t\t");
print_hex( *(descr_ptr + 1 ), 8 );
Serial.print("\r\nContents:\t");
descr_ptr += 2;
for( i = 0; i < length; i++ ) {
print_hex( *descr_ptr, 8 );
descr_ptr++;
}
}
/C-OSD/arducam-osd/libraries/USBHOST/examples/descriptor_parser/descriptor_parser.h
0,0 → 1,284
#ifndef _DESCRIPTOR_PARSER_
#define _DESCRIPTOR_PARSER_
 
/* PGMSPACE */
#include <inttypes.h>
#include <avr/pgmspace.h>
 
typedef void (*PARSE)( uint8_t bytes );
 
/* Common Messages */
 
const char descr_len [] PROGMEM = "\r\nDescriptor Length:\t";
const char descr_type [] PROGMEM = "\r\nDescriptor type:\t";
const char class_str [] PROGMEM = "\r\nClass:\t\t\t";
const char subclass_str [] PROGMEM = "\r\nSubclass:\t\t";
const char protocol_str [] PROGMEM = "\r\nProtocol:\t\t";
const char maxpktsize_str [] PROGMEM = "\r\nMax.packet size:\t";
const char unk_msg [] PROGMEM = " Unknown";
const char reserved_msg [] PROGMEM = "Reserved";
const char rcode_error_msg [] PROGMEM = "\r\nRequest error. Reurn code: ";
 
/* Endpoint attributes */
 
const char control_tr [] PROGMEM = "Control";
const char iso_tr [] PROGMEM = "Isochronous";
const char bulk_tr [] PROGMEM = "Bulk";
const char int_tr [] PROGMEM = "Interrupt";
 
const char* transfer_types [] PROGMEM =
{
control_tr,
iso_tr,
bulk_tr,
int_tr
};
 
const char nosync_type [] PROGMEM = "No Synchronization";
const char async_type [] PROGMEM = "Asynchronous";
const char adaptive_type [] PROGMEM = "Adaptive";
const char sync_type [] PROGMEM = "Synchronous";
 
const char* sync_types [] PROGMEM =
{
nosync_type,
async_type,
adaptive_type,
sync_type
};
 
const char data_usage [] PROGMEM = "Data";
const char feedback_usage [] PROGMEM = "Feedback";
const char implicit_usage [] PROGMEM = "Implicit Feedback Data";
const char reserved_usage [] PROGMEM = "Reserved";
 
const char* usage_types [] PROGMEM =
{
data_usage,
feedback_usage,
implicit_usage,
reserved_usage
};
 
/* HID Country Codes */
 
const char notsupported_cc [] PROGMEM = "Not Supported";
const char arabic_cc [] PROGMEM = "Arabic";
const char belgian_cc [] PROGMEM = "Belgian";
const char canadianbi_cc [] PROGMEM = "Canadian-Bilingual";
const char canadianfr_cc [] PROGMEM = "Canadian-French";
const char czech_cc [] PROGMEM = "Czech Republic";
const char danish_cc [] PROGMEM = "Danish";
const char finnish_cc [] PROGMEM = "Finnish";
const char french_cc [] PROGMEM = "French";
const char german_cc [] PROGMEM = "German";
const char greek_cc [] PROGMEM = "Greek";
const char hebrew_cc [] PROGMEM = "Hebrew";
const char hungary_cc [] PROGMEM = "Hungary";
const char intl_cc [] PROGMEM = "International (ISO)";
const char italian_cc [] PROGMEM = "Italian";
const char japan_cc [] PROGMEM = "Japan (Katakana)";
const char korean_cc [] PROGMEM = "Korean";
const char latam_cc [] PROGMEM = "Latin American";
const char dutch_cc [] PROGMEM = "Netherlands/Dutch";
const char norwegian_cc [] PROGMEM = "Norwegian";
const char persian_cc [] PROGMEM = "Persian (Farsi)";
const char poland_cc [] PROGMEM = "Poland";
const char portuguese_cc [] PROGMEM = "Portuguese";
const char russia_cc [] PROGMEM = "Russia";
const char slovakia_cc [] PROGMEM = "Slovakia";
const char spanish_cc [] PROGMEM = "Spanish";
const char swedish_cc [] PROGMEM = "Swedish";
const char swiss_fr_cc [] PROGMEM = "Swiss/French";
const char swiss_ger_cc [] PROGMEM = "Swiss/German";
const char swiss_cc [] PROGMEM = "Switzerland";
const char taiwan_cc [] PROGMEM = "Taiwan";
const char turkish_q_cc [] PROGMEM = "Turkish-Q";
const char uk_cc [] PROGMEM = "UK";
const char us_cc [] PROGMEM = "US";
const char yugo_cc [] PROGMEM = "Yugoslavia";
const char turkish_f_cc [] PROGMEM = "Turkish-F";
 
const char* HID_Country_Codes [] PROGMEM =
{
notsupported_cc,
arabic_cc,
belgian_cc,
canadianbi_cc,
canadianfr_cc,
czech_cc,
danish_cc,
finnish_cc,
french_cc,
german_cc,
greek_cc,
hebrew_cc,
hungary_cc,
intl_cc,
italian_cc,
japan_cc,
korean_cc,
latam_cc,
dutch_cc,
norwegian_cc,
persian_cc,
poland_cc,
portuguese_cc,
russia_cc,
slovakia_cc,
spanish_cc,
swedish_cc,
swiss_fr_cc,
swiss_ger_cc,
swiss_cc,
taiwan_cc,
turkish_q_cc,
uk_cc,
us_cc,
yugo_cc,
turkish_f_cc
};
 
/* HID report descriptor parser string definitions */
/* Item type strings */
const char btype_main [] PROGMEM = "Main";
const char btype_global [] PROGMEM = "Global";
const char btype_local [] PROGMEM = "Local";
const char btype_reserved [] PROGMEM = "Reserved";
/* Item types strings array. Array index corresponds to bType */
const char* btypes [] PROGMEM =
{
btype_main,
btype_global,
btype_local,
btype_reserved
};
/* Main Item Tag Strings */
const char main_tag_input [] PROGMEM = "Input\t\t";
const char main_tag_output [] PROGMEM = "Output\t\t";
const char main_tag_collection [] PROGMEM = "Collection\t\t";
const char main_tag_feature [] PROGMEM = "Feature\t\t";
const char main_tag_endcoll [] PROGMEM = "End Collection\t";
/* Main Item Tags Strings Array */
const char* maintags [] PROGMEM =
{
main_tag_input,
main_tag_output,
main_tag_collection,
main_tag_feature,
main_tag_endcoll
};
/* Global Item Tag Strings */
const char global_tag_usagepage [] PROGMEM = "Usage Page\t\t";
const char global_tag_logmin [] PROGMEM = "Logical Minimum\t";
const char global_tag_logmax [] PROGMEM = "Logical Maximum\t";
const char global_tag_physmin [] PROGMEM = "Physical Minimum\t";
const char global_tag_physmax [] PROGMEM = "Physical Maximum\t";
const char global_tag_unitexp [] PROGMEM = "Unit Exponent\t";
const char global_tag_unit [] PROGMEM = "Unit\t\t";
const char global_tag_repsize [] PROGMEM = "Report Size\t";
const char global_tag_repid [] PROGMEM = "Report ID\t\t";
const char global_tag_repcount [] PROGMEM = "Report Count\t";
const char global_tag_push [] PROGMEM = "Push\t\t";
const char global_tag_pop [] PROGMEM = "Pop\t\t";
/* Global Item Tag Strings Array */
const char* globaltags [] PROGMEM =
{
global_tag_usagepage,
global_tag_logmin,
global_tag_logmax,
global_tag_physmin,
global_tag_physmax,
global_tag_unitexp,
global_tag_unit,
global_tag_repsize,
global_tag_repid,
global_tag_repcount,
global_tag_push,
global_tag_pop
};
/* Local Item Tag Strings */
const char local_tag_usage [] PROGMEM = "Usage\t\t";
const char local_tag_usagemin [] PROGMEM = "Usage Minimum\t";
const char local_tag_usagemax [] PROGMEM = "Usage Maximum\t";
const char local_tag_desidx [] PROGMEM = "Designator Index\t";
const char local_tag_desmin [] PROGMEM = "Designator Minimum\t";
const char local_tag_desmax [] PROGMEM = "Designator Maximum\t";
const char local_tag_stridx [] PROGMEM = "String Index\t";
const char local_tag_strmin [] PROGMEM = "String Minimum\t";
const char local_tag_strmax [] PROGMEM = "String Maximum\t";
const char local_tag_delimiter [] PROGMEM = "Delimiter\t";
/* Local Item Tag Strings Array */
const char* localtags [] PROGMEM =
{
local_tag_usage,
local_tag_usagemin,
local_tag_usagemax,
local_tag_desidx,
local_tag_desmin,
local_tag_desmax,
local_tag_stridx,
local_tag_strmin,
local_tag_strmax,
local_tag_delimiter
};
/* Collection Types Strings */
const char coll_phy [] PROGMEM = "Physical (group of axes)";
const char coll_app [] PROGMEM = "Application (mouse, keyboard)";
const char coll_log [] PROGMEM = "Logical (interrelated data)";
const char coll_rep [] PROGMEM = "Report";
const char coll_arr [] PROGMEM = "Named Array";
const char coll_usw [] PROGMEM = "Usage Switch";
const char coll_umod [] PROGMEM = "Usage Modifier";
/* Collection Types Strings Array */
const char* collections [] PROGMEM =
{
coll_phy,
coll_app,
coll_log,
coll_rep,
coll_arr,
coll_usw,
coll_umod
};
/* Usage Pages Strings */
const char up_undef [] PROGMEM = "Undefined";
const char up_gendesk [] PROGMEM = "Generic Desktop Controls";
const char up_sim [] PROGMEM = "Simulation Controls";
const char up_vr [] PROGMEM = "VR Controls";
const char up_sport [] PROGMEM = "Sport Controls";
const char up_game [] PROGMEM = "Game Controls";
const char up_gendev [] PROGMEM = "Generic Device Controls";
const char up_kbd [] PROGMEM = "Keyboard/Keypad";
const char up_led [] PROGMEM = "LEDs";
const char up_button [] PROGMEM = "Button";
const char up_ord [] PROGMEM = "Ordinal";
const char up_tele [] PROGMEM = "Telephony";
const char up_cons [] PROGMEM = "Consumer";
const char up_dig [] PROGMEM = "Digitizer";
//const char up_res [] PROGMEM = "Reserved";
const char up_pid [] PROGMEM = "PID Page";
const char up_uni [] PROGMEM = "Unicode";
/* Usage Pages Strings Array */
const char * usage_pages [] PROGMEM =
{
up_undef,
up_gendesk,
up_sim,
up_vr,
up_sport,
up_game,
up_gendev,
up_kbd,
up_led,
up_button,
up_ord,
up_tele,
up_cons,
up_dig,
reserved_msg,
up_pid,
up_uni
};
 
#endif //_DESCRIPTOR_PARSER_
/C-OSD/arducam-osd/libraries/USBHOST/examples/descriptor_parser/descriptor_parser.pde
0,0 → 1,720
/* MAX3421E USB Host controller configuration descriptor parser */
#include <Spi.h>
#include <Max3421e.h>
#include <Usb.h>
#include "descriptor_parser.h"
#define LOBYTE(x) ((char*)(&(x)))[0]
#define HIBYTE(x) ((char*)(&(x)))[1]
#define BUFSIZE 256 //buffer size
#define DEVADDR 1
 
#define getReportDescr( addr, ep, nbytes, parse_func, nak_limit ) ctrlXfer( addr, ep, bmREQ_HIDREPORT, USB_REQUEST_GET_DESCRIPTOR, 0x00, HID_DESCRIPTOR_REPORT, 0x0000, nbytes, parse_func, nak_limit )
#define getReport( addr, ep, nbytes, interface, report_type, report_id, parse_func, nak_limit ) ctrlXfer( addr, ep, bmREQ_HIDIN, HID_REQUEST_GET_REPORT, report_id, report_type, interface, nbytes, parse_func, nak_limit )
 
/* Foeward declarations */
void setup();
void loop();
byte ctrlXfer( byte addr, byte ep, byte bmReqType, byte bRequest, byte wValLo, byte wValHi, unsigned int wInd, uint16_t nbytes, PARSE parse_func, uint16_t nak_limit );
void HIDreport_parse( uint8_t* buf, uint8_t* head, uint8_t* tail);
 
typedef struct {
uint8_t bDescriptorType;
uint16_t wDescriptorLength;
} HID_CLASS_DESCRIPTOR;
 
 
//typedef void (*PARSE)( int8_t*, int8_t*, int8_t );
 
MAX3421E Max;
USB Usb;
void setup()
{
Serial.begin( 115200 );
printProgStr(PSTR("\r\nStart"));
Max.powerOn();
delay( 200 );
}
void loop()
{
uint8_t rcode;
uint8_t tmpbyte = 0;
//PARSE pf = &HIDreport_parse;
/**/
Max.Task();
Usb.Task();
if( Usb.getUsbTaskState() >= USB_STATE_CONFIGURING ) { //state configuring or higher
/* printing device descriptor */
printProgStr(PSTR("\r\nDevice addressed... "));
printProgStr(PSTR("Requesting device descriptor."));
tmpbyte = getdevdescr( DEVADDR ); //number of configurations, 0 if error
if( tmpbyte == 0 ) {
printProgStr(PSTR("\r\nDevice descriptor cannot be retrieved. Program Halted\r\n"));
while( 1 ); //stop
}//if( tmpbyte
/* print configuration descriptors for all configurations */
for( uint8_t i = 0; i < tmpbyte; i++ ) {
getconfdescr( DEVADDR, i );
}
/* Stop */
while( 1 ); //stop
}
}
 
/* Prints device descriptor. Returns number of configurations or zero if request error occured */
byte getdevdescr( byte addr )
{
USB_DEVICE_DESCRIPTOR buf;
byte rcode;
//Max.toggle( BPNT_0 );
rcode = Usb.getDevDescr( addr, 0, 0x12, ( char *)&buf );
if( rcode ) {
printProgStr( rcode_error_msg );
print_hex( rcode, 8 );
return( 0 );
}
printProgStr(PSTR("\r\nDevice descriptor: \r\n"));
//Descriptor length
printProgStr( descr_len );
print_hex( buf.bLength, 8 );
//Descriptor type
// printProgStr( descr_type );
// print_hex( buf.bDescriptorType, 8 );
// printProgStr( descrtype_parse( buf.bDescriptorType ));
//USB Version
printProgStr(PSTR("\r\nUSB version:\t\t"));
Serial.print(( HIBYTE( buf.bcdUSB )), HEX );
Serial.print(".");
Serial.print(( LOBYTE( buf.bcdUSB )), HEX );
//Device class
printProgStr( class_str );
print_hex( buf.bDeviceClass, 8 );
printProgStr( classname_parse( buf.bDeviceClass ));
//Device Subclass
printProgStr( subclass_str );
print_hex( buf.bDeviceSubClass, 8 );
//Device Protocol
printProgStr( protocol_str );
print_hex( buf.bDeviceProtocol, 8 );
//Max.packet size
printProgStr( maxpktsize_str );
print_hex( buf.bMaxPacketSize0, 8 );
//VID
printProgStr(PSTR("\r\nVendor ID:\t\t"));
print_hex( buf.idVendor, 16 );
//PID
printProgStr(PSTR("\r\nProduct ID:\t\t"));
print_hex( buf.idProduct, 16 );
//Revision
printProgStr(PSTR("\r\nRevision ID:\t\t"));
print_hex( buf.bcdDevice, 16 );
//Mfg.string
printProgStr (PSTR("\r\nMfg.string index:\t"));
print_hex( buf.iManufacturer, 8 );
getstrdescr( addr, buf.iManufacturer );
//Prod.string
printProgStr(PSTR("\r\nProd.string index:\t"));
print_hex( buf.iProduct, 8 );
//printProgStr( str_cont );
getstrdescr( addr, buf.iProduct );
//Serial number string
printProgStr(PSTR("\r\nSerial number index:\t"));
print_hex( buf.iSerialNumber, 8 );
//printProgStr( str_cont );
getstrdescr( addr, buf.iSerialNumber );
//Number of configurations
printProgStr(PSTR("\r\nNumber of conf.:\t"));
print_hex( buf.bNumConfigurations, 8 );
return( buf.bNumConfigurations );
}
/* Get string descriptor. Takes device address and string index */
byte getstrdescr( byte addr, byte idx )
{
char buf[ BUFSIZE ];
byte rcode;
byte length;
byte i;
unsigned int langid;
if( idx == 0 ) { //don't try to get index zero
return( 0 );
}
rcode = Usb.getStrDescr( addr, 0, 1, 0, 0, buf ); //get language table length
if( rcode ) {
printProgStr(PSTR("\r\nError retrieving LangID table length"));
return( rcode );
}
length = buf[ 0 ]; //length is the first byte
rcode = Usb.getStrDescr( addr, 0, length, 0, 0, buf ); //get language table
if( rcode ) {
printProgStr(PSTR("\r\nError retrieving LangID table"));
return( rcode );
}
HIBYTE( langid ) = buf[ 3 ]; //get first langid
LOBYTE( langid ) = buf[ 2 ]; //bytes are swapped to account for endiannes
//printProgStr(PSTR("\r\nLanguage ID: "));
//print_hex( langid, 16 );
rcode = Usb.getStrDescr( addr, 0, 1, idx, langid, buf );
if( rcode ) {
printProgStr(PSTR("\r\nError retrieving string length"));
return( rcode );
}
length = ( buf[ 0 ] < 254 ? buf[ 0 ] : 254 );
printProgStr(PSTR(" Length: "));
Serial.print( length, DEC );
rcode = Usb.getStrDescr( addr, 0, length, idx, langid, buf );
if( rcode ) {
printProgStr(PSTR("\r\nError retrieveing string"));
return( rcode );
}
printProgStr(PSTR(" Contents: "));
for( i = 2; i < length; i+=2 ) {
Serial.print( buf[ i ] );
}
return( idx );
}
/* Returns string to class name */
const char* classname_parse( byte class_number )
{
switch( class_number ) {
case 0x00:
return PSTR(" Use class information in the Interface Descriptor");
case 0x01:
return PSTR(" Audio");
case 0x02:
return PSTR(" Communications and CDC Control");
case 0x03:
return PSTR(" HID (Human Interface Device)");
case 0x05:
return PSTR(" Physical");
case 0x06:
return PSTR(" Image");
case 0x07:
return PSTR(" Printer");
case 0x08:
return PSTR(" Mass Storage");
case 0x09:
return PSTR(" Hub");
case 0x0a:
return PSTR(" CDC-Data");
case 0x0b:
return PSTR(" Smart Card");
case 0x0d:
return PSTR(" Content Security");
case 0x0e:
return PSTR(" Video");
case 0x0f:
return PSTR(" Personal Healthcare");
case 0xdc:
return PSTR("Diagnostic Device");
case 0xe0:
return PSTR(" Wireless Controller");
case 0xef:
return PSTR(" Miscellaneous");
case 0xfe:
return PSTR(" Application Specific");
case 0xff:
return PSTR(" Vendor Specific");
default:
return unk_msg;
}//switch( class_number
}
/* Getting configuration descriptor */
byte getconfdescr( byte addr, byte conf )
{
char buf[ BUFSIZE ];
char* buf_ptr = buf;
byte rcode;
byte descr_length;
byte descr_type;
unsigned int total_length;
printProgStr(PSTR("\r\n\nConfiguration number "));
Serial.print( conf, HEX );
rcode = Usb.getConfDescr( addr, 0, 4, conf, buf ); //get total length
if( rcode ) {
printProgStr(PSTR("Error retrieving configuration length. Error code "));
Serial.println( rcode, HEX );
return( 0 );
}//if( rcode
LOBYTE( total_length ) = buf[ 2 ];
HIBYTE( total_length ) = buf[ 3 ];
printProgStr(PSTR("\r\nTotal configuration length: "));
Serial.print( total_length, DEC );
printProgStr(PSTR(" bytes"));
if( total_length > BUFSIZE ) { //check if total length is larger than buffer
printProgStr(PSTR("Total length truncated to "));
Serial.print( BUFSIZE, DEC);
printProgStr(PSTR("bytes"));
total_length = BUFSIZE;
}
rcode = Usb.getConfDescr( addr, 0, total_length, conf, buf ); //get the whole descriptor
while( buf_ptr < buf + total_length ) { //parsing descriptors
descr_length = *( buf_ptr );
descr_type = *( buf_ptr + 1 );
switch( descr_type ) {
case( USB_DESCRIPTOR_CONFIGURATION ):
printconfdescr( buf_ptr );
break;
case( USB_DESCRIPTOR_INTERFACE ):
printintfdescr( buf_ptr );
break;
case( USB_DESCRIPTOR_ENDPOINT ):
printepdescr( buf_ptr );
break;
case( HID_DESCRIPTOR_HID ):
printhid_descr( buf_ptr );
break;
default:
printunkdescr( buf_ptr );
break;
}//switch( descr_type
Serial.println("");
buf_ptr = ( buf_ptr + descr_length ); //advance buffer pointer
}//while( buf_ptr <=...
return( 0 );
}
/* function to print configuration descriptor */
void printconfdescr( char* descr_ptr )
{
USB_CONFIGURATION_DESCRIPTOR* conf_ptr = ( USB_CONFIGURATION_DESCRIPTOR* )descr_ptr;
uint8_t tmpbyte;
printProgStr(PSTR("\r\n\nConfiguration descriptor:"));
printProgStr(PSTR("\r\nTotal length:\t\t"));
print_hex( conf_ptr->wTotalLength, 16 );
printProgStr(PSTR("\r\nNumber of interfaces:\t"));
print_hex( conf_ptr->bNumInterfaces, 8 );
printProgStr(PSTR("\r\nConfiguration value:\t"));
print_hex( conf_ptr->bConfigurationValue, 8 );
printProgStr(PSTR("\r\nConfiguration string:\t"));
tmpbyte = conf_ptr->iConfiguration;
print_hex( tmpbyte, 8 );
getstrdescr( DEVADDR, tmpbyte );
printProgStr(PSTR("\r\nAttributes:\t\t"));
tmpbyte = conf_ptr->bmAttributes;
print_hex( tmpbyte, 8 );
if( tmpbyte & 0x40 ) { //D6
printProgStr(PSTR(" Self-powered"));
}
if( tmpbyte & 0x20 ) { //D5
printProgStr(PSTR(" Remote Wakeup"));
}
printProgStr(PSTR("\r\nMax.power:\t\t"));
tmpbyte = conf_ptr->bMaxPower;
print_hex( tmpbyte, 8 );
printProgStr(PSTR(" "));
Serial.print(( tmpbyte * 2 ), DEC);
printProgStr(PSTR("ma"));
return;
}
/* function to print interface descriptor */
void printintfdescr( char* descr_ptr )
{
USB_INTERFACE_DESCRIPTOR* intf_ptr = ( USB_INTERFACE_DESCRIPTOR* )descr_ptr;
uint8_t tmpbyte;
printProgStr(PSTR("\r\nInterface descriptor:"));
printProgStr(PSTR("\r\nInterface number:\t"));
print_hex( intf_ptr->bInterfaceNumber, 8 );
printProgStr(PSTR("\r\nAlternate setting:\t"));
print_hex( intf_ptr->bAlternateSetting, 8 );
printProgStr(PSTR("\r\nEndpoints:\t\t"));
print_hex( intf_ptr->bNumEndpoints, 8 );
printProgStr( class_str );
tmpbyte = intf_ptr->bInterfaceClass;
print_hex( tmpbyte, 8 );
printProgStr(classname_parse( tmpbyte ));
printProgStr( subclass_str );
print_hex( intf_ptr->bInterfaceSubClass, 8 );
printProgStr( protocol_str );
print_hex( intf_ptr->bInterfaceProtocol, 8 );
printProgStr(PSTR("\r\nInterface string:\t"));
tmpbyte = intf_ptr->iInterface;
print_hex( tmpbyte, 8 );
getstrdescr( DEVADDR, tmpbyte );
return;
}
/* function to print endpoint descriptor */
void printepdescr( char* descr_ptr )
{
USB_ENDPOINT_DESCRIPTOR* ep_ptr = ( USB_ENDPOINT_DESCRIPTOR* )descr_ptr;
uint8_t tmpbyte;
printProgStr(PSTR("\r\nEndpoint descriptor:"));
printProgStr(PSTR("\r\nEndpoint address:\t"));
tmpbyte = ep_ptr->bEndpointAddress;
print_hex( tmpbyte & 0x0f, 8 );
printProgStr(PSTR(" Direction: "));
( tmpbyte & 0x80 ) ? printProgStr(PSTR("IN")) : printProgStr(PSTR("OUT"));
printProgStr(PSTR("\r\nAttributes:\t\t"));
tmpbyte = ep_ptr->bmAttributes;
print_hex( tmpbyte, 8 );
printProgStr(PSTR(" Transfer type: "));
printProgStr((char*)pgm_read_word(&transfer_types[(tmpbyte & 0x03)]));
if(( tmpbyte & 0x03 ) == 1 ) { //Isochronous Transfer
printProgStr(PSTR(", Sync Type: "));
printProgStr((char*)pgm_read_word(&sync_types[(tmpbyte & 0x0c)]));
printProgStr(PSTR(", Usage Type: "));
printProgStr((char*)pgm_read_word(&usage_types[(tmpbyte & 0x30)]));
}//if( tmpbyte & 0x01
printProgStr( maxpktsize_str );
print_hex( ep_ptr->wMaxPacketSize, 16 );
printProgStr(PSTR("\r\nPolling interval:\t"));
tmpbyte = ep_ptr->bInterval;
print_hex( tmpbyte, 8 );
printProgStr(PSTR(" "));
Serial.print( tmpbyte, DEC );
printProgStr(PSTR(" ms"));
return;
}
/* function to print HID descriptor */
void printhid_descr( char* descr_ptr )
{
PARSE pf = &HIDreport_parse;
USB_HID_DESCRIPTOR* hid_ptr = ( USB_HID_DESCRIPTOR* )descr_ptr;
uint8_t tmpbyte;
/**/
printProgStr(PSTR("\r\nHID descriptor:"));
printProgStr(PSTR("\r\nDescriptor length:\t"));
tmpbyte = hid_ptr->bLength;
print_hex( tmpbyte, 8 );
printProgStr(PSTR(" "));
Serial.print( tmpbyte, DEC );
printProgStr(PSTR(" bytes"));
printProgStr(PSTR("\r\nHID version:\t\t"));
Serial.print(( HIBYTE( hid_ptr->bcdHID )), HEX );
Serial.print(".");
Serial.print(( LOBYTE( hid_ptr->bcdHID )), HEX );
tmpbyte = hid_ptr->bCountryCode;
printProgStr(PSTR("\r\nCountry Code:\t\t"));
Serial.print( tmpbyte, DEC );
printProgStr(PSTR(" "));
( tmpbyte > 35 ) ? printProgStr(PSTR("Reserved")) : printProgStr((char*)pgm_read_word(&HID_Country_Codes[ tmpbyte ]));
tmpbyte = hid_ptr->bNumDescriptors;
printProgStr(PSTR("\r\nClass Descriptors:\t"));
Serial.print( tmpbyte, DEC );
//Printing class descriptors
descr_ptr += 6; //advance buffer pointer
for( uint8_t i = 0; i < tmpbyte; i++ ) {
uint8_t tmpdata;
HID_CLASS_DESCRIPTOR* hidclass_ptr = ( HID_CLASS_DESCRIPTOR* )descr_ptr;
tmpdata = hidclass_ptr->bDescriptorType;
printProgStr(PSTR("\r\nClass Descriptor Type:\t"));
Serial.print( tmpdata, HEX );
if(( tmpdata < 0x21 ) || ( tmpdata > 0x2f )) {
printProgStr(PSTR(" Invalid"));
}
switch( tmpdata ) {
case 0x21:
printProgStr(PSTR(" HID"));
break;
case 0x22:
printProgStr(PSTR(" Report"));
break;
case 0x23:
printProgStr(PSTR(" Physical"));
break;
default:
printProgStr(PSTR(" Reserved"));
break;
}//switch( tmpdata
printProgStr(PSTR("\r\nClass Descriptor Length:"));
Serial.print( hidclass_ptr->wDescriptorLength );
printProgStr(PSTR(" bytes"));
printProgStr(PSTR("\r\n\nHID report descriptor:\r\n"));
getReportDescr( DEVADDR, 0 , hidclass_ptr->wDescriptorLength, pf, USB_NAK_LIMIT );
descr_ptr += 3; //advance to the next record
}//for( uint8_t i=...
return;
}
/*function to print unknown descriptor */
void printunkdescr( char* descr_ptr )
{
byte length = *descr_ptr;
byte i;
printProgStr(PSTR("\r\nUnknown descriptor:"));
printProgStr(PSTR("Length:\t\t"));
print_hex( *descr_ptr, 8 );
printProgStr(PSTR("\r\nType:\t\t"));
print_hex( *(descr_ptr + 1 ), 8 );
printProgStr(PSTR("\r\nContents:\t"));
descr_ptr += 2;
for( i = 0; i < length; i++ ) {
print_hex( *descr_ptr, 8 );
descr_ptr++;
}
}
/* Control-IN transfer with callback. Sets address, endpoint, fills control packet with necessary data, dispatches control packet, and initiates bulk IN transfer */
/* Control, data, and setup stages combined from standard USB library to be able to read large data blocks. Restricted to control-IN transfers with data stage */
/* data read and MAX3421E RECV FIFO buffer release shall be performed by parse_func callback */
/* return codes: */
/* 00 = success */
/* 01-0f = non-zero HRSLT */
byte ctrlXfer( byte addr, byte ep, byte bmReqType, byte bRequest, byte wValLo, byte wValHi, unsigned int wInd, uint16_t nbytes, PARSE parse_func, uint16_t nak_limit = USB_NAK_LIMIT )
{
byte rcode;
SETUP_PKT sp;
EP_RECORD* ep_rec = Usb.getDevTableEntry( addr, ep );
byte pktsize;
byte maxpktsize = ep_rec->MaxPktSize;
unsigned int xfrlen = 0;
/**/
Max.regWr( rPERADDR, addr ); //set peripheral address
/* fill in setup packet */
sp.ReqType_u.bmRequestType = bmReqType;
sp.bRequest = bRequest;
sp.wVal_u.wValueLo = wValLo;
sp.wVal_u.wValueHi = wValHi;
sp.wIndex = wInd;
sp.wLength = nbytes;
Max.bytesWr( rSUDFIFO, 8, ( char *)&sp ); //transfer to setup packet FIFO
rcode = Usb.dispatchPkt( tokSETUP, ep, nak_limit ); //dispatch packet
//Serial.println("Setup packet"); //DEBUG
if( rcode ) { //return HRSLT if not zero
printProgStr(PSTR("\r\nSetup packet error: "));
Serial.print( rcode, HEX );
return( rcode );
}
/* Data stage */
//ep_rec->rcvToggle = bmRCVTOG1;
Max.regWr( rHCTL, bmRCVTOG1 ); //set toggle
while( 1 ) { //exited by break
/* request data */
rcode = Usb.dispatchPkt( tokIN, ep, nak_limit );
if( rcode ) {
printProgStr(PSTR("\r\nData Stage Error: "));
Serial.print( rcode, HEX );
return( rcode );
}
/* check for RCVDAVIRQ and generate error if not present */
/* the only case when absense of RCVDAVIRQ makes sense is when toggle error occured. Need to add handling for that */
if(( Max.regRd( rHIRQ ) & bmRCVDAVIRQ ) == 0 ) {
printProgStr(PSTR("\r\nData Toggle error."));
return ( 0xf0 );
}
pktsize = Max.regRd( rRCVBC ); //get received bytes count
parse_func( pktsize ); //call parse function. Parse is expected to read the FIFO completely
Max.regWr( rHIRQ, bmRCVDAVIRQ ); // Clear the IRQ & free the buffer
xfrlen += pktsize; // add this packet's byte count to total transfer length
/* The transfer is complete under two conditions: */
/* 1. The device sent a short packet (L.T. maxPacketSize) */
/* 2. 'nbytes' have been transferred. */
if (( pktsize < maxpktsize ) || (xfrlen >= nbytes )) { // have we transferred 'nbytes' bytes?
break;
}
}//while( 1 )
rcode = Usb.dispatchPkt( tokOUTHS, ep, nak_limit );
if( rcode ) { //return error
printProgStr(PSTR("Status packet error: "));
Serial.print( rcode, HEX );
}
return( rcode );
}
/* Parses bitfields in main items */
void print_mainbitfield( uint8_t byte_toparse )
{
( byte_toparse & 0x01 ) ? printProgStr(PSTR("Constant,")) : printProgStr(PSTR("Data,")); //bit 0
( byte_toparse & 0x02 ) ? printProgStr(PSTR("Variable,")) : printProgStr(PSTR("Array,")); //bit 1
( byte_toparse & 0x04 ) ? printProgStr(PSTR("Relative,")) : printProgStr(PSTR("Absolute,")); //...
( byte_toparse & 0x08 ) ? printProgStr(PSTR("Wrap,")) : printProgStr(PSTR("No Wrap,"));
( byte_toparse & 0x10 ) ? printProgStr(PSTR("Non Linear,")) : printProgStr(PSTR("Linear,"));
( byte_toparse & 0x20 ) ? printProgStr(PSTR("No preferred,")) : printProgStr(PSTR("Preferred State,"));
( byte_toparse & 0x40 ) ? printProgStr(PSTR("Null State,")) : printProgStr(PSTR("No Null Position,")); //bit 6
( byte_toparse & 0x40 ) ? printProgStr(PSTR("Volatile( ignore for Input),")) : printProgStr(PSTR("Non-volatile(Ignore for Input),")); //bit 7
}
/* HID Report Desriptor Parser Callback */
/* called repeatedly from Control transfer function */
void HIDreport_parse( uint8_t pkt_size )
{
#define B_SIZE 0x03 //bSize bitmask
#define B_TYPE 0x0c //bType bitmask
#define B_TAG 0xf0 //bTag bitmask
/* parser states */
enum STATE { ITEM_START, DATA_PARSE };
static STATE state = ITEM_START;
static uint8_t databytes_left = 0;
static uint8_t prefix; //item prefix - type and tag
uint8_t byte_toparse;
uint8_t bType;
uint8_t tmpbyte;
/**/
while( 1 ) {
if( pkt_size ) {
byte_toparse = Max.regRd( rRCVFIFO ); //read a byte from FIFO
pkt_size--;
}
else {
return; //all bytes read
}
switch( state ) {
case ITEM_START: //start of the record
prefix = byte_toparse >>2; //store prefix for databyte parsing
tmpbyte = byte_toparse & B_SIZE;
/* get item length */
( tmpbyte == 0x03 ) ? databytes_left = 4 : databytes_left = tmpbyte;
if( databytes_left ) {
state = DATA_PARSE; //read bytes after prefix
}
printProgStr(PSTR("\r\nLength: "));
Serial.print( databytes_left, DEC );
/* get item type */
bType = ( byte_toparse & B_TYPE ) >>2;
printProgStr(PSTR(" Type: "));
printProgStr((char*)pgm_read_word(&btypes[ bType ]));
/* get item tag */
printProgStr(PSTR("\t\tTag: "));
tmpbyte = ( byte_toparse & B_TAG ) >>4 ;
switch( bType ) {
case 0: //Main
if( tmpbyte < 0x08 ) {
printProgStr(PSTR("Invalid Tag"));
}
else if( tmpbyte > 0x0c ) {
printProgStr( reserved_msg );
}
else {
printProgStr((char*)pgm_read_word(&maintags[ tmpbyte - 8 /* & 0x03 */]));
//Serial.print("Byte: ");
//Serial.println( tmpbyte, HEX );
}
break;//case 0 Main
case 1: //Global
( tmpbyte > 0x0b ) ? printProgStr( reserved_msg ) : printProgStr((char*)pgm_read_word(&globaltags[ tmpbyte ]));
break;//case 1 Global
case 2: //Local
( tmpbyte > 0x0a ) ? printProgStr( reserved_msg ) : printProgStr((char*)pgm_read_word(&localtags[ tmpbyte ]));
break;//case 2 Local
default:
break;
}//switch( bType...
break;//case ITEM_START
case DATA_PARSE:
switch( prefix ) {
case 0x20: //Main Input
case 0x24: //Main Output
case 0x2c: //Main Feature
/* todo: add parsing 8th bit */
print_mainbitfield( byte_toparse );
break;
case 0x28: //Main Collection
if(( byte_toparse > 0x06 ) && ( byte_toparse < 0x80 )) {
printProgStr( reserved_msg );
}
else if(( byte_toparse > 0x7f ) && ( byte_toparse <= 0xff )) {
printProgStr(PSTR("Vendor-defined"));
}
else {
printProgStr((char*)pgm_read_word(&collections[ byte_toparse ]));
}
break;//case 0x28 Main Collection
//case 0x30: //Main End Collection
case 0x01: //Global Usage Page
switch( byte_toparse ) { //see HID Usage Tables doc v.1.12 page 14
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
case 0x10:
printProgStr((char*)pgm_read_word(&usage_pages[ byte_toparse ]));
break;
case 0x14:
printProgStr(PSTR("Alphanumeric Display"));
break;
case 0x40:
printProgStr(PSTR("Medical Instruments"));
break;
case 0x80:
case 0x81:
case 0x82:
case 0x83:
printProgStr(PSTR("Monitor page"));
break;
case 0x84:
case 0x85:
case 0x86:
case 0x87:
printProgStr(PSTR("Power page"));
break;
case 0x8c:
printProgStr(PSTR("Bar Code Scanner page"));
break;
case 0x8d:
printProgStr(PSTR("Scale page"));
break;
case 0x8e:
printProgStr(PSTR("Magnetic Stripe Reading (MSR) Devices"));
break;
case 0x8f:
printProgStr(PSTR("Reserved Point of Sale pages"));
break;
case 0x90:
printProgStr(PSTR("Camera Control Page"));
break;
case 0x91:
printProgStr(PSTR("Arcade Page"));
break;
default:
// printProgStr(PSTR("Data: "));
// print_hex( byte_toparse, 8 );
//databytes_left--;
break;
}//switch case 0x01: //Global Usage Page
}//switch( prefix ...
printProgStr(PSTR(" Data: "));
print_hex( byte_toparse, 8 );
databytes_left--;
if( !databytes_left ) {
state = ITEM_START;
}
break;
}//switch( state...
}//while( 1 ...
}
/* prints hex numbers with leading zeroes */
// copyright, Peter H Anderson, Baltimore, MD, Nov, '07
// source: http://www.phanderson.com/arduino/arduino_display.html
void print_hex(int v, int num_places)
{
int mask=0, n, num_nibbles, digit;
for (n=1; n<=num_places; n++) {
mask = (mask << 1) | 0x0001;
}
v = v & mask; // truncate v to specified number of places
num_nibbles = num_places / 4;
if ((num_places % 4) != 0) {
++num_nibbles;
}
do {
digit = ((v >> (num_nibbles-1) * 4)) & 0x0f;
Serial.print(digit, HEX);
}
while(--num_nibbles);
}
 
/* given a PROGMEM string, use Serial.print() to send it out */
/* Some non-intuitive casting necessary: */
/* printProgStr(PSTR("Func.Mode:\t0x")); */
/* printProgStr((char*)pgm_read_word(&mtpopNames[(op & 0xFF)])); */
void printProgStr(const char* str)
{
if(!str) {
return;
}
char c;
while((c = pgm_read_byte(str++))) {
Serial.print(c,BYTE);
}
return;
}
/C-OSD/showthread.php
0,0 → 1,3917
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#" dir="ltr" lang="en">
<head>
<base href="http://www.rcgroups.com/forums/"></base>
<script type="text/javascript">
var ad_zones = new Array('width:700-950,_height:70-110,_rcgf-469-img|rcgf-adsense');
</script>
<style type="text/css" id="vbulletin_css">
/**
* vBulletin 3.8.4 CSS
* Style: 'RCGroups Beta'; Style ID: 40
*/
@import url("clientscript/vbulletin_css/style-7557b9c4-00040.css");
</style>
<link rel="stylesheet" type="text/css" href="clientscript/vbulletin_important.css?v=384" />
 
 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.7.0/build/yahoo-dom-event/yahoo-dom-event.js?v=384b"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/yui/2.7.0/build/connection/connection-min.js?v=384"></script>
<script type="text/javascript">
<!--
var SESSIONURL = "";
var SECURITYTOKEN = "guest";
var IMGDIR_MISC = "http://static.rcgroups.net/forums/images/beta/misc";
var vb_disable_ajax = parseInt("0", 10);
//--></script>
<script type="text/javascript" src="http://static.rcgroups.net/forums/clientscript/vbulletin_global.js?v=384"></script>
<script type="text/javascript" src="http://static.rcgroups.net/forums/clientscript/newstyle.js?v=1"></script>
<script type="text/javascript" src="http://static.rcgroups.net/forums/clientscript/vbulletin_menu.js?v=384c"></script>
 
<script type="text/javascript">
<!--
if (typeof(ad_zones) == 'undefined') var ad_zones = new Array();
ad_zones.push('clientid=2122');
ad_zones.push('zone:182')
ad_zones.push('zone:98');
ad_zones.push('zone:170');
ad_zones.push('clientid=1004');
var what = '';
for (var i in ad_zones) what += ad_zones[i] + '!';
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.net/adjsc.php?z=" + what);
document.write ("&amp;block=1&amp;source=Video%20Piloting%20%28FPV%2FRPV%29");
document.write ("'><" + "/script>");
//--></script>
 
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-106064-1']);
_gaq.push(["_setCustomVar", 1, "forumid", "469", 3]);
_gaq.push(["_setCustomVar", 2, "member", "false", 3]);
_gaq.push(['_setSiteSpeedSampleRate', 2]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
 
<!-- attachment thumbnails for IE -->
<!--[if lte IE 7]>
<style type="text/css">
.thumbwrap li, .thumbwrap {
display: inline;
_height: 0;
}
</style>
<![endif]-->
 
<!-- fix prefix display in stupid IE -->
<!--[if IE]>
<style type="text/css">
td.alt2 > a > span.cats { display:inline-block; cursor: pointer; }
</style>
<![endif]-->
 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 
<meta name="keywords" content="Build Log Diy osd (Arduino and opensource), rc,r/c,radio,remote,control,model,electric,plane,aircraft,fuel,airplane,heli,nitro,car,foamy,parkflyer,lipo,battery,brushless,video,gallery" />
<meta name="description" content="Build Log Diy osd (Arduino and opensource) Video Piloting (FPV/RPV)" />
 
 
<link rel="shortcut icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="alternate" type="application/rss+xml" title="RC Groups RSS Feed" href="external.php?type=RSS2" />
<link rel="alternate" type="application/rss+xml" title="RC Groups - Video Piloting (FPV/RPV) - RSS Feed" href="external.php?type=RSS2&amp;forumids=469" />
 
<!--
nCode Image Resizer
(c) nCode
http://www.ncode.nl/vbulletinplugins/
-->
<script type="text/javascript" src="clientscript/ncode_imageresizer.js?v=1.0.1"></script>
<style type="text/css">
<!--
table.ncode_imageresizer_warning {
background: #000000;
color: #FFFFBE;
cursor: pointer;
}
 
table.ncode_imageresizer_warning td {
font-size: 10px;
vertical-align: middle;
text-decoration: none;
}
 
table.ncode_imageresizer_warning td.td1 {
padding: 5px;
}
 
table.ncode_imageresizer_warning td.td1 {
padding: 2px;
}
-->
</style>
<script type="text/javascript">
<!--
NcodeImageResizer.MODE = 'enlarge';
NcodeImageResizer.MAXWIDTH = 700;
NcodeImageResizer.MAXHEIGHT = 1280;
 
NcodeImageResizer.BBURL = 'http://www.rcgroups.com/forums';
 
var vbphrase = vbphrase || [];
 
vbphrase['ncode_imageresizer_warning_small'] = 'Click this bar to view the full image.';
vbphrase['ncode_imageresizer_warning_filesize'] = 'This image has been resized. Click this bar to view the full image. The original image is sized %1$sx%2$s and weighs %3$sKB.';
vbphrase['ncode_imageresizer_warning_no_filesize'] = 'This image has been resized. Click this bar to view the full image. The original image is sized %1$sx%2$s.';
vbphrase['ncode_imageresizer_warning_fullsize'] = 'Click this bar to view the small image.';
//-->
</script>
<title>Diy osd (Arduino and opensource) - RC Groups</title>
<script type="text/javascript" src="clientscript/vbulletin_post_loader.js?v=384"></script>
<style type="text/css" id="vbulletin_showthread_css">
<!--
#links div { white-space: nowrap; }
#links img { vertical-align: middle; }
-->
</style>
<!--[if IE]>
<style type="text/css">
.thead_postbit_right ul li input{margin:3px 0 0 0;}
</style>
<![endif]-->
</head>
<body onload="">
 
<!-- google_ad_section_start(weight=ignore) -->
<div id="shadow">
<div id="wrapper">
 
<!-- top strip -->
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="background-image:url(http://static.rcgroups.net/images/hktop/bgd.jpg)">
<tr>
<td width="180"><a href="http://ads.rcgroups.net/adclick.php?bannerid=6000&amp;source=adsource" target="_blank" rel="nofollow"><img src="http://static.rcgroups.net/images/hktop/logo.jpg" alt="HobbyKing.com" width="180" height="25" border="0" /></a></td>
<td align="center" style="background-image:url(http://static.rcgroups.net/images/hktop/bgd2.jpg)"><script language='JavaScript' type='text/javascript'>
<!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['clientid=2122']) != 'undefined'))
document.write(OA_output['clientid=2122']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
 
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://ads.rcgroups.net/adjs.php?n=" + phpAds_random);
document.write ("&amp;clientid=2122&amp;target=_blank");
document.write ("&amp;source=adsource&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://ads.rcgroups.net/adclick.php?n=a42109a3' target='_blank'><img src='http://ads.rcgroups.net/adview.php?clientid=2122&amp;n=a42109a3' border='0' alt='' /></a></noscript></td>
<td width="132"><a href="http://ads.rcgroups.net/adclick.php?bannerid=5998&amp;source=adsource" target="_blank" rel="nofollow"><img src="http://static.rcgroups.net/images/hktop/products.jpg" alt="New Products" width="132" height="25" border="0" /></a></td>
<td width="124"><a href="http://ads.rcgroups.net/adclick.php?bannerid=5997&amp;source=adsource" target="_blank" rel="nofollow"><img src="http://static.rcgroups.net/images/hktop/sales.jpg" alt="Flash Sale" width="124" height="25" border="0"/></a></td>
<td width="62" align="center" valign="middle">
<table width="62" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="1"><img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/1055707444/?label=Nlt9CKLc-wIQtKKz9wM&amp;guid=ON&amp;script=0"/></td>
<td width="20" align="center" valign="middle"><a href="http://www.facebook.com/hobbykinglive?utm_source=RCGroups&amp;utm_medium=TopBar&amp;utm_campaign=SN_facebook"><img src="http://static.rcgroups.net/images/hb/20_facebook.png" width="20" height="20" border="0" longdesc="" /></a></td>
<td width="20" align="center" valign="middle"><a href="http://www.twitter.com/hobbykinglive?utm_source=RCGroups&amp;utm_medium=TopBar&amp;utm_campaign=SN_twitter"><img src="http://static.rcgroups.net/images/hb/20_twitter.png" width="20" height="20" border="0" longdesc="" /></a></td>
<td width="20" align="center" valign="middle"><a href="http://www.youtube.com/hobbykinglive?utm_source=RCGroups&amp;utm_medium=TopBar&amp;utm_campaign=SN_youtube"><img src="http://static.rcgroups.net/images/hb/20_youtube.png" width="20" height="20" border="0" longdesc="http://www.youtube.com/hobbykinglive" /></a></td>
</tr>
</table></td>
<td width="120" align="right">
<form method="post" action="http://www.hobbyking.com/hobbyking/store/uh_power_Search.asp" style="margin:0; height:25px">
<table border="0" cellpadding="0" cellspacing="0" style="height:25px;">
<tr valign="middle">
<td>
<input type="hidden" name="uid" value="1" />
<input type="text" size="15" style="font-size: 10px; width: 100px" value="Search HobbyKing" onClick="this.value=''" name="strSearch" tabindex="99" />
</td>
<td><input type="image" alt="" src="http://static.rcgroups.net/images/hktop/go.jpg" height="25" width="22" /></td>
</tr>
</table></form>
</td>
</tr>
</table>
 
<!-- end top strip -->
 
<div id="header-bg">
<div id="logo-img"><a href="index.php"></a></div>
 
<div id="header-right">
 
<div id="user-box">
 
 
 
<!-- login form -->
<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">
<script type="text/javascript" src="clientscript/vbulletin_md5.js?v=384"></script>
<table cellpadding="0" cellspacing="3" border="0">
<tr>
<td class="smallfont" style="white-space: nowrap;"><label for="navbar_username">User Name</label></td>
<td><input type="text" class="bginput" style="font-size: 11px" name="vb_login_username" id="navbar_username" size="14" accesskey="u" tabindex="101" value="User Name" onfocus="if (this.value == 'User Name') this.value = '';" /></td>
<td class="smallfont" nowrap="nowrap"><label for="cb_cookieuser_navbar"><input type="checkbox" name="cookieuser" value="1" tabindex="103" id="cb_cookieuser_navbar" accesskey="c" checked />Remember Me?</label></td>
</tr>
<tr>
<td class="smallfont"><label for="navbar_password">Password</label></td>
<td><input type="password" class="bginput" style="font-size: 11px" name="vb_login_password" id="navbar_password" size="14" tabindex="102" /></td>
<td><input type="submit" class="button" value="Log in" tabindex="104" title="Enter your username and password in the boxes provided to login, or click the 'register' button to create a profile for yourself." accesskey="s" /></td>
</tr>
<tr>
<td class="smallfont" colspan="2"><a href="login.php?do=lostpw">Forgot your password?</a></td>
<td nowrap="nowrap" class="smallfont" colspan="2"><a href="register.php?">Create a new account</a></td>
</tr>
</table>
<input type="hidden" name="s" value="" />
<input type="hidden" name="securitytoken" value="guest" />
<input type="hidden" name="do" value="login" />
<input type="hidden" name="vb_login_md5password" />
<input type="hidden" name="vb_login_md5password_utf" />
</form>
<!-- / login form -->
 
 
 
</div> <!-- /user-box -->
 
<div id="header-angle"></div>
<div id="header-breadcrumb">
<script language='JavaScript' type='text/javascript'>
<!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['zone:98']) != 'undefined'))
document.write(OA_output['zone:98']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
 
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.net/adjs.php?n=" + phpAds_random);
document.write ("&amp;what=zone:98&amp;target=_blank&amp;block=1");
document.write ("&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://decals.rcgroups.net/adclick.php?n=aebe903e' target='_blank'><img src='http://decals.rcgroups.net/adview.php?what=zone:98&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;n=aebe903e' border='0' alt=''></a></noscript>
</div>
</div> <!-- /header-right -->
 
 
</div> <!-- /header-bg -->
 
 
<!-- content table -->
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
 
 
<!-- google_ad_section_end -->
<!-- nav buttons bar -->
<div id="top-menu">
<ul>
<li><a href="register.php" rel="nofollow">Register</a></li>
<li><a href="member.php">Blogs</a></li>
<li><a href="/classifieds-201/">Classifieds</a></li>
<li><a href="/rc-clubs-177/">Clubs</a></li>
<li><a href="index.php">Forums</a></li>
<li><a href="maps.php?">Maps</a></li>
<li><a href="/regional-forums-270/">Regions</a></li>
 
<li id="navbar_topics"><a href="index.php">Topics</a><script type="text/javascript"> vbmenu_register("navbar_topics"); </script></li>
<li><a href="search.php" accesskey="4" rel="nofollow">Search</a></li>
 
</ul>
 
</div>
<!-- / nav buttons bar -->
 
 
 
<!-- breadcrumb -->
 
<div class="bread-wrapper">
<ul class="breadcrumb">
<li><a class="bread-logo" href="index.php" accesskey="1">&nbsp;</a>
<a href="/aircraft-general-130/">Aircraft - General</a>
 
 
<a href="/video-piloting-fpv-rpv-469/">Video Piloting (FPV/RPV)</a>
 
 
<span class="nav-last"><span class="cats BuildLog">Build Log</span> Diy osd (Arduino and opensource)</span>
 
</li>
</ul>
</div> <!-- /bread-wrappper -->
 
 
 
<!-- / breadcrumb, login, pm info -->
<div style="width:100%;clear:both;">
<table border="0" cellpadding="0" cellspacing="0" style="width:100%;margin:8px 0 0 0;" align="center" class="tborder">
<tr>
<td align="center">
<script language='JavaScript' type='text/javascript'>
<!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['zone:183']) != 'undefined'))
document.write(OA_output['zone:183']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.com/adjs.php?n=" + phpAds_random);
document.write ("&amp;what=zone:183&amp;target=_blank");
document.write ("&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://decals.rcgroups.com/adclick.php?n=a9ce715f' target='_blank'><img src='http://decals.rcgroups.com/adview.php?what=zone:183&amp;n=a9ce715f' border='0' alt=''></a></noscript>
</td>
</tr>
</table>
</div>
 
 
 
 
 
<span></span>
 
<!-- NAVBAR POPUP MENUS -->
<div class="vbmenu_popup" id="navbar_topics_menu" style="display:none" align="left">
<table cellpadding="4" cellspacing="1" border="0">
<tr>
<td class="thead">Major Topics</td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=11">All</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=16">Aircraft</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=6">Boats</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=17">Cars</a></td>
</tr>
<tr>
<td class="thead">Aircraft </td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=2">Airplanes - Electric</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=9">Airplanes - Fuel</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=5">Airplanes - Sailplanes</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=4">Helis - Electric</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=10">Helis - Fuel</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="/aircraft-electric-jets-375/">Jets - Electric</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="/aircraft-fuel-jets-378/">Jets - Fuel</a></td>
</tr>
<tr>
<td class="thead">Other Topics</td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=articles">Articles</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=27">Exotic Aircraft</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="/off-topic-discussion-206/">Off Topic Discussion</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="/related-hobbies-184/">Related Hobbies</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="/support-forums-205/">Support</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=23">Video Gallery</a></td>
</tr>
<tr>
<td class="vbmenu_option"><a href="portal.php?id=28">Vendors</a></td>
</tr>
</table>
</div>
 
 
<!-- / NAVBAR POPUP MENUS -->
 
<!-- PAGENAV POPUP -->
<div class="vbmenu_popup" id="pagenav_menu" style="display:none">
<table cellpadding="4" cellspacing="1" border="0">
<tr>
<td class="thead" nowrap="nowrap">Go to Page...</td>
</tr>
<tr>
<td class="vbmenu_option" title="nohilite">
<form action="index.php" method="get" onsubmit="return this.gotopage()" id="pagenav_form">
<input type="text" class="bginput" id="pagenav_itxt" style="font-size:11px" size="4" />
<input type="button" class="button" id="pagenav_ibtn" value="Go" />
</form>
</td>
</tr>
</table>
</div>
<!-- / PAGENAV POPUP -->
 
 
 
 
 
 
<!-- google_ad_section_start -->
 
<!-- google_ad_section_end -->
 
 
 
<!-- google_ad_section_start(weight=ignore) -->
<a name="poststop" id="poststop"></a>
 
<!-- controls above postbits -->
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin:0px; padding:10px;">
<tr valign="bottom">
<td class="smallfont">
<table cellpadding="0" cellspacing="0" border="0">
<tr valign="top">
<td>
<a href="newreply.php?do=newreply&amp;noquote=1&amp;p=18792343" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/reply.gif" alt="Reply" border="0" /></a>
</td>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.fbAsyncInit = function() {
FB.init({appId: '187771487970567', status: true, xfbml: true});
try {
FB.Event.subscribe('edge.create', function(targetUrl) {
_gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
});
FB.Event.subscribe('edge.remove', function(targetUrl) {
_gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);
});
} catch (e) {}
}
</script>
<td style="padding:1px 5px 0 10px;">
<g:plusone href="http://www.rcgroups.com/forums/showthread.php?t=1473207" size="medium" annotation="none"></g:plusone>
</td>
<td style="padding-top:1px;">
<fb:like href="http://www.rcgroups.com/forums/showthread.php?t=1473207" send="false" layout="button_count" width="80" show_faces="false"></fb:like>
</td>
<script type="text/javascript">
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
</tr>
</table>
</td>
<td align="right"><div class="pagenav" align="right">
<table class="tborder" cellpadding="3" cellspacing="0" border="0">
<tr>
<td class="vbmenu_control" style="font-weight:normal">Page 1 of 111</td>
<td class="alt2"><span class="smallfont" title="Showing results 1 to 15 of 1,654"><strong>1</strong></span></td>
<td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=2" title="Show results 16 to 30 of 1,654">2</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=3" title="Show results 31 to 45 of 1,654">3</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=4" title="Show results 46 to 60 of 1,654">4</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=5" title="Show results 61 to 75 of 1,654">5</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=11" title="Show results 151 to 165 of 1,654"><!--+10-->11</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=51" title="Show results 751 to 765 of 1,654"><!--+50-->51</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=101" title="Show results 1,501 to 1,515 of 1,654"><!--+100-->101</a></td>
<td class="alt1"><a rel="next" class="smallfont" href="showthread.php?t=1473207&amp;page=2" title="Next Page - Results 16 to 30 of 1,654">Next &gt;</a></td>
<td class="alt1" nowrap="nowrap"><a class="smallfont" href="showthread.php?t=1473207&amp;page=111" title="Last Page - Results 1,651 to 1,654 of 1,654">Last <strong>&raquo;</strong></a></td>
<td class="vbmenu_control" title="showthread.php?t=1473207"><a name="PageNav"></a></td>
</tr>
</table>
</div></td>
</tr>
</table>
<!-- / controls above postbits -->
 
<!-- toolbar -->
<table class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center" style="border-bottom-width:0px;">
<tr>
<td class="tcat" width="100%">
</td>
<td class="vbmenu_control" id="threadtools" nowrap="nowrap">
<a href="/forums/showthread.php?t=1473207&amp;nojs=1#goto_threadtools">Thread Tools</a>
<script type="text/javascript"> vbmenu_register("threadtools"); </script>
</td>
 
 
</tr>
</table>
<!-- / toolbar -->
 
 
 
 
 
<!-- end content table -->
 
</div>
</div>
</div>
 
<!-- / close content container -->
<!-- / end content table -->
 
<!-- google_ad_section_end -->
 
 
 
 
 
 
<!-- google_ad_section_start -->
<div id="posts"><!-- post #18792343 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792343" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792343" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792343"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 09:24 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792343&amp;postcount=1" target="new" rel="nofollow" id="postcount18792343" name="1"><strong>#1</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792343" class="user_postbit_name">
<a class="bigusername" href="member.php?u=350320">Dennis Frie</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=350320"><img src="http://static.rcgroups.net/forums/customavatars/avatar350320_1.gif" width="75" height="75" alt="Dennis Frie's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>Denmark, Capital Region of Denmark, Espergærde</div>
<div class="user_postbit_join">Joined Feb 2011</div>
<div>
1,669 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="Dennis Frie is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=350320" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by Dennis Frie" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792343">
<!-- icon and title -->
<div class="smallfont">
<strong>Diy osd (Arduino and opensource)</strong>
</div>
<hr size="1" style="color:#c5ccd3; background-color:#c5ccd3" />
<!-- / icon and title -->
 
<!-- message -->
<div id="post_message_18792343">
As this project is almost finish, I think it's time for a little update/summary here in post #1.<br />
<br />
Lets start with a little video-clip showing the OSD in action <br />
<table class="tborder" cellpadding="0" cellspacing="0" border="0">
<tr class="tcat">
<td class="smallfont" style="padding:5px"><a href="http://vimeo.com/29882063" target="_blank" rel="nofollow">DIY OSD flight test (software v 0.14)</a> (3 min 5 sec)</td>
</tr>
<tr class="alt1"><td>
<object type="application/x-shockwave-flash" width="480" height="400" data="http://www.vimeo.com/moogaloop.swf?clip_id=29882063&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color="> <param name="quality" value="best" /> <param name="wmode" value="transparent"> <param name="allowfullscreen" value="true" /> <param name="scale" value="showAll" /> <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=29882063&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=" /></object>
</td></tr></table><br />
<br />
The main purpose of this project was to make a DIY OSD that can be made with;<br />
<ul><li>Opensource software</li>
<li>Simple and cheap hardware</li>
<li>Only little technical knowledge required</li>
</ul><br />
It's not intended to be a graphic-heavy OSD, but an easy readable OSD with the most important info. But it's opensource and you can do whatever you want with it. <br />
<br />
Quite a few updates and features have been added by request from users - and I hope to continue this. Feel free to post suggestions - but be reasonable. I don't mind to implement a feature - but I'm not gonna rewrite it all for another purpose etc.<br />
<br />
I decided to make this project freely available and opensource - and I don't plan to earn anything on my work. Neither do I intend to sell or produce anything - but others are welcome to use it as they want. <br />
<br />
If you don't want to make the hardware yourself the software also supports SimpleOSD OPEN (16 mhz with arduino bootloader and LM1881 sync seperator). It's should be available from here:<br />
<a href="http://flytron.com/osd-headtrackers/144-simpleosd-open-with-arduino-boot.html" target="_blank" rel="nofollow">http://flytron.com/osd-headtrackers/...uino-boot.html</a><br />
<br />
The OSD support theses features at the moment:<ul><li>Easy hardware design with Arduino</li>
<li>Easy setup section added to code<br /></li>
<li>Speed from GPS</li>
<li>Altitude from GPS</li>
<li>Flight timer from GPS</li>
<li>Position from GPS</li>
<li>Heading from GPS</li>
<li>Current from current sensor</li>
<li>mAh used</li>
<li>Auto set home position</li>
<li>Calculate Line of sight</li>
<li>dimming of text background</li>
<li>Arrow pointing home</li>
<li>Speed in km/h</li>
<li>Flight summary (max altitude, max speed, max LOS, total distance traveled and average speed)</li>
<li>Support NTSC and PAL</li>
<li>Support SimpleOSD open 16 mhz version with arduino bootloader</li>
</ul><br />
This is the schematic I use at the moment (Please note, AIN0 and AIN1 is NOT pin A0 and A1 on Arduino).<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4273256&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Same schematic but with a bit further explanation/text by Enthlapy (Dimming/brightness resistor value is a bit different, but you can just change these to what you prefer).<br />
<img src="http://i388.photobucket.com/albums/oo329/enthlapy/DIY%20OSD/revisedSchematic_v1.png" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Fritzing-drawing, made by thnilsen<br />
<img src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/a4301838-196-DIY_OSD_fritzing.png" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
<u><b>Old first post:</b></u><br />
<i>A work in progress. This post will be updated with more pictures text etc. Please be patient <img src="http://static.rcgroups.com/forums/images/smilies/wink.gif" border="0" alt="" title="Wink" class="inlineimg" /></i><br />
<br />
A few weeks ago i started to play with a DIY-OSD. There is a lot of commercial OSD's available, but I figured it would be fun to make one myself. I wanted to make the hardware as simple and cheap as possible, so everything has been made using only an atmega micro-controller and a few standard components (resistors, capacitors and diodes). This makes it possible, to build an OSD for less than 10 $ (without GPS and current sensor). <br />
<br />
I have chosen to make it all compatible with Arduino – so the code can be used directly with a simple arduino board, atmega with bootloader etc. This makes it pretty easy and cheap for everyone who wants to try it out. No SMD components or extra chips are needed.<br />
At the moment it works just fine, and only LOS and an arrow home needs to be added (this is now done). <br />
<br />
So far it has been made for a PAL video signal, but it shouldn’t be very difficult to make it compatible with NTFS.<br />
<br />
<b>In general;</b><br />
A normal analog video-signal can be seen here;<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152456&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
The start indicates that a new line is starting and the variation in voltage is simply a way to express the color. A high voltage (about 1 volt) equals white and lower voltage is darker. Please see Wikipedia for further info on PAL/NTSC video signal.<br />
<a href="http://en.wikipedia.org/wiki/PAL" target="_blank" rel="nofollow">http://en.wikipedia.org/wiki/PAL</a><br />
<br />
The trick is to detect a new line, count the lines and show the pixels at the right time.<br />
And off course reset the linecount when a new frame is detected.<br />
<br />
<b>The hardware:</b><br />
The hardware is based on an atmega micro-controller and only a few normal components. New line and frames are detected with the analog comparator in the atmega mikro-controller. <br />
As the sync pulse in the video-signal can have a little DC-offset, a few components is needed. To control this offset, the video-signal is AC-coupled. The sync-pulse will then be a negative voltage. To change this, you can add some DC-offset with a positive biased clamping circuit;<br />
<a href="http://en.wikipedia.org/wiki/Clamper_%28electronics%29" target="_blank" rel="nofollow">http://en.wikipedia.org/wiki/Clamper_%28electronics%29</a><br />
It's now possible to get a positive video-signal where the sync-pulse is very close to ground. The voltage reference should match the biased video-signal’s synch pulse.<br />
In theory you can bias the video-signal so the sync-pulse goes a bit below ground. This makes it possible to use ground as reference voltage. I have tried and it seems to work fine, but I wouldn’t recommend it.<br />
To show the pixels you can use SPI or USART to shift out pixels very fast. The USART in SPI mode works perfect as it is double buffered. The problem is that you probably want to use the USART for communication with a GPS module. I don’t think the USART pixel generation is of any interest, but I have the code if anyone wants to see it. The SPI is only single buffered (8 bit) so you will have about 2 clock cycles (1 ekstra pixel) that will be the same as the last one, but this is only a minor issue.<br />
<br />
The brightness is simply adjusted with a resistor. To avoid the pin from draining a simple diode should be used as well. <br />
<br />
Test-video<br />
<table class="tborder" cellpadding="0" cellspacing="0" border="0">
<tr class="tcat">
<td class="smallfont" style="padding:5px"><a href="http://vimeo.com/26833564" target="_blank" rel="nofollow">OSD test</a> (0 min 19 sec)</td>
</tr>
<tr class="alt1"><td>
<object type="application/x-shockwave-flash" width="480" height="400" data="http://www.vimeo.com/moogaloop.swf?clip_id=26833564&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color="> <param name="quality" value="best" /> <param name="wmode" value="transparent"> <param name="allowfullscreen" value="true" /> <param name="scale" value="showAll" /> <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=26833564&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=" /></object>
</td></tr></table><br />
<br />
First test with Arduino duemilanove<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152518&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
A breadboard test;<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152457&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Simple print-test;<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152458&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
An early test from the breadboard;<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152459&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Another example. Can't decide if I want to use small or large numbers. Any preferences?<br />
Might add a smaller resistor to make the text brighter.<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152700&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Later breadboard version. <br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152728&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
I plan to use this little arduino pro board. That should make a really small and simple OSD.<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4152460&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Prototype finished;<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4156093&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /> <br />
<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4156095&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
The circuit at the moment;<br />
C1 = 0.1 uF <br />
R1 = 50 K pot <br />
It might be a good idea to lower R2.<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4157230&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
Made so far:<ul><li>In general the hardware is finish and works</li>
<li>Working OSD</li>
<li>Small ASCII table</li>
<li>Communication with GPS</li>
<li>&quot;Extracting&quot; data from GPS strings</li>
<li>Speed from GPS</li>
<li>Altitude from GPS</li>
<li>Time from GPS</li>
<li>Position from GPS</li>
<li>Heading from GPS</li>
<li>Current from current sensor</li>
<li>mAh used</li>
<li>Set home position</li>
<li>Calculate Line of sight</li>
<li>dimming of text background</li>
<li>Arrow pointing home</li>
<li>Speed changed from knots to km/h</li>
<li>Flight summary added (max altitude, max speed, max LOS, total distance traveled and average speed)</li>
<li>Support for NTSC and PAL</li>
<li>Support SimpleOSD open 16 mhz version with arduino bootloader</li>
</ul><br />
Should be finish soon<ul><li> ...</li>
</ul><br />
Ideas for improvement:
 
<br />
Notes to the code;<br />
The code for writing characters, numbers etc. is currently not very flexible if you want to re-arrange the text, numbers etc. As I don't plan to re-arrange the text I don't really care, but a &quot;cleaner&quot; solution could probably be implemented.<br />
The main problem is, that timing is very critical. Even the use of while-loops instead of repeating makes a big difference. While-loops takes quite a few clock-cycles, which is clearly visible.<br />
<br />
The code can be opened with notepad++ or Arduino IDE. Please rename to .pde instead of .txt when using with Arduino.<br />
<br />
<i>use of the code;</i><br />
The code can be used as you want. Feel free to change, update delete etc. <br />
Use of the code in a commercial product is welcome as well - but it would be great to know.<br />
<br />
GPS:<br />
The software have been written and tested with a MTK GPS and 2 GPS-simulation programs. The software should more or less work with all GPS'es, but I don't guarantee anything. It's recommended not to use lower than 1 hz update rate, and it's preferable to configure the GPS to only send RMC and GGA NMEA strings. <br />
<br />
<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4339758&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
<img src="http://www.rcgroups.com/forums/showatt.php?attachmentid=4339759&amp;stc=1" border="0" alt="" onload="NcodeImageResizer.createOn(this);" /><br />
<br />
<br />
version 0.04;<ul><li>Speed changed to km/h</li>
<li>Number of satellites added</li>
<li>Now only &quot;active numbers&quot; will show. This means 5.5 meter altitude will show as 5.5 and not 0005.5. Speed will show as 10.5 instead of 010.5. Done with speed, LOS, altitude, current and mah consumed.</li>
<li>Altitudes higher than 999 meters will now show as xxxx.x instead of xxxx.</li>
</ul><br />
Version 0.05<ul><li>Support for SimpleOSD 16 mhz</li>
<li>Voltage and current input can be choosen in beginning</li>
<li>Battery voltage added</li>
<li>A few danish comments translated/removed</li>
<li>Few minor changes/cleaning in code</li>
</ul><br />
Version 0.06<ul><li>Flight summary added with:</li>
<li>Max altitude</li>
<li>Max Speed</li>
<li>Max LOS</li>
<li>Total distance traveled.</li>
<li>Flight time<br /></li>
<li>Wrong baud-rate settings will no longer crash the controller</li>
</ul><br />
Version 0.07<br />
&quot;look&quot; changed - and some minor changes.<br />
<br />
Version 0.08<br />
Small bug fixes from version 0.07<ul><li>Black line removed</li>
<li>total distance up to 99 km supported</li>
<li>Error in total distance calculation corrected</li>
</ul><br />
Version 0.09<ul><li>GPS code updated</li>
<li>LOS and heading should work for everyone (no matter location)</li>
<li>Alarm function added on LOS, altitude, battery-voltage and mah used</li>
<li>Avg speed added to flight summary</li>
<li>Baud rate can be set in the setup-section (by just writing 9600 etc)</li>
<li>The line where analog-readings and current calculation is done have been added to #define line section</li>
<li>corrupt serial data will no more &quot;fill the buffer&quot; and block valid data</li>
<li> Topline moved a bit, might help NTSC users.</li>
</ul><br />
Version 0.10<ul><li>NTSC support (line numbers from Melih used)</li>
<li>mah code updated to support timing in NTSC video signal</li>
<li>In setup it's only necessary to choose controller and video system (PAL or NTSC)</li>
<li>The input used for current-sensor and voltage-divider can be set by just writing the pin-number</li>
<li>Calibration for voltage-divider added to setup-section</li>
<li>Dimming added to SimpleOSD version (thanks Melih)</li>
</ul><br />
Version 0.11:<ul><li>Auto altitude offset added</li>
<li>No altitude info from GPS (with altitude offset on) will no more show as 6220 meter (thanks to mrfliboy - noticed this on his movie)</li>
<li>Maximum speed in summary should be fixed (showed a weird string now and then)</li>
<li>Parameters added to flight summary, it's now possible to choose when flight summary is displayed</li>
<li>Couple of small changes</li>
<li>CUR and VLT replaced with A and V. What do you prefer?</li>
</ul><br />
Version 0.12:<ul><li>Start-up screen added. Shows number of satellites, sat-fix, delay (from sat-fix to set-home) and the time (this can be used to check if the gps update-rate is right)</li>
<li>Possible to hide GPS-coordinates if altitude &gt; x (but can be set to show every x second anyway)</li>
</ul><br />
Version 0.13<ul><li>Some of the code changed a bit and re-arranged to be more efficient.</li>
<li>Option added to &quot;align&quot; text - all the text can be moved left and right to fit/center perfect</li>
<li>Summary centered</li>
</ul><br />
Version 0.14<ul><li>Now possible to show mah / km - can be used to find optimal cruise speed etc. (need to be turned on under setup)</li>
<li>Speed/altitude decimals can be turned off in setup</li>
<li>Minor fix with GPS-coordinates that was alligned wrong (when using hide when over x meter and only show every x second - guess no one have discovered this yet)</li>
<li>Example added to config &quot;show summary&quot; for plane and quad</li>
<li>Dimming added to text</li>
<li>Delay for align screen moved - gives quite a few more clock cycles for every line for anything else</li>
</ul><br />
Version 0.15 <ul><li>Menu added (configuration also saved when power-off)</li>
<li>Support for US units (altitude offset must be on)</li>
<li>Dimming removed from top characters (when showing decimals)</li>
<li>Version-number added on startup-screen</li>
<li>Plane-position can be shown (in degrees)</li>
</ul><br />
The menu will allow you to change these settings:<ul><li>Show mah/km (on/off)</li>
<li>Show decimals (on/off)</li>
<li>Text alignment to center text</li>
<li>Show plane position (on/off)</li>
<li>Altitude alarm (set value)</li>
<li>LOS alarm (set value)</li>
<li>Volt alarm (set value)</li>
<li>mAh alarm (set value)</li>
</ul><ul><li>Arrows updated a bit</li>
<li>The word &quot;max&quot; was bugged in summary - now fixed</li>
<li>Menu and start-up screen fixed a bit (only look)</li>
<li>A little more free space available.</li>
</ul><br />
Version 0.16<ul><li>Arrows updated a bit</li>
<li>The word &quot;max&quot; was bugged in summary - now fixed</li>
<li>Menu and start-up screen fixed a bit (only look)</li>
<li>A little more free space available.</li>
</ul><br />
Exit must be chosen to save data. All data will be saved to eeprom, so they will stay until new data is written. <br />
First time you load the new firmware the settings will be saved to the eeprom. <br />
Even if you reload/flash the software the old values will be saved. If you want to update the values there is an option in the file to overwrite previously data. Just be sure to change the value back to 0, otherwise settings will be reloaded everytime.<br />
<br />
Version 0.17<ul><li>RSSI support added (can also be used to read voltage on second battery etc)</li>
<li>If alarms are set to 0, they will be off</li>
<li>Bug with negative altitude showing an arrow instead of minus is fixed</li>
</ul><br />
Version 0.18<ul><li>Updated for Arduino IDE v 1.0</li>
<li>Splitted into multiple files and cleaned a bit</li>
</ul>
</div>
<!-- / message -->
 
<!-- attachments -->
<div style="padding:5px">
 
<fieldset class="fieldset">
<legend>Attached Thumbnails</legend>
<ul class="thumbwrap">
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152456" rel="Lightbox_1" id="0" target="_blank">
<img id="4152456" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152456-80-thumb-pal_signal.png?d=1310998830" border="0" alt="Name: pal_signal.png
Views: 11400
Size: 10.9 KB
Description: " title="Name: pal_signal.png
Views: 11400
Size: 10.9 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">10.9 KB &middot; Views: 11400</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152457" rel="Lightbox_1" id="1" target="_blank">
<img id="4152457" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152457-74-thumb-Breadboard.jpg?d=1310998830" border="0" alt="Name: Breadboard.jpg
Views: 11580
Size: 107.2 KB
Description: " title="Name: Breadboard.jpg
Views: 11580
Size: 107.2 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">107.2 KB &middot; Views: 11580</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152458" rel="Lightbox_1" id="2" target="_blank">
<img id="4152458" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152458-190-thumb-Test_print.jpg?d=1310998830" border="0" alt="Name: Test_print.jpg
Views: 11694
Size: 138.3 KB
Description: " title="Name: Test_print.jpg
Views: 11694
Size: 138.3 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">138.3 KB &middot; Views: 11694</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152459" rel="Lightbox_1" id="3" target="_blank">
<img id="4152459" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152459-172-thumb-Example_1.jpg?d=1310998830" border="0" alt="Name: Example_1.jpg
Views: 11432
Size: 80.6 KB
Description: " title="Name: Example_1.jpg
Views: 11432
Size: 80.6 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">80.6 KB &middot; Views: 11432</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152460" rel="Lightbox_1" id="4" target="_blank">
<img id="4152460" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152460-101-thumb-Arduino_pro.jpg?d=1310998830" border="0" alt="Name: Arduino_pro.jpg
Views: 11255
Size: 111.9 KB
Description: " title="Name: Arduino_pro.jpg
Views: 11255
Size: 111.9 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">111.9 KB &middot; Views: 11255</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152518" rel="Lightbox_1" id="5" target="_blank">
<img id="4152518" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152518-38-thumb-First_test.jpg?d=1311002077" border="0" alt="Name: First_test.jpg
Views: 11578
Size: 121.1 KB
Description: " title="Name: First_test.jpg
Views: 11578
Size: 121.1 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">121.1 KB &middot; Views: 11578</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152700" rel="Lightbox_1" id="6" target="_blank">
<img id="4152700" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152700-195-thumb-Example_2.jpg?d=1311006535" border="0" alt="Name: Example_2.jpg
Views: 11570
Size: 91.3 KB
Description: " title="Name: Example_2.jpg
Views: 11570
Size: 91.3 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">91.3 KB &middot; Views: 11570</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4152728" rel="Lightbox_1" id="7" target="_blank">
<img id="4152728" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4152728-225-thumb-Breadboard_v2.jpg?d=1311007119" border="0" alt="Name: Breadboard_v2.jpg
Views: 11305
Size: 131.0 KB
Description: " title="Name: Breadboard_v2.jpg
Views: 11305
Size: 131.0 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">131.0 KB &middot; Views: 11305</span>
</p>
</li>
<li>
<p>
<a href="attachmentNew.php?attachmentid=4273256" rel="Lightbox_1" id="8" target="_blank">
<img id="4273256" class="thumbnail" src="http://static.rcgroups.net/forums/attachments/3/5/0/3/2/0/t4273256-157-thumb-V11.png?d=1315780749" border="0" alt="Name: V11.png
Views: 10118
Size: 24.7 KB
Description: " title="Name: V11.png
Views: 10118
Size: 24.7 KB
Description: "/>
</a>
<span class="smallfont"></span>
<span class="smallfont">24.7 KB &middot; Views: 10118</span>
</p>
</li>
 
</ul>
</fieldset>
 
 
 
<fieldset class="fieldset">
<legend>Attached Files</legend>
<ul class="thumbwrap">
<li>
<p><a href="showatt.php?attachmentid=4191717&amp;d=1312557988"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download OSD_SPI_v0_01.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4191717&amp;d=1312557988">OSD_SPI_v0_01.txt</a> (38.1 KB, 332 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4191718&amp;d=1312557988"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download OSD_SPI_v0_02.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4191718&amp;d=1312557988">OSD_SPI_v0_02.txt</a> (69.9 KB, 94 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4191719&amp;d=1312557988"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download OSD_SPI_V0_03.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4191719&amp;d=1312557988">OSD_SPI_V0_03.txt</a> (52.7 KB, 86 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4191936&amp;d=1312566859"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download OSD_SPI_V0_04.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4191936&amp;d=1312566859">OSD_SPI_V0_04.txt</a> (58.1 KB, 160 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4251183&amp;d=1314922226"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_05.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4251183&amp;d=1314922226">DIY_OSD_v0_05.txt</a> (58.4 KB, 96 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4256943&amp;d=1315162181"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_06.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4256943&amp;d=1315162181">DIY_OSD_v0_06.txt</a> (71.2 KB, 71 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4256944&amp;d=1315162181"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_07.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4256944&amp;d=1315162181">DIY_OSD_v0_07.txt</a> (73.7 KB, 53 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4257340&amp;d=1315174199"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_08.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4257340&amp;d=1315174199">DIY_OSD_v0_08.txt</a> (73.8 KB, 59 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4262153&amp;d=1315326735"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_09.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4262153&amp;d=1315326735">DIY_OSD_v0_09.txt</a> (79.2 KB, 55 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4264925&amp;d=1315426112"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_10.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4264925&amp;d=1315426112">DIY_OSD_v0_10.txt</a> (79.7 KB, 81 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4272848&amp;d=1315771245"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_11.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4272848&amp;d=1315771245">DIY_OSD_v0_11.txt</a> (83.7 KB, 112 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4295230&amp;d=1316617446"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_12.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4295230&amp;d=1316617446">DIY_OSD_v0_12.txt</a> (91.6 KB, 63 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4295231&amp;d=1316617446"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_13.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4295231&amp;d=1316617446">DIY_OSD_v0_13.txt</a> (92.5 KB, 72 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4295232&amp;d=1316617446"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/txt.gif" border="0" alt="Download DIY_OSD_v0_14.txt" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4295232&amp;d=1316617446">DIY_OSD_v0_14.txt</a> (98.7 KB, 489 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4339764&amp;d=1318292550"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/doc.gif" border="0" alt="Download DIY_OSD_v0_15.doc" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4339764&amp;d=1318292550">DIY_OSD_v0_15.doc</a> (122.0 KB, 303 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4395562&amp;d=1320450968"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/doc.gif" border="0" alt="Download DIY_OSD_v0_16.doc" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4395562&amp;d=1320450968">DIY_OSD_v0_16.doc</a> (117.0 KB, 158 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4416848&amp;d=1321279245"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/doc.gif" border="0" alt="Download DIY_OSD_v0_17.doc" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4416848&amp;d=1321279245">DIY_OSD_v0_17.doc</a> (119.1 KB, 772 views)</span>
<span class="smallfont"></span>
</p>
</li><li>
<p><a href="showatt.php?attachmentid=4798247&amp;d=1334908446"><img class="thumbnail" src="http://static.rcgroups.net/forums/images/attbrowser/zip.gif" border="0" alt="Download DIY_OSD_v0_18.zip" /></a>
<span class="smallfont"><a href="showatt.php?attachmentid=4798247&amp;d=1334908446">DIY_OSD_v0_18.zip</a> (22.4 KB, 133 views)</span>
<span class="smallfont"></span>
</p>
</li>
</ul>
</fieldset>
 
 
</div>
<!-- / attachments -->
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<hr size="1" style="color:#c5ccd3; background-color:#c5ccd3;padding:0;margin:0 0 2px 0;" />
<!-- edit note -->
<div style="margin:0;padding:0;">
<div class="smallfont" style="float:left;text-align:left;margin:0;padding:0;">
<em>
Last edited by Dennis Frie; Apr 20, 2012 at <span class="time">02:55 AM</span>.
</em>
</div>
<div style="float:right;width:230px;height:18px;margin:5px 0 0 0;padding:0;">
<!-- / edit note -->
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792343" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
</div>
</div>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792343 --><table cellpadding="0" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="alt2" colspan="2" align="center">
<script type='text/javascript'><!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['width:700-950,_height:70-110,_rcgf-469-img|rcgf-adsense']) != 'undefined'))
document.write(OA_output['width:700-950,_height:70-110,_rcgf-469-img|rcgf-adsense']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
 
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.net/adjs.php?n=" + phpAds_random);
document.write ("&amp;what=width:700-950,_height:70-110,_rcgf-469-img|rcgf-adsense&amp;target=_blank&amp;block=1");
document.write ("&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://decals.rcgroups.net/adclick.php?n=aa272b7c'><img src='http://decals.rcgroups.net/adview.php?what=width:700-950,_height:70-110,_rcgf-469-img|rcgf-adsense&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;n=aa272b7c' border='0' alt=''></a></noscript>
</td>
</tr>
</table><!-- post #18792370 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792370" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792370" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792370"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 09:28 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792370&amp;postcount=2" target="new" rel="nofollow" id="postcount18792370" name="2"><strong>#2</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792370" class="user_postbit_name">
<a class="bigusername" href="member.php?u=27663">mrfliboy</a>
</div>
 
<div class="smallfont user_postbit_title">Don't leave it Stock</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=27663"><img src="http://static.rcgroups.net/forums/customavatars/avatar27663_1.gif" width="75" height="45" alt="mrfliboy's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>USA, IL, Round Lake</div>
<div class="user_postbit_join">Joined Feb 2004</div>
<div>
2,292 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="mrfliboy is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=27663" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by mrfliboy" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792370">
 
<!-- message -->
<div id="post_message_18792370">
Very nice!!
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792370" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792370 --><!-- post #18792373 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792373" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792373" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792373"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 09:28 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792373&amp;postcount=3" target="new" rel="nofollow" id="postcount18792373" name="3"><strong>#3</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792373" class="user_postbit_name">
<a class="bigusername" href="member.php?u=5464">cactus</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=5464"><img src="http://static.rcgroups.net/forums/customavatars/avatar5464_14.gif" width="75" height="51" alt="cactus's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>Durango Colorado</div>
<div class="user_postbit_join">Joined Sep 2001</div>
<div>
4,831 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-online.png" alt="cactus is online now" border="0" />
 
<a href="search.php?do=finduser&amp;userid=5464" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by cactus" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792373">
 
<!-- message -->
<div id="post_message_18792373">
Subscribed.
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792373" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792373 --><!-- post #18792374 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792374" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792374" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792374"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 09:29 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792374&amp;postcount=4" target="new" rel="nofollow" id="postcount18792374" name="4"><strong>#4</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792374" class="user_postbit_name">
<a class="bigusername" href="member.php?u=80075">GregSilver</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=80075"><img src="http://static.rcgroups.net/forums/customavatars/avatar80075_3.gif" width="59" height="75" alt="GregSilver's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>United States, FL, Plantation</div>
<div class="user_postbit_join">Joined Nov 2005</div>
<div>
595 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="GregSilver is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=80075" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by GregSilver" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792374">
 
<!-- message -->
<div id="post_message_18792374">
awesome.... please keep this project updated. I have a little exp. with arduino and would love to follow your steps!
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792374" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792374 --><!-- post #18792570 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792570" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792570" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792570"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 09:49 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792570&amp;postcount=5" target="new" rel="nofollow" id="postcount18792570" name="5"><strong>#5</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792570" class="user_postbit_name">
<a class="bigusername" href="member.php?u=167333">mark the shark</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
 
<div class="smallfont">
<div>Greenland, Tunu</div>
<div class="user_postbit_join">Joined Aug 2007</div>
<div>
287 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="mark the shark is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=167333" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by mark the shark" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792570">
 
<!-- message -->
<div id="post_message_18792570">
Very nice..
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792570" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792570 --><!-- post #18792699 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792699" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792699" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792699"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 10:07 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792699&amp;postcount=6" target="new" rel="nofollow" id="postcount18792699" name="6"><strong>#6</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792699" class="user_postbit_name">
<a class="bigusername" href="member.php?u=325885">maexx</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
 
<div class="smallfont">
<div>Österreich, Burgenland, Eisenstadt</div>
<div class="user_postbit_join">Joined Aug 2010</div>
<div>
35 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="maexx is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=325885" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by maexx" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792699">
 
<!-- message -->
<div id="post_message_18792699">
Cool, I'm in! Seems to be the perfect project after MultiWiiCopter <img src="images/smilies/popcorn.gif" border="0" alt="" title="Popcorn" class="inlineimg" />
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792699" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792699 --><!-- post #18792764 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18792764" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18792764" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18792764"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 10:15 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18792764&amp;postcount=7" target="new" rel="nofollow" id="postcount18792764" name="7"><strong>#7</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18792764" class="user_postbit_name">
<a class="bigusername" href="member.php?u=283625">viper6549</a>
</div>
 
<div class="smallfont user_postbit_title">Bugs!!!!!!!</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=283625"><img src="http://static.rcgroups.net/forums/customavatars/avatar283625_1.gif" width="56" height="75" alt="viper6549's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>USA, OK, Wayne</div>
<div class="user_postbit_join">Joined Sep 2009</div>
<div>
205 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="viper6549 is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=283625" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by viper6549" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18792764">
 
<!-- message -->
<div id="post_message_18792764">
Sweet, I would love to have a peak at the code.
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18792764" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18792764 --><!-- post #18793136 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18793136" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18793136" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18793136"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 10:56 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18793136&amp;postcount=8" target="new" rel="nofollow" id="postcount18793136" name="8"><strong>#8</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18793136" class="user_postbit_name">
<a class="bigusername" href="member.php?u=350320">Dennis Frie</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=350320"><img src="http://static.rcgroups.net/forums/customavatars/avatar350320_1.gif" width="75" height="75" alt="Dennis Frie's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>Denmark, Capital Region of Denmark, Espergærde</div>
<div class="user_postbit_join">Joined Feb 2011</div>
<div>
1,669 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="Dennis Frie is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=350320" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by Dennis Frie" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18793136">
 
<!-- message -->
<div id="post_message_18793136">
There seems to be quite a few interested, great <img src="http://static.rcgroups.com/forums/images/smilies/smile.gif" border="0" alt="" title="Smilie" class="inlineimg" /><br />
<br />
The code is not too pretty, but it's well commented. <br />
I will upload the current version shortly.
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18793136" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18793136 --><!-- post #18793186 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18793186" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18793186" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18793186"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 11:01 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18793186&amp;postcount=9" target="new" rel="nofollow" id="postcount18793186" name="9"><strong>#9</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18793186" class="user_postbit_name">
<a class="bigusername" href="member.php?u=40432">gtrick90</a>
</div>
 
<div class="smallfont user_postbit_title">aka Nigel Uno</div>
 
 
<div class="smallfont">
<div>Italia, Lazio, Monterotondo</div>
<div class="user_postbit_join">Joined Sep 2004</div>
<div>
296 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="gtrick90 is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=40432" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by gtrick90" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18793186">
 
<!-- message -->
<div id="post_message_18793186">
Nice work!!<br />
<br />
Ciao<br />
<br />
Luca
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18793186" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18793186 --><!-- post #18793354 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18793354" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18793354" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18793354"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 11:22 AM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18793354&amp;postcount=10" target="new" rel="nofollow" id="postcount18793354" name="10"><strong>#10</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18793354" class="user_postbit_name">
<a class="bigusername" href="member.php?u=350320">Dennis Frie</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=350320"><img src="http://static.rcgroups.net/forums/customavatars/avatar350320_1.gif" width="75" height="75" alt="Dennis Frie's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>Denmark, Capital Region of Denmark, Espergærde</div>
<div class="user_postbit_join">Joined Feb 2011</div>
<div>
1,669 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="Dennis Frie is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=350320" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by Dennis Frie" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18793354">
 
<!-- message -->
<div id="post_message_18793354">
Code has been attached. I haven't done any cleaning yet, but feel free to take a look <img src="http://static.rcgroups.com/forums/images/smilies/smile.gif" border="0" alt="" title="Smilie" class="inlineimg" /><br />
<br />
New image attached as well.<br />
Should I go for small or large numbers?
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<hr size="1" style="color:#c5ccd3; background-color:#c5ccd3;padding:0;margin:0 0 2px 0;" />
<!-- edit note -->
<div style="margin:0;padding:0;">
<div class="smallfont" style="float:left;text-align:left;margin:0;padding:0;">
<em>
Last edited by Dennis Frie; Jul 18, 2011 at <span class="time">11:33 AM</span>.
</em>
</div>
<div style="float:right;width:230px;height:18px;margin:5px 0 0 0;padding:0;">
<!-- / edit note -->
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18793354" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
</div>
</div>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18793354 --><!-- post #18794396 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18794396" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18794396" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18794396"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 01:15 PM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18794396&amp;postcount=11" target="new" rel="nofollow" id="postcount18794396" name="11"><strong>#11</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18794396" class="user_postbit_name">
<a class="bigusername" href="member.php?u=202519">charlienofun</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=202519"><img src="http://static.rcgroups.net/forums/customavatars/avatar202519_1.gif" width="75" height="71" alt="charlienofun's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>United States, CA, Alameda</div>
<div class="user_postbit_join">Joined Mar 2008</div>
<div>
295 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="charlienofun is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=202519" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by charlienofun" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18794396">
 
<!-- message -->
<div id="post_message_18794396">
Subscribed.
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18794396" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18794396 --><!-- post #18794520 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18794520" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18794520" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18794520"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 01:30 PM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18794520&amp;postcount=12" target="new" rel="nofollow" id="postcount18794520" name="12"><strong>#12</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18794520" class="user_postbit_name">
<a class="bigusername" href="member.php?u=5464">cactus</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
<div class="smallfont user_postbit_avatar">
<a href="member.php?u=5464"><img src="http://static.rcgroups.net/forums/customavatars/avatar5464_14.gif" width="75" height="51" alt="cactus's Avatar" border="0" /></a>
</div>
 
<div class="smallfont">
<div>Durango Colorado</div>
<div class="user_postbit_join">Joined Sep 2001</div>
<div>
4,831 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-online.png" alt="cactus is online now" border="0" />
 
<a href="search.php?do=finduser&amp;userid=5464" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by cactus" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18794520">
 
<!-- message -->
<div id="post_message_18794520">
<div style="margin:20px; margin-top:5px; ">
<div class="smallfont" style="margin-bottom:2px">Quote:</div>
<table cellpadding="5" cellspacing="0" border="0" width="100%">
<tr>
<td class="alt2" style="border:1px inset">
<div>
Originally Posted by <strong>maexx</strong>
<a href="showthread.php?p=18792699#post18792699" rel="nofollow"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/buttons3/viewpost.gif" border="0" alt="View Post" /></a>
</div>
<div style="font-style:italic">Cool, I'm in! Seems to be the perfect project after MultiWiiCopter <img src="images/smilies/popcorn.gif" border="0" alt="" title="Popcorn" class="inlineimg" /></div>
</td>
</tr>
</table>
</div>+1. There is currently only one OSD using the Gyro and ACC data from the MultiWiicopter to show an Artificial Horizon. That one is closed source and there is not much documentation on it and it's very pricey. <br />
Tom66 is working on an OSD as well and I started working on some sudo code to take the IMU data from the IC2 on a MultiWii and generate a AHI line for his code base.<br />
<br />
What I like about the OP's solution is that it's Arduino based and so is MultiWii. So, we might finally have an open source AHI OSD solution for Wii based flight controllers! <img src="http://static.rcgroups.com/forums/images/smilies/biggrin.gif" border="0" alt="" title="Big Grin" class="inlineimg" />
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18794520" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18794520 --><!-- post #18795442 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18795442" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18795442" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18795442"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 03:13 PM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18795442&amp;postcount=13" target="new" rel="nofollow" id="postcount18795442" name="13"><strong>#13</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18795442" class="user_postbit_name">
<a class="bigusername" href="member.php?u=222767">flyboy321</a>
</div>
 
<div class="smallfont user_postbit_title">RC = FUN</div>
 
 
<div class="smallfont">
<div>Fort Wayne, Indiana</div>
<div class="user_postbit_join">Joined Aug 2008</div>
<div>
3,501 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="flyboy321 is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=222767" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by flyboy321" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18795442">
 
<!-- message -->
<div id="post_message_18795442">
This is pretty awesome! <br />
<br />
I'd say go for the big text, but that's just me. And, put an arrow pointing home! -Tyler
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18795442" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18795442 --><!-- post #18795454 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18795454" style="padding:0px 0px 0px 0px">
<!-- this is not the last post shown on the page -->
 
 
 
<table id="post18795454" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18795454"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 03:14 PM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18795454&amp;postcount=14" target="new" rel="nofollow" id="postcount18795454" name="14"><strong>#14</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18795454" class="user_postbit_name">
<a class="bigusername" href="member.php?u=278620">Devonboy</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
 
<div class="smallfont">
<div>SW England</div>
<div class="user_postbit_join">Joined Aug 2009</div>
<div>
728 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="Devonboy is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=278620" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by Devonboy" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18795454">
 
<!-- message -->
<div id="post_message_18795454">
Maybe you would also be interested in this opensource, Arduino RC hardware<br />
<a href="http://www.rcgroups.com/forums/showthread.php?t=1446653" target="_blank">http://www.rcgroups.com/forums/showthread.php?t=1446653</a><br />
<br />
Hardware:<br />
<a href="http://www.flytron.com/16-openlrs" target="_blank" rel="nofollow">http://www.flytron.com/16-openlrs</a><br />
Forum:<br />
<a href="http://forum.flytron.com/viewforum.php?f=7" target="_blank" rel="nofollow">http://forum.flytron.com/viewforum.php?f=7</a><br />
<br />
Nigel.
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<hr size="1" style="color:#c5ccd3; background-color:#c5ccd3;padding:0;margin:0 0 2px 0;" />
<!-- edit note -->
<div style="margin:0;padding:0;">
<div class="smallfont" style="float:left;text-align:left;margin:0;padding:0;">
<em>
Last edited by Devonboy; Jul 18, 2011 at <span class="time">03:27 PM</span>.
</em>
</div>
<div style="float:right;width:230px;height:18px;margin:5px 0 0 0;padding:0;">
<!-- / edit note -->
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18795454" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
</div>
</div>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18795454 --><!-- post #18795532 -->
 
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<div id="edit18795532" style="padding:0px 0px 0px 0px">
 
 
 
<table id="post18795532" class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<tr>
<td class="thead_postbit" style="font-weight:normal;" >
<!-- status icon and date -->
<a name="post18795532"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/statusicon/post_old.gif" alt="Old" border="0" /></a>
Jul 18, 2011, 03:22 PM
<!-- / status icon and date -->
</td>
<td class="thead_postbit" style="font-weight:normal;" align="right">
<div class="thead_postbit_right">
<ul>
<li><a href="showpost.php?p=18795532&amp;postcount=15" target="new" rel="nofollow" id="postcount18795532" name="15"><strong>#15</strong></a></li>
</ul>
</div>
</td>
</tr>
<tr valign="top">
<td class="user_postbit" rowspan="2">
<div class="user_postbit_top">
<div class="user_postbit_arrow"></div>
<div id="postmenu_18795532" class="user_postbit_name">
<a class="bigusername" href="member.php?u=316431">carlonb</a>
</div>
 
<div class="smallfont user_postbit_title">Registered User</div>
 
 
<div class="smallfont">
<div>Italia, Lombardia, Milano</div>
<div class="user_postbit_join">Joined Jun 2010</div>
<div>
74 Posts
</div>
</div>
</div>
<div class="user_postbit_bottom">
<img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/statusicon/icon-status-offline.png" alt="carlonb is offline" border="0" />
 
<a href="search.php?do=finduser&amp;userid=316431" rel="nofollow"><img class="inlineimg_postbit" src="http://static.rcgroups.net/forums/images/beta/buttons3/icon-search.png" border="0" alt="Find More Posts by carlonb" /></a>
&nbsp;
</div>
</td>
<td class="alt2" id="td_post_18795532">
 
<!-- message -->
<div id="post_message_18795532">
Hi dennis,<br />
please continue, I like this idea to built my own OSD as i like fly , programming and electronics.<br />
Please submit a schematic.<br />
Ciao, Carlo
</div>
<!-- / message -->
 
 
 
 
 
</td>
</tr>
<tr valign="bottom">
<td class="alt2_bottom" align="right" >
<!-- controls -->
<a href="newreply.php?do=newreply&amp;p=18795532" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/quote.gif" alt="Reply With Quote" border="0" /></a>
<!-- / controls -->
</td>
</tr>
<tr>
<td colspan="2" class="tbottom_postbit"></td>
</tr>
</table>
 
 
 
 
 
</div>
</div>
</div>
</div>
 
<!-- / close content container -->
 
<!-- / post #18795532 --><div id="lastpost"></div></div>
<!-- google_ad_section_end -->
 
 
<!-- google_ad_section_start(weight=ignore) -->
 
<!-- start content table -->
<!-- open content container -->
 
<div align="center">
<div class="page" style="width:100%; text-align:left">
<div style="padding:0px 0px 0px 0px" align="left">
 
<!-- / start content table -->
 
<!-- controls below postbits -->
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin:0px; padding:10px;">
<tr valign="top">
<td class="smallfont"><a href="newreply.php?do=newreply&amp;noquote=1&amp;p=18795532" rel="nofollow"><img src="http://static.rcgroups.net/forums/images/beta/buttons3/reply.gif" alt="Reply" border="0" /></a>
</td>
<td align="right"><div class="pagenav" align="right">
<table class="tborder" cellpadding="3" cellspacing="0" border="0">
<tr>
<td class="vbmenu_control" style="font-weight:normal">Page 1 of 111</td>
<td class="alt2"><span class="smallfont" title="Showing results 1 to 15 of 1,654"><strong>1</strong></span></td>
<td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=2" title="Show results 16 to 30 of 1,654">2</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=3" title="Show results 31 to 45 of 1,654">3</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=4" title="Show results 46 to 60 of 1,654">4</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=5" title="Show results 61 to 75 of 1,654">5</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=11" title="Show results 151 to 165 of 1,654"><!--+10-->11</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=51" title="Show results 751 to 765 of 1,654"><!--+50-->51</a></td><td class="alt1"><a class="smallfont" href="showthread.php?t=1473207&amp;page=101" title="Show results 1,501 to 1,515 of 1,654"><!--+100-->101</a></td>
<td class="alt1"><a rel="next" class="smallfont" href="showthread.php?t=1473207&amp;page=2" title="Next Page - Results 16 to 30 of 1,654">Next &gt;</a></td>
<td class="alt1" nowrap="nowrap"><a class="smallfont" href="showthread.php?t=1473207&amp;page=111" title="Last Page - Results 1,651 to 1,654 of 1,654">Last <strong>&raquo;</strong></a></td>
<td class="vbmenu_control" title="showthread.php?t=1473207"><a name="PageNav"></a></td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<!-- / controls below postbits -->
 
 
 
 
 
 
 
<div class="smallfont" align="center">
 
<strong><a href="/video-piloting-fpv-rpv-469/">Return to Video Piloting (FPV/RPV)</a></strong>
 
</div>
<br />
<div style="margin-bottom:10px">
<table cellspacing="0" cellpadding="0" border="0" width="100%" align="center">
<tr valign="top">
<td width="104" height="30"><a href='http://decals.rcgroups.com/adclick.php?bannerid=1624&amp;zoneid=0&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;dest=http%3A%2F%2Fwww.castlecreations.com%2F' target='_blank' onMouseOver="self.status='Castle Creations'; return true;" onMouseOut="self.status='';return true;"><img src='http://decals.rcgroups.net/storage/rcg-header-spin_2.gif' width='104' height='30' alt='Castle Creations' title='Castle Creations' border='0'></a>
</td>
<td background="http://static.rcgroups.net/forums/images/fillers/castle-bg.gif" height="30">&nbsp;</td>
<td background="http://static.rcgroups.net/forums/images/fillers/castle-bg.gif" width="442" height="30"><script language="JavaScript" type="text/javascript">
<!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['clientid=1004']) != 'undefined'))
document.write(OA_output['clientid=1004']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.net/adjs.php?n=" + phpAds_random);
document.write ("&amp;clientid=1004&amp;target=_blank");
document.write ("&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://decals.rcgroups.net/adclick.php?n=a40d6136' target='_blank'><img src='http://decals.rcgroups.net/adview.php?clientid=1004&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;n=a40d6136' border='0' alt='' /></a></noscript></td>
<td background="http://static.rcgroups.net/forums/images/fillers/castle-bg.gif" height="30">&nbsp;</td>
<td valign="middle" background="http://static.rcgroups.net/forums/images/fillers/castle-bg.gif" width="184" height="30">&nbsp;<span class="castlebar"><a href="http://www.castlecreations.com/products/products_drive.html">DRIVE</a>&nbsp;/&nbsp;<a href="http://www.castlecreations.com/products/products_fly.html">FLY</a>&nbsp;/&nbsp;<a href="http://www.castlecreations.com/support.html">SUPPORT</a>&nbsp;</span>&nbsp;</td>
</tr>
</table>
</div><div id="beacon_1624162616281639" style="position: absolute; left: 0px; top: 0px; visibility: hidden;"><img src="http://decals.rcgroups.net/adlog.php?bannerid=1624,1626,1628,1639&amp;clientid=&amp;zoneid=&amp;source=Video%20Piloting%20%28FPV%2FRPV%29" width="0" height="0" alt="" style="width: 0px; height: 0px;" /></div>
 
 
 
<!-- lightbox scripts -->
<script type="text/javascript" src="clientscript/vbulletin_lightbox.js?v=384"></script>
<script type="text/javascript">
<!--
vBulletin.register_control("vB_Lightbox_Container", "posts", 1);
//-->
</script>
<!-- / lightbox scripts -->
 
 
 
 
 
 
 
 
 
 
<!-- next / previous links -->
<br />
<div class="smallfont" align="center">
<strong>&laquo;</strong>
<a href="showthread.php?t=1473207&amp;goto=nextoldest" rel="nofollow">Previous Thread</a>
|
<a href="showthread.php?t=1473207&amp;goto=nextnewest" rel="nofollow">Next Thread</a>
<strong>&raquo;</strong>
</div>
<!-- / next / previous links -->
 
 
 
 
 
 
 
<!-- popup menu contents -->
<br />
 
<!-- thread tools menu -->
<div class="vbmenu_popup" id="threadtools_menu" style="display:none">
<form action="postings.php?t=1473207&amp;pollid=" method="post" name="threadadminform">
<table cellpadding="4" cellspacing="1" border="0">
<tr>
<td class="thead">Thread Tools<a name="goto_threadtools"></a></td>
</tr>
<tr>
<td class="vbmenu_option"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/buttons3/printer.gif" alt="Show Printable Version" /> <a href="printthread.php?t=1473207" accesskey="3" rel="nofollow">Show Printable Version</a></td>
</tr>
<tr>
<td class="vbmenu_option"><img class="inlineimg" src="http://static.rcgroups.net/forums/images/beta/buttons3/attach.gif" alt="Show attachments" /> <a href="thumbgallery.php?t=1473207&do=threadgallery">Show Attachments in this Thread</a></td>
</tr>
</table>
</form>
</div>
<!-- / thread tools menu -->
 
<!-- **************************************************** -->
 
 
 
<!-- **************************************************** -->
 
 
 
<!-- / popup menu contents -->
 
 
 
 
 
 
<table class="tborder" cellpadding="5" cellspacing="0" border="0" width="100%" align="center">
<thead>
<tr>
<td class="tcat" width="100%" colspan="5">
<a style="float:right" href="/forums/showthread.php?t=1473207#top" onclick="return toggle_collapse('similarthreads')"><img id="collapseimg_similarthreads" src="http://static.rcgroups.net/forums/images/beta/buttons3/collapse_tcat.gif" alt="" border="0" /></a>
Similar Threads<a name="similarthreads"></a>
</td>
</tr>
</thead>
<tbody id="collapseobj_similarthreads" style="">
<tr class="thead" align="center" >
<td class="thead" width="40%" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;">Thread</td>
<td class="thead" width="15%" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap">Thread Starter</td>
<td class="thead" width="20%" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;">Forum</td>
<td class="thead" width="5%" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;">Replies</td>
<td class="thead" width="20%" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;">Last Post</td>
</tr>
<tr>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="left">
<span class="smallfont"><span class="cats Discussion">Discussion</span> <a href="showthread.php?t=1433389" title="Has anyone made their own OSD system using Arduino for processing and a Tellymate for injecting the data onto the screen? The Arduino can interface with GPS modules and sensors that use the I2C interface as well as analog sensors. This info could then be displayed on the OSD
Arduino:...">Diy osd</a></span>
</td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">karl k</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Video Piloting (FPV/RPV)</span></td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="center"><span class="smallfont">2</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="right"><span class="smallfont">May 03, 2011 <span class="time">12:31 AM</span></span></td>
</tr>
<tr>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="left">
<span class="smallfont"><span class="cats Idea">Idea</span> <a href="showthread.php?t=1411967" title="check out what i found on the net today
http://hackaday.com/2011/03/24/video-experimenter-shield/#more-38412
could this be a DIY OSD? it seems plausible.....">New DIY OSD?</a></span>
</td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">atari7202</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Video Piloting (FPV/RPV)</span></td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="center"><span class="smallfont">1</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="right"><span class="smallfont">Mar 25, 2011 <span class="time">12:08 AM</span></span></td>
</tr>
<tr>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="left">
<span class="smallfont"><span class="cats Discussion">Discussion</span> <a href="showthread.php?t=1246240" title="it's my own diy OSD spend me long time
http://img02.taobaocdn.com/imgextra/i2/53978345/T2OFJgXdlcXXXXXXXX_!!53978345.jpg...">see my own diy OSD video</a></span>
</td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Passion</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Aerial Photography</span></td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="center"><span class="smallfont">7</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="right"><span class="smallfont">May 27, 2010 <span class="time">01:28 AM</span></span></td>
</tr>
<tr>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="left">
<span class="smallfont"><span class="cats Discussion">Discussion</span> <a href="showthread.php?t=1072038" title="I have just been getting started with some DIY electronics stuff, and specifically have begun developing a DIY RC tx / rx using off the shelf components.
I am also interested in FPV - so naturally I have been looking at OSD systems. I don't have the funds to buy one right now, but would like to...">REAL homebrew DIY OSD - Check it out!</a></span>
</td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">jafoca</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Video Piloting (FPV/RPV)</span></td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="center"><span class="smallfont">8</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="right"><span class="smallfont">Jun 29, 2009 <span class="time">06:52 PM</span></span></td>
</tr>
<tr>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="left">
<span class="smallfont"><span class="cats Discussion">Discussion</span> <a href="showthread.php?t=800354" title="Hi, somebody did excellent job creating an example of source code for OSD that we can understand (in C language):
http://www.micro-examples.com/public/microex-navig/doc/081-pic-osd-superimposer
see also
http://www.micro-examples.com/public/microex-navig/doc/089-pic-pal-tv">picoOSD DIY PIC12F683 based OSD in C</a></span>
</td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">kbosak</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" nowrap="nowrap"><span class="smallfont">Video Piloting (FPV/RPV)</span></td>
<td class="alt2" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="center"><span class="smallfont">6</span></td>
<td class="alt1" style="border-right:1px solid #c5cad0; border-bottom:1px solid #c5cad0;" align="right"><span class="smallfont">Jan 31, 2008 <span class="time">07:47 AM</span></span></td>
</tr>
 
</tbody>
</table>
 
<br />
 
 
 
 
</div>
</div>
</div>
 
<!-- / close content container -->
 
 
<!-- /content area table -->
 
<table class="tborderads" cellpadding="0" cellspacing="0" border=0 width="100%" align="center">
<tr>
<td align="center">
<script language='JavaScript' type='text/javascript'>
<!--// <![CDATA[
if ((typeof(OA_output) != 'undefined') && (typeof(OA_output['zone:170']) != 'undefined'))
document.write(OA_output['zone:170']);
else {
if (!document.phpAds_used) document.phpAds_used = ',';
phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11);
 
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://decals.rcgroups.net/adjs.php?n=" + phpAds_random);
document.write ("&amp;what=zone:170&amp;target=_blank&amp;block=1");
document.write ("&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;exclude=" + document.phpAds_used);
if (document.referrer)
document.write ("&amp;referer=" + escape(document.referrer));
document.write ("'><" + "/script>");
}
// ]]> --></script><noscript><a href='http://decals.rcgroups.net/adclick.php?n=ab93962e' target='_blank'><img src='http://decals.rcgroups.net/adview.php?what=zone:170&amp;source=Video%20Piloting%20%28FPV%2FRPV%29&amp;n=ab93962e' border='0' alt=''></a></noscript>
</td>
</tr>
</table>
 
<form action="index.php" method="get" style="clear:left">
 
<style type="text/css">
 
 
 
 
</style>
 
<div id="footerwide">
<div id="footer-wrapper">
<div id="footer-left">
<table cellpadding="5" cellspacing="0" border="0" width="100%" class="page" align="center">
<tr valign="top">
 
<td class="cssfooter">
<div class="smallfont1">
<b class="footerhead">Forum Functions</b>
<a href="calendar.php">Calendar</a><br />
<a href="/external-feeds-207/">External Feeds</a><br />
<a href="memberlist.php">Members</a><br />
<a href="thumbgallery.php?do=showrecent">Recent Attachments</a><br />
<a href="videogallery.php?">Recent Videos</a><br />
<a href="forumdisplay.php?do=markread" rel="nofollow" onclick="javascript:if (confirm('Are you sure you want to mark all forums read?')) {return true} else {return false}">Mark Forums Read</a><br />
<a href="/forums/showthread.php?t=1473207#top" onclick="self.scrollTo(0, 0); return false;">Top</a>
</div>
</td>
 
<td class="cssfooter">
<div class="smallfont1">
<b class="footerhead">Projects</b>
<a href="member.php">Blogs</a><br />
<a href="chat.php">Chat</a><br />
<a href="http://maps.rcgroups.com">Maps.RCGroups.com</a><br />
<a href="http://m.rcgroups.com/forums/showthread.php?t=1473207">Mobile Version</a><br />
</div>
</td>
 
<td class="cssfooter">
<div class="smallfont1">
<b class="footerhead">Site Links</b>
<b><a href="advertising.php">Advertising</a></b><br />
<a href="http://www.rcgroups.com/pages/splist/">Our Sponsors</a><br />
<a href="/pages/contacts/" rel="nofollow" accesskey="9">Contact Us</a><br />
<a href="faq.php">FAQ</a><br />
<a href="/pages/contacts/reviewpolicies.php">Review Policies</a><br />
<b><a href="wlist.php">Rules</a></b><br />
<a href="/pages/history.php">Site History</a><br />
<a href="http://www.rcgroups.com/forums/termsofservice.php">Terms of Service</a><br />
</div>
</td>
 
<td class="cssfooter">
<div class="smallfont1">
<b class="footerhead">RCG Network</b>
<a href="http://www.ezonemag.com/" target="_blank">The E Zone</a><br />
<a href="http://www.liftzone.com/" target="_blank">Lift Zone</a><br />
<a href="http://www.rcpowermag.com/" target="_blank">RC Power</a><br />
<a href="http://www.flyinggiants.com/" target="_blank">Flying Giants</a><br />
<a href="http://www.crackroll.com/" target="_blank">Crack Roll</a><br />
<a href="http://www.rccars.com/" target="_blank">RCCars</a>
</div>
</td>
 
 
</tr>
</table>
</div> <!-- / footer left -->
 
<div id="footer-right">
<div class="smallfont">
<p>All RCGroups content copyright 1996 - 2012 by RCGroups.com<br />
and Jim Bourke except where otherwise indicated.</p>
 
<p>Terry the transmitter, the RCGroups name and logo,<br />
The E Zone, Lift Zone, and RC Power are all trademarks<br />
of RCGroups and Jim Bourke.</p>
 
<p>Please report any misuse of our trademarks using <a href="/pages/contacts/?" rel="nofollow">the contact form</a>. Thank you.</p>
<p>&nbsp;</p>
</div>
</div>
 
</div> <!-- / footerwrapper -->
</div> <!-- / footerwide -->
 
</form>
<div id="bottom-menu-wrapper">
<div id="bottom-menu">
<div style="margin:0 0 0 15px;">
<ul>
<li id="bottom-menu-left">Style</li>
<li class="style_selected"><a href="javascript:void(0);" onclick="switch_style(40,'style');">Default</a></li>
<li ><a href="javascript:void(0);" onclick="switch_style(41,'style');">Fluid</a></li>
<li ><a href="javascript:void(0);" onclick="switch_style(11,'style');">Classic</a></li>
<li id="bottom-menu-right"><a href="/forums/showthread.php?t=1473207#top" onclick="self.scrollTo(0, 0); return false;">Back to Top</a></li>
</ul>
</div>
</div>
</div>
<script type="text/javascript">
var rwt_adsource = "";
if (!rwt_adsource)
{
rwt_adsource = "Video%20Piloting%20%28FPV%2FRPV%29";
}
var rwt_campid = 5336718137;
</script>
<script type="text/javascript" src="clientscript/rwt.js"></script>
 
 
<script type="text/javascript">
<!--
// Main vBulletin Javascript Initialization
vBulletin_init();
//-->
</script>
 
<!-- temp -->
<div style="display:none">
<!-- thread rate -->
<!-- / thread rate -->
</div>
 
<script type="text/javascript">
var vglnk = { api_url: '//api.viglink.com/api',
key: '8a24c98a696b4e5723db293f62190b87' };
 
(function(d, t) {
var s = d.createElement(t); s.type = 'text/javascript'; s.async = true;
s.src = ('https:' == document.location.protocol ? vglnk.api_url :
'//cdn.viglink.com/api') + '/vglnk.js';
var r = d.getElementsByTagName(t)[0]; r.parentNode.insertBefore(s, r);
}(document, 'script'));
</script>
 
<!-- google_ad_section_end -->
</div> <!-- end wrapper -->
</div> <!-- end shadow -->
</body>
</html>
/C-OSD/simpleosd-web-manual.html
0,0 → 1,1000
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
 
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
<link rel="alternate" type="application/rss+xml" title="Flytron Projects RSS Feed" href="http://blog.flytron.com/feed" />
<link rel="pingback" href="http://blog.flytron.com/xmlrpc.php" />
<link rel="stylesheet" href="http://blog.flytron.com/wp-content/themes/blog-design-studio-newblue/style.css" type="text/css" media="screen" />
<link rel="stylesheet" href="http://blog.flytron.com/wp-content/themes/blog-design-studio-newblue/css/print.css" type="text/css" media="print" />
<!--[if IE]><link rel="stylesheet" href="http://blog.flytron.com/wp-content/themes/blog-design-studio-newblue/css/ie.css" type="text/css" media="screen, projection" /><![endif]-->
 
<script type="text/javascript">//<![CDATA[
// Google Analytics for WordPress by Yoast v4.2.3 | http://yoast.com/wordpress/google-analytics/
var _gaq = _gaq || [];
_gaq.push(['_setAccount','UA-19886394-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]></script>
<link rel="alternate" type="application/rss+xml" title="Flytron Projects &raquo; SimpleOSD Web Manual Comments Feed" href="http://blog.flytron.com/simpleosd-web-manual.html/feed" />
<script type='text/javascript' src='http://blog.flytron.com/wp-includes/js/jquery/jquery.js?ver=1.7.1'></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://blog.flytron.com/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://blog.flytron.com/wp-includes/wlwmanifest.xml" />
<link rel='next' title='Hello from Flytron World :)' href='http://blog.flytron.com/hello-from-flytron-world.html' />
<meta name="generator" content="WordPress 3.3.1" />
<link rel='canonical' href='http://blog.flytron.com/simpleosd-web-manual.html' />
<link rel='shortlink' href='http://blog.flytron.com/?p=324' />
<!-- Required by Subscribe Here Plugin 1.0 plugin --><link rel="stylesheet" type="text/css" href="http://blog.flytron.com/wp-content/plugins/subscribe-here-widget/subscribe-here-widget.css" media="screen" />
<title> SimpleOSD Web Manual - Flytron Projects</title>
</head>
 
<body>
 
 
<div class="container2">
 
<div id="header">
 
<div class="container">
 
<div class="topline">
<ul class="menu">
<li class="page_item page_item_1 "><a href="http://blog.flytron.com/" title="Home">Home</a></li>
<li class="page_item page-item-2"><a href="http://blog.flytron.com/about">About</a></li>
<li class="page_item page-item-111"><a href="http://blog.flytron.com/flytron-store">Flytron Store</a></li>
</ul>
 
<div id="searchform">
<form method="get" action="/index.php">
<input type="text" name="s" id="s" value="Type and hit Enter to Search" onfocus="if (this.value == 'Type and hit Enter to Search') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Type and hit Enter to Search';}" />
</form>
</div>
 
</div>
 
 
<div id="headline">
<h1>Flytron Projects</h1>
<div class="desc_l"></div>
<div class="desc">opensource ideas for geeks</div>
<div class="desc_r"></div>
</div>
 
<div class="subs">
<a href="http://blog.flytron.com/feed">Subscribe to RSS</a>
</div>
 
 
</div>
 
</div><!-- end #header -->
 
<div class="clear"></div>
<div class="container main">
<div id="leftcolumn">
<div class="post" id="post-324">
<div class="title">
<h2>SimpleOSD Web Manual</h2>
<div class="date">Jan 1, 2010</div>
</div>
<div class="clearer"></div>
<h2><strong>Table Of Contents</strong></h2>
<ol>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#parts of simpleosd">Parts of SimpleOSD</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#pinouts">Pinouts</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#wiring diagram">Wiring Diagram</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#variations">Some Installation Variations</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#calibrating">CALIBRATING EXTERNAL SENSORS of SimpleOSD Ultralight</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#upgrading">UPGRADING SimpleOSD FIRMWARE</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#extra_features">Extra Features for SimpleOSD XL<br />
</a></li>
</ol>
<p><strong>TROUBLESHOOTING</strong></p>
<ol>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#background visibility">My Black Background is not enough black</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#background visibility">My GPS&#8217;s 3DFIX LED dont stop to blinking</a></li>
<li><a href="http://blog.flytron.com/simpleosd-web-manual.html#gps fixed but">My GPS Fixed but SimpleOSD didnt recognise it</a></li>
</ol>
<hr /><a name="parts of simpleosd"></a>Parts of SimpleOSD</p>
<h3><strong>1 &#8211; OSD Main Board</strong></h3>
<p><img src="http://www.flytron.com/fotolar/simpleosd/osd_1.jpg" border="0" alt="" width="300" height="225" /></p>
<p>Main Board coming with 40 male and 3 of 4 pin female pins.<br />
You can solder it for different wiring combinations.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/pins.jpg" border="0" alt="" /></p>
<h3><strong>2 &#8211; Current Sensor</strong></h3>
<p><img src="http://www.flytron.com/fotolar/simpleosd/akim_1.jpg" border="0" alt="" width="300" height="225" /></p>
<p>Ultralight Sensor</p>
<p><img src="http://www.flytron.com/img/p/60-218-large.jpg" border="0" alt="" /></p>
<h3><strong>3 &#8211; GPS Module</strong></h3>
<p><img src="http://www.flytron.com/fotolar/simpleosd/gps_1.jpg" border="0" alt="" width="200" height="150" /></p>
<h3><strong>4 &#8211; USB Loader Stick</strong></h3>
<p><img src="http://www.flytron.com/fotolar/simpleosd/img_0107.jpg" border="0" alt="" /></p>
<hr />
<h2><strong><span style="font-size: medium;"><a name="pinouts"></a>PINOUTS</span></strong></h2>
<p>SimpleOSD designed for minimum wiring requirements. Because, most of accidents being from reverse polarity or poor wiring quality etc.</p>
<p>GPS module&#8217;s dont need extra wiring, you can solder it easly on the main module. And firmware update tool can plug directly on this.<br />
You can supply your camera over OSD pins or directly from battery.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/con_dig.jpg" border="0" alt="" width="562" height="374" /></p>
<hr />
<h2><strong><span style="font-size: medium;"><a name="wiring diagram"></a>WIRING DIAGRAM</span></strong></h2>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p>SimpleOSD have very flexible wiring architecture.</p>
<p>All connections optional except  VDD supply voltage, Ground and Video signal.</p>
<p>If you connect only power and video pins, you can see &#8220;battery voltage&#8221; on the screen.</p>
<p><span style="color: #ff0000;">Note: GPS module disabling automatically when USB Loader Stick plugged.</span></p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/wiring.jpg" border="0" alt="" width="500" height="487" /></p>
<hr />
<h2><strong><span style="font-size: medium;"><a name="variations"></a>Some Installation Variations</span></strong></h2>
<h3><strong>1-Main OSD Module Only</strong></h3>
<p><strong><br />
</strong>You can read battery voltages (main and second battery) and RSSI value with main module.<br />
It is enough for most of FPV fun flying actions.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/only_bat.jpg" border="0" alt="" /></p>
<h3><strong>2- with Current Sensor</strong></h3>
<p><strong><br />
</strong>You can read extra; current and used battery capacity with current sensor.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/with_current.jpg" alt="http://www.flytron.com/fotolar/simpleosd/with_current.jpg" /></p>
<h3><strong>3-with 10Hz GPS</strong></h3>
<p><strong> </strong></p>
<p>You can read Position, Distance, Home direction, Altitude and Cruise Speed with GPS module.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/with_gps.jpg" alt="http://www.flytron.com/fotolar/simpleosd/with_gps.jpg" /></p>
<p>GPS module can be connect over main module for minimum space requirements.<br />
You can see the long pinouts (on the left side of gps) for firmware update.<br />
This is photo of my last test set. It was working when i shot this photo. <img src='http://blog.flytron.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/gps_plugged.jpg" alt="http://www.flytron.com/fotolar/simpleosd/gps_plugged.jpg" /></p>
<hr />
<h2><strong><span style="font-size: medium;"><a name="calibrating"></a>CALIBRATING EXTERNAL SENSORS of SimpleOSD Ultralight</span></strong></h2>
<p><strong><span style="font-size: medium;"> </span></strong><br />
<span style="color: #ff0000;">Important Notice: this proscedure works only with old SimpleOSD Ultralight devices.</span></p>
<p>SimpleOSD Ultralight&#8217;s default firmware including a calibration menu for first time calibrations of sensors.</p>
<p>You can calibrate current sensors and RSSI input with this menu.</p>
<p>Calibration proscedure very easy,</p>
<ol>
<li>Press and hold the button when SimpleOSD Ultralight running. It will reboot in 7 seconds. Dont release the button when rebooting.Or press and hold the button and remove and connect the battery (same way with rebooting)</li>
<li>It will show Calibration menu on the OSD, now release the button.</li>
<li>It will show &#8220;Current Sensor 1&#8243; and count 5 to 0 in 5 seconds, if you want to calibrate press and release the button. It will read &#8220;zero amper value&#8221; of current sensor 1.</li>
<li>It will show &#8220;Current Sensor 2&#8243; and count 5 to 0 in 5 seconds, if you want to calibrate press and release the button. It will read &#8220;zero amper value&#8221; of current sensor 2.</li>
<li>It will show &#8220;RSSI Calibration &#8221; and count 5 to 0 in 5 seconds, if you want to calibrate press and release the button.It will read max and minimum  values of your RC Receiver.Power On your rc transmitter for max valueand Power Off for min valueand Press and release the button.</li>
<li>It will record calibration values in internal memory. And reboot automatically.<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/M54VC7jUHVQ&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/M54VC7jUHVQ&amp;hl=en&amp;fs=1&amp;" allowfullscreen="true"></embed></object></li>
</ol>
<hr />
<h2><strong><span style="font-size: medium;"><a name="upgrading"></a>UPGRADING SimpleOSD FIRMWARE</span></strong></h2>
<p>SimpleOSD is most flexible OSD device on the market with online firmware update/upgrading system.</p>
<p>We can design new OSD layouts with your ideas and you can choose and install it in seconds.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/screen.jpg" alt="" /></p>
<h2><span style="font-size: medium;"><strong>Downloading Latest Firmware Loader and Tools</strong></span></h2>
<p><strong> </strong></p>
<p><span style="color: #000000;"><a href="http://www.flytron.com/bootloader/xl_tools.zip">xl_tools.zip</a> version 2.4  Release Date: 2010-06-30</span></p>
<p>Extract this zip file in any folder. It&#8217;s including EXE file and XP &amp; Vista Drivers.</p>
<h3><span style="font-size: medium;"><span style="font-size: small;"><strong>Installing USB Drivers</strong></span></span></h3>
<h3><span style="font-size: medium;"><span style="font-size: small;">Our USB Loader Stick coming with XP and Vista Drivers. Installation steps same as other devices.</span></span></h3>
<p>Plug the stick on any USB port of your computer, Your PC will find the device</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/install_step.jpg" alt="" /></p>
<p>You will see this screen in 3-5 second, select &#8220;No, not this time&#8221; optin and Next<br />
<img src="http://www.flytron.com/fotolar/simpleosd/install_step2.jpg" alt="" /></p>
<p>Select &#8220;Install from spesific location&#8221; and Next<br />
<img src="http://www.flytron.com/fotolar/simpleosd/install_step3.jpg" alt="" /></p>
<p>Select   &#8220;Include this location in the search&#8221; box and click &#8220;Browse&#8221; button, Then select the driver folder.<br />
<img src="http://www.flytron.com/fotolar/simpleosd/install_step4.jpg" alt="" /></p>
<p>It will install the drivers automaticaly<br />
<img src="http://www.flytron.com/fotolar/simpleosd/install_step5.jpg" alt="" /></p>
<p>and you will see Finish screen. Driver installation done!<br />
<img src="http://www.flytron.com/fotolar/simpleosd/install_step6.jpg" alt="" /></p>
<hr />
<h2><span style="font-size: medium;"><strong>Using Firmware Loader Software</strong></span></h2>
<p><span style="font-size: medium;"><strong><br />
</strong></span>You can install our firmwares in seconds with 9 easy steps <span style="text-decoration: underline;">when your SimpleOSD running.</span><br />
<img src="http://www.flytron.com/fotolar/simpleosd/screen.jpg" alt="" /></p>
<ol>
<li>Plug the USB Loader Stick on your computer</li>
<li>Plug the loader cable on your OSD&#8217;s Loader/GPS port</li>
<li>Power On your OSD</li>
<li>Run the Flytron_Loader.EXE and Select the COM Port of your USB Loader Stick</li>
<li>Enter the Firmware Code and Press the &#8220;Check the Code&#8221; Button</li>
<li>It will connect our web site and download firmware automatically. (If you using a firewall please open it)</li>
<li>Press the button of SimpleOSD and hold it, It will reboot in  7 seconds.</li>
<li>Uploader will install new firmware when your OSD rebooting. Release the button when it loading. OSD will run automatically after installation.</li>
<li>Remove the loader cable from OSD and reboot it again.(from button or power off and on)</li>
</ol>
<hr />
<h2><strong><a name="latest firmwares"></a>LATEST FIRMWARES</strong></h2>
<table id="table1" border="1" cellspacing="0" width="640">
<tbody>
<tr>
<td width="94"><strong>CODE</strong></td>
<td width="164"><strong>Firmware Name/Version</strong></td>
<td width="92"><strong>Release Date</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td colspan="4"><strong>XL Firmwares</strong></td>
</tr>
<tr>
<td width="94">xl_final</td>
<td width="164">XL Final v2.6</td>
<td width="92">2010-12-27</td>
<td>Final firmware of SimpleOSD XL with more features</td>
</tr>
<tr>
<td width="94">xl_final_25</td>
<td width="164">XL Final v2.5</td>
<td width="92">2010-09-12</td>
<td>bug fixed version of v2.4</td>
</tr>
<tr>
<td width="94">xl_final_24</td>
<td width="164">XL Final v2.4</td>
<td width="92">2010-06-30</td>
<td>bug fixed version with extra features</td>
</tr>
<tr>
<td width="94">xl_final_20</td>
<td width="164">XL Final v2.0</td>
<td width="92">2009-12-22</td>
<td>Old Final firmware of SimpleOSD XL</td>
</tr>
<tr>
<td width="94">xl_stable</td>
<td width="164">XL Stable v1.0</td>
<td width="92">2009-10-12</td>
<td>It&#8217;s old firmware of SimpleOSD XL</td>
</tr>
<tr>
<td colspan="4"><strong>Ultralight Firmwares</strong></td>
</tr>
<tr>
<td width="94">ul_stable</td>
<td width="164">Ultralight Stable v1.0</td>
<td width="92">2009-10-06</td>
<td>It&#8217;s latest default firmware of SimpleOSD Ultralight</td>
</tr>
<tr>
<td width="94">ul_gps</td>
<td width="164">Ultralight with GPS v1.0</td>
<td width="92">2009-11-11</td>
<td>GPS based firmware with home arrow and distance indicators.</td>
</tr>
<tr>
<td width="94">grooveytime</td>
<td width="164">Groovey Timer 1.0</td>
<td width="92">2009-10-11</td>
<td>Including a timer for flight time.<br />
LoveGroove&#8217;s idea from RCGroups</td>
</tr>
</tbody>
</table>
<hr />
<h2><strong><a name="extra_features"></a>Extra Features for SimpleOSD XL</strong></h2>
<p>Please download and extract this file before reading below:<a rel="nofollow" href="http://www.flytron.com/bootloader/xl_tools.zip" target="_blank">http://www.flytron.com/bootloader/xl_tools.zip</a><br />
Load latest xl_final firmware that coded <strong>xl_final</strong> before runnig this tools.</p>
<hr />
<h2><span style="font-size: medium;"><strong>PC Based Configuration Tool</strong></span></h2>
<p><strong> </strong>This tool is heart of new Final firmware. You can control all features of XL over your computer and design your screens with it.<br />
<strong>Final Firmware Loading Steps for Old Firmware Users</strong></p>
<ul>
<li>Run <strong>FL_Boot.exe</strong></li>
<li>Type <strong>xl_final</strong> in code line and press enter</li>
<li>Press and hold the OSD&#8217;s button for loading new firmware</li>
<li>Release the button when loader burning the rom.</li>
<li>Screen will blank after OSD Boot Screen this is normal.</li>
<li>Close Boot Loader and run <strong>XL_Calibrator.exe</strong></li>
<li>Select Com Port from Program Settings tab.</li>
<li>Click &#8220;Load ROM From File&#8221; button and select default.soc binary ROM file from same folder.</li>
<li>It will load all setting from default.soc. Then click &#8220;Write&#8221; button for uploading new ROM settings to OSD.</li>
<li>DONE! , Now you will see main configuration values on the screen.</li>
<li>Press Read Button for reading current ROM values from OSD, then click &#8220;Save ROM to File&#8221; button for saving your rom in a file for backup. This is important for saving your voltage and current calibration values for future usage.</li>
</ul>
<h3><strong>Using Configuration Tool</strong></h3>
<p>Configuration tool have 3 tab for all options.<br />
First tab is screen design only.</p>
<ul>
<li>Type your Callsign if you want to show it on the screen. Use only <strong>uppercase charaters</strong> and @ for &#8220;space&#8221;</li>
<li>Select the unit system Metric or Imperial</li>
<li>On/Off  the background</li>
<li>On/Off the home indicator.</li>
<li>Design 5 different screen with values.</li>
</ul>
<p><img src="http://www.flytron.com/fotolar/simpleosd/config_beta3.jpg" border="0" alt="" /></p>
<p>Second Tab for calibration values and other options.</p>
<ul>
<li>Type Alert values for Battery, Range and RSSI</li>
<li>Select Audio options.</li>
<li>Design your analog sensor input like Ultrasonic altimeter or any.</li>
<li>Change calibration values for fine tunning your system.<br />
Default voltage value is 220<br />
Default current value is 3 (auto configuration for Ultralight sensors)<br />
Default RSSI Min 40 , Max 135 for 2.6v to 0.8v RSSI systems.</li>
</ul>
<p><img src="http://www.flytron.com/fotolar/simpleosd/config_beta1.jpg" border="0" alt="" /></p>
<p>Thirth Tab for logs and rom records.</p>
<ul>
<li>Select the ComPort of USB loader.</li>
<li>Save/Load the configuration options on the file.</li>
</ul>
<p><img src="http://www.flytron.com/fotolar/simpleosd/config_beta2.jpg" border="0" alt="" /></p>
<hr />
<h2>FLYTRON Ground Station</h2>
<p>The Ground Station software works with bidirectional FrSky modules. You should edit config.ini file before first run.</p>
<p>you will see the line like &#8220;COMPORT=COM3&#8243; in the ini file, edit this com port number to your computer&#8217;s comport number that FrSky module connected. Then run the software and explore it&#8217;s features. Software is already on Beta and we are sharing it just for testing purpose.</p>
<h2><a rel="attachment wp-att-352" href="http://blog.flytron.com/simpleosd-web-manual.html/gs"><img title="gs" src="http://blog.flytron.com/wp-content/uploads/2010/01/gs.jpg" alt="" width="640" height="462" /></a></h2>
<p><strong>Features:</strong></p>
<ul>
<li>It is <a rel="nofollow" href="http://code.google.com/p/openfgs/" target="_self">OpenSource</a> (under LGPL license)</li>
<li>Live Video</li>
<li>Live Google Maps position</li>
<li>Video Capturing with all compression codecs.</li>
<li>Data logging and others.</li>
</ul>
<p>And we will add <a rel="nofollow" href="http://blog.flytron.com/category/openlrs-project" target="_self">OpenLRS</a> telemetry support with IMU and other sensors on Alpha version of firmware.</p>
<p>You can follow our all FrSKY telemetry projects from this <a rel="nofollow" href="http://blog.flytron.com/category/frsky-telemetry-projects" target="_self">link</a></p>
<p>And this is the google code page of OpenFGS project. <a rel="nofollow" href="http://code.google.com/p/openfgs/">http://code.google.com/p/openfgs/</a></p>
<p>Please contact with us for being  the project member, all developers are welcome.</p>
<hr />
<h2>Audio Telemetry Modem Receiver</h2>
<p>This is world first telemetry modem system over sound card, this mean you dont need any external device or part for reading telemetry data on the ground station. It reducing cost of your FPV set and increasing the flexibility.</p>
<p><img src="http://www.flytron.com/fotolar/simpleosd/audio_telemetry_modem.png" border="0" alt="" width="521" height="376" /></p>
<p>Tool reading AFSK waves from your microphone (or line-in) input and analysing it for byes and giving out from TCP 1976 port for external plugin softwares like google earth interfaces, data rcordars or flight gauges.<br />
<strong>Follow this 3 easy steps for reading telemetry datas:</strong></p>
<ol>
<li>Power on SimpleOSD XL (ofcourse connect it&#8217;s audio pin on your video TX&#8217;s audio input.)</li>
<li>Connect your video receivers audio output on you computer&#8217;s line-in or microhone input. You will hear the AFSK signals from your speaker. (if not, check your sound card&#8217;s recorder input options)</li>
<li>Run the SimpleOSD Audio Modem Receiver software and press the RUN button.</li>
</ol>
<h3><strong>Fine Tune:</strong></h3>
<ul>
<li>Every video receiver&#8217;s have different output levels for audio signals and you must finetune it from your computer.</li>
<li>Uncheck the Digitize check box. It will show audible signals on the screen.</li>
<li>You should see full waves on the screen, if waves too small or overloaded it is affect your data quality.</li>
<li>Open your sound card&#8217;s &#8220;Recording Control&#8221; menu and change the Gain value for optimising the AFSK waves on acceptible wave size.Waves mus be smaller then oscilloscope screen height and higher than half of screen. %80 is best size for waves.</li>
<li>Check Digitize check box after fine tuning.</li>
</ul>
<h3><strong>Developer&#8217;s Section</strong></h3>
<p>Audio Modem software including basic plugin architecture for using telemetry values on external applications like googleaerth control or value analysers.</p>
<p>Download this manual for detailed information about our AFSK protocol and Plugin system :<a href="http://www.flytron.com/pdf/audio_modem.pdf">http://www.flytron.com/pdf/audio_modem.pdf</a></p>
<h2><strong><span style="font-size: medium;">TROUBLESHOOTING</span></strong></h2>
<p><span style="font-size: small;"><strong><a name="background visibility"></a>1 &#8211; My Black Background is not enough black</strong></span></p>
<p>Some CCD Survilance Cameras giving powerfull video outputs for long cable lengths, If you using this type cameras for FPV, SimleOSD&#8217;s black background will not enough black.<br />
You should increase SimpleOSD&#8217;s output than original design and it is very simple hack.<br />
Just find &#8220;101&#8243; coded resistors close to GPS Port. First resistor increases white, Second one increases Black <img src='http://blog.flytron.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Use a solder drop jumper for disabling this resistor.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/1IX0udZnNNg&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/1IX0udZnNNg&amp;hl=en_US&amp;fs=1" allowfullscreen="true"></embed></object></p>
<p><span style="font-size: small;"><strong><a name="gps cant fixed"></a>2 &#8211; My GPS&#8217;s 3DFIX LED dont stop to blinking</strong></span></p>
<p>GPSs works 1.3Ghz and they are following very low power satellite signals. Because satellites works with solar panels and output powers only few watts on GPS signals. This is why GPSs affects all noises around.</p>
<p>At first, be sure your GPS not close to your video transmitter. Then you should check magnetic/electric noise generators on your setup. Brushless motors and their wires generates giant magnetic pulses and it affects all sensitive things arround. And some wrong designed ESCs are the main problem of all noise problems. They generates big voltage drops on battery side and it affects your equipments. Most of Rc Receivers resistive to this problems because producers designing them for worst case. But GPS producers already designing them for more healty conditions.</p>
<p>Power line filters resolves powerline parasites on most cases but not RF noises afound.</p>
<p>You should find right GPS position and maybe you should add some ferrite beads on wires.</p>
<p><span style="font-size: small;"><strong><a name="gps fixed but"></a>3 &#8211; My GPS Fixed but SimpleOSD didnt recognise it</strong></span></p>
<p>Please check the GPS to OSD cabling and data lines.<br />
Tx or RX lines should be connected to OSD before power on.</p>
<!-- end .entry -->
 
<div class="clearer"></div>
<div class="postdata_t"></div>
<div class="postdata">
Posted by <a href="http://blog.flytron.com/author/admin" title="Posts by Melih Karakelle" rel="author">Melih Karakelle</a> |
Categories: <a href="http://blog.flytron.com/category/manuals" title="View all posts in HowTo and Manuals" rel="category tag">HowTo and Manuals</a> | </div>
<div class="clearer"></div>
<div class="postdata_b"></div>
</div>
<!-- end .post -->
<div class="inside_subpost"> <a href="http://blog.flytron.com/feed" class="related_rss_icon"></a>
<div class="related_rss"><strong>Enjoyed this article? Subscribe to the full <a href="http://blog.flytron.com/feed">RSS Feed</a></strong>
</div>
 
<h3>Share with others</h3>
 
<div class="social">
<a href="http://digg.com/submit?url=http://blog.flytron.com/simpleosd-web-manual.html" title="SimpleOSD Web Manual">
<img src="http://digg.com/img/badges/100x20-digg-button.gif" width="100" height="20" alt="Digg!" />
</a>
</div>
 
<div class="social">
<script type="text/javascript">reddit_url=''</script>
<script type="text/javascript">reddit_title='SimpleOSD Web Manual'</script>
<script type="text/javascript" src="http://www.reddit.com/button.js?t=1"></script>
</div>
 
<div class="social">
<a href="http://www.stumbleupon.com/submit?url=http://blog.flytron.com/simpleosd-web-manual.html" title="SimpleOSD Web Manual">
<img alt="StumbleUpon" src="http://www.stumbleupon.com/images/stumble7.gif" border="0" />
</a>
</div>
 
<div class="social">
<script type="text/javascript"
src="http://d.yimg.com/ds/badge2.js"
badgetype="small-votes">
ARTICLEURL
</script>
</div>
 
<div class="clear"></div>
</div>
<div class="post" id="commentArea">
<!-- You can start editing here. -->
<h3 id="comments">19 Responses so far | <a href="#respond">Have Your Say!</a></h3>
 
<ol class="commentlist">
 
<li class="alt" id="comment-201">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/9a031d33d9c9f3de11bc21db5e8ad03e?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Mulder<span><br />
January 16th, 2011 at 2:58 am <a href="#comment-201" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Hi,</p>
<p>I just got my SimpleOSD, installed the firmware using the USB loader. But the calibrator_xl always says that it cannot find SimpleOSD?</p>
<p>Any hints?</p>
<p>Cheers,<br />
Dan</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-206">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
January 16th, 2011 at 5:29 pm <a href="#comment-206" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Hi Dan,</p>
<p>- be sure your OSD working and everything installed when updating it. You cant talk with it when it is off.<br />
- And be sure you choosed right com port from software and cable connected to right place.</p>
<p>It works without problem when this points ok.<br />
Cheers<br />
Melih</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-295">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/29375d90dd1c806d0d9acf10f463be15?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top"><a href='http://www.youtube.com/user/petleh82' rel='external nofollow' class='url'>Peter</a><span><br />
February 16th, 2011 at 2:38 am <a href="#comment-295" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Hello, do the osd have support for rssi value from 2,4 ghz receivers with &#8220;lost packet led&#8221;, where a led on a receiver blink for every packet lost. I know it it possible to build a little circuit to convert the blink rate to a analog rssi value. But that feels a little unnecessary. It would be a trivial thing to do in the firmware code. Do it support that ? If not see this a request <img src='http://blog.flytron.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Have a nice day !</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-298">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
February 16th, 2011 at 9:47 am <a href="#comment-298" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Direct lost package counter is a good idea, i will think about it on next generation firmware.<br />
Thanks</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-306">
<div class="komentar">
 
<div class="gravatar">
</div>
 
<p class="top"><a href='http://sircrashalot.wordpress.com/2011/02/20/easystar-schematics-v1-1/' rel='external nofollow' class='url'>Easystar schematics v1.1 &laquo; sircrashalot</a><span><br />
February 20th, 2011 at 3:59 pm <a href="#comment-306" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>[...] with 2 amp sensors. I thought that I will connect them later. This seemed to be a great idea until I started to check out how I can do the wiring. The more I read about it the more I got convinced how bad idea is to have OSD in the back. It was [...]</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-312">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/3b749c8b617ebbb01fc511144b176254?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Patrick O'Neill<span><br />
February 23rd, 2011 at 10:08 pm <a href="#comment-312" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Hi Melih, I have purchased your OSD, 100amp sensor and GPS sensor and have just received them. Brilliant work!<br />
I too, like Peter above, want to connect for RSSI from my RDS8000 2.4ghz receiver. Please make a solution <img src='http://blog.flytron.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
I have questions for you; (without Volt sensor installed)<br />
#1) I am powering the video, vid transmitter, and OSD through the 4 pin vid connect on OSD board. IS THIS OK?<br />
#2) With the above set up I see the Voltage and mA on screen with out volt sensor&#8230;is this the MAIN #1 passed through to video?<br />
The mA counts off really fast&#8230;must not be accurate installed this way.<br />
Hope to hear from you soon, Patrick</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-316">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/796d146a9eb1bf40e019a04bde628912?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Daniel Hibben<span><br />
February 26th, 2011 at 7:42 pm <a href="#comment-316" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>can this simple OSD be used with Antenna tracker system like the eagle eyes i have that and was hoping that it could send data that would allow the it to track the aircraft but i see nothing on this in the manual<br />
thanks Dan</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-327">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
March 13th, 2011 at 8:02 am <a href="#comment-327" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Hi Daniel,</p>
<p>Yes it is possible, Simple OSD including opensource telemetry systems (Audio and FrSky based ones) but you need some programming skills for that.</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-328">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
March 13th, 2011 at 8:09 am <a href="#comment-328" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Hi Patrick </p>
<p>Sorry i was offline/busy since few weeks.</p>
<p>I guess you can use the package lost led modification method for your receiver.<br />
just reads this article: <a href="http://blog.flytron.com/rssi-output-for-2-4ghz-futaba-fasst.html" rel="nofollow">http://blog.flytron.com/rssi-output-for-2-4ghz-futaba-fasst.html</a></p>
<p>About your questions:<br />
1) yes you can supply it over 4 pin side, this is simplest installation method with only 3 wire (+ &#8211; video)<br />
2) but you can measure the current over it. disable current info from screen for this setup. Because OSD measures the volts with internal voltage sensor but current sensor inputs affects from electric noises and measures the noise without the current sensor.</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-363">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/5b622efe80b167bce3b4916887386816?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Aaron<span><br />
March 31st, 2011 at 3:31 pm <a href="#comment-363" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>I figured out how to use the configurator and it&#8217;s pushing the data to the OSD just fine (by the way it works on Window&#8217;s 7). The only problem I have is that I can&#8217;t get the GPS to lock. I have the GPS on the OSD, and I get a solid blue light, but I never get any GPS related data on the screen. It always says wait for GPS fix.</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-372">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
April 3rd, 2011 at 9:20 am <a href="#comment-372" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>At first, you must remove the USB cable from OSD before power on, because it disables the GPS when plugged. o<br />
Second, Be sure about GPS cabling between OSD and GPS, Tx of GPS must be connected to Rx of OSD as we show in diagram. </p>
<p><strong>Means of LEDs</strong></p>
<ol>
<li>Solid BLUE: GPS backup battery charging</li>
<li>Solid RED: Low supply voltage or burned GPS chip by high voltage</li>
<li>Blinking RED: Searching for satellites</li>
<li>RED LED off: GPS locked (3Dfix) to satellites</li>
</ol>
</div>
</div>
</div>
 
</li>
 
<li id="comment-383">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/83bca8874e9f4397cc26815aa8a8fe93?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Carlos Santiago<span><br />
April 5th, 2011 at 12:32 am <a href="#comment-383" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Hello<br />
My simple OSD locates the satellites and is initialized without<br />
problems but after a few minutes there is a alert that says<br />
waiting GPS fix and might not work, which<br />
can it be? Watch the video, thanks.<br />
Always doing the same.<br />
<a href="http://vimeo.com/21940624" rel="nofollow">http://vimeo.com/21940624</a></p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-402">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/ad1df14479111f047314949261b264c4?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">roberto<span><br />
April 21st, 2011 at 2:41 am <a href="#comment-402" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>i would like to have 2 lines of information on the screen, is it possible?</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-411">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
May 2nd, 2011 at 4:29 pm <a href="#comment-411" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Sorry, it gives only one line information according the &#8220;simple&#8221; rule.<br />
PS:I know it is not &#8220;simple&#8221; when configuring but it is only way for answering the all requirements.</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-444">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/70bda38fbcafbb03e0065991d5387cbf?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Aaron<span><br />
May 12th, 2011 at 11:42 am <a href="#comment-444" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>I am having exactly the same problem as Carlos Santiago,<br />
after 1-2 mins of perfect operation it shows &#8220;waiting for gps fix&#8221; just like his video, happens every time, please help.</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-449">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://1.gravatar.com/avatar/36935e091919313f88896c89379b25bd?s=60&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Melih Karakelle<span><br />
May 12th, 2011 at 6:46 pm <a href="#comment-449" title="">#</a></span></p>
 
<div class="body">
<div class='body-author'><p>Oh sorry i was missed his question too.<br />
If it is same problem i will answer both;<br />
GPS already working and giving altitude and other details on this video. But saying &#8220;waiting for fix&#8221;. This is not a problem of OSD or GPS unit. GPS giving alert about loosing fix when it cant detect enough satellites around. Probably, your video TX jamming the GPS signals and it is receiving poor quality GPS signals. Change the GPS&#8217;s or VTx&#8217;s position, it resolves the most of noise problem. And add a satellite count symbol on your OSD screen for following the signal quality.</p>
<p>Possible reasons of time delays:<br />
- All VTx devices sensitive to temperature on mosfet junction and they generates more noise less power when the temperature increasing. This is why their range reduces after few minutes.<br />
- Satellites turning around the earth. If GPS fixes with only 4 satellite, it loses it after few minutes. You need 8 or more satellite signal for good quality position detection.</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-462">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/83bca8874e9f4397cc26815aa8a8fe93?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Carlos Santiago<span><br />
May 13th, 2011 at 11:36 pm <a href="#comment-462" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>I think I found the problem, some cameras that are generally<br />
GPS blockade, SN777, SN555, DX201, KX201, KX131 give no problem,<br />
KX191, KX171, KPC650CHQ.<br />
I hope this information serves.</p>
</div>
</div>
</div>
 
</li>
 
<li id="comment-463">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/83bca8874e9f4397cc26815aa8a8fe93?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Carlos Santiago<span><br />
May 14th, 2011 at 2:29 pm <a href="#comment-463" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Sorry; KX131 No problem</p>
</div>
</div>
</div>
 
</li>
 
<li class="alt" id="comment-465">
<div class="komentar">
 
<div class="gravatar">
<img alt='' src='http://0.gravatar.com/avatar/a2bf14afb0db7eb2ca6abbaf7c401a6c?s=60&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D60&amp;r=G' class='avatar avatar-60 photo' height='60' width='60' /></div>
 
<p class="top">Jho<span><br />
May 18th, 2011 at 3:22 am <a href="#comment-465" title="">#</a></span></p>
 
<div class="body">
<div class='body'><p>Carlos Santiago try to get the Mickey FIlter</p>
<p><a href="http://flytron.com/70-mickey-1-amper-power-noise-filter.html" rel="nofollow">http://flytron.com/70-mickey-1-amper-power-noise-filter.html</a></p>
<p>and see if this helps with problematic cameras,</p>
</div>
</div>
</div>
 
</li>
 
</ol>
 
 
 
<div class="clear"></div>
 
<div class="form_t"></div>
 
<div class="theform_packer">
 
<div class="theform">
<h3 id="respond">Leave a Feedback</h3>
 
 
<form action="http://blog.flytron.com/wp-comments-post.php" method="post" id="commentform">
 
 
<p><input type="text" name="author" id="author" value="" size="25" tabindex="1" class="comment_input" />
<label for="author">Name (required)</label></p>
 
<p><input type="text" name="email" id="email" value="" size="25" tabindex="2" class="comment_input" />
<label for="email">Mail (will not be published) (required)</label></p>
 
<p><input type="text" name="url" id="url" value="" size="25" tabindex="3" class="comment_input" />
<label for="url">Website</label></p>
 
 
<p><small><strong>XHTML:</strong> You can use these tags: &lt;a href=&quot;&quot; title=&quot;&quot;&gt; &lt;abbr title=&quot;&quot;&gt; &lt;acronym title=&quot;&quot;&gt; &lt;b&gt; &lt;blockquote cite=&quot;&quot;&gt; &lt;cite&gt; &lt;code&gt; &lt;del datetime=&quot;&quot;&gt; &lt;em&gt; &lt;i&gt; &lt;q cite=&quot;&quot;&gt; &lt;strike&gt; &lt;strong&gt; </small></p>
 
<p>
<textarea name="comment" id="comment" cols="25" rows="5" tabindex="4" class="message_input" ></textarea>
</p>
 
<p><input name="submit" type="submit" id="submit" tabindex="5" value="submit" class="button" onmouseover="this.class='button'" />
<input type="hidden" name="comment_post_ID" value="324" />
<p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="ea50c68147" /></p></p>
 
</form>
 
</div>
 
</div>
 
<div class="form_b"></div>
 
 
</div>
<div class="pagers">
</div>
<div id="singleNav">
<div class="previous"></div>
<div class="next"><a href="http://blog.flytron.com/hello-from-flytron-world.html" rel="next">Hello from Flytron World :)</a> &raquo;</div>
</div>
 
<div class="clear"></div>
</div>
<!-- end #leftcolumn -->
 
<div id="rightcolumn">
 
<ul class="sidebar">
 
<li id="categories-3" class="widget widget_categories"><h2>Categories</h2> <ul>
<li class="cat-item cat-item-5"><a href="http://blog.flytron.com/category/airfield-events" title="View all posts filed under Airfield Events">Airfield Events</a>
</li>
<li class="cat-item cat-item-4"><a href="http://blog.flytron.com/category/from-workshop" title="View all posts filed under from the Workshop">from the Workshop</a>
</li>
<li class="cat-item cat-item-16"><a href="http://blog.flytron.com/category/frsky-telemetry-projects" title="View all posts filed under FrSKY Telemetry Projects">FrSKY Telemetry Projects</a>
</li>
<li class="cat-item cat-item-30"><a href="http://blog.flytron.com/category/manuals" title="View all posts filed under HowTo and Manuals">HowTo and Manuals</a>
</li>
<li class="cat-item cat-item-15"><a href="http://blog.flytron.com/category/openlrs-project" title="Opensource Long Range System
OpenLRS Home">OpenLRS Project</a>
</li>
<li class="cat-item cat-item-3"><a href="http://blog.flytron.com/category/projects" title="View all posts filed under Projects">Projects</a>
</li>
<li class="cat-item cat-item-1"><a href="http://blog.flytron.com/category/uncategorized" title="View all posts filed under Uncategorized">Uncategorized</a>
</li>
</ul>
</li> <li id="recent-posts-3" class="widget widget_recent_entries"> <h2>Recent Posts</h2> <ul>
<li><a href="http://blog.flytron.com/dc-servo-pid-control.html" title="DC Servo PID Control">DC Servo PID Control</a></li>
<li><a href="http://blog.flytron.com/new-fl20a-fastpwm-escs.html" title="New FL20A FastPWM ESCs">New FL20A FastPWM ESCs</a></li>
<li><a href="http://blog.flytron.com/turnigy-tgy-9x-transmitter-modification.html" title="Turnigy TGY 9X Transmitter Modification">Turnigy TGY 9X Transmitter Modification</a></li>
<li><a href="http://blog.flytron.com/openlrs-rx-v2-multi-edition-released.html" title="OpenLRS Rx v2 Multi Edition released">OpenLRS Rx v2 Multi Edition released</a></li>
<li><a href="http://blog.flytron.com/balloon-telemetry-with-openlrs-receiver.html" title="Balloon Telemetry with OpenLRS Receiver">Balloon Telemetry with OpenLRS Receiver</a></li>
</ul>
</li><li id="linkcat-2" class="widget widget_links"><h2>Blogroll</h2>
<ul class='xoxo blogroll'>
<li><a href="http://rcexplorer.se/" title="Perfect RC review site on the internet">RCexplorer.Se</a></li>
 
</ul>
</li>
<li id="tag_cloud-3" class="widget widget_tag_cloud"><h2>Tags</h2><div class="tagcloud"><a href='http://blog.flytron.com/tag/aluminium' class='tag-link-22' title='2 topics' style='font-size: 14.3pt;'>aluminium</a>
<a href='http://blog.flytron.com/tag/balloon' class='tag-link-24' title='2 topics' style='font-size: 14.3pt;'>balloon</a>
<a href='http://blog.flytron.com/tag/camera' class='tag-link-6' title='1 topic' style='font-size: 8pt;'>Camera</a>
<a href='http://blog.flytron.com/tag/composite' class='tag-link-29' title='1 topic' style='font-size: 8pt;'>composite</a>
<a href='http://blog.flytron.com/tag/esc' class='tag-link-38' title='1 topic' style='font-size: 8pt;'>ESC</a>
<a href='http://blog.flytron.com/tag/fabric' class='tag-link-28' title='1 topic' style='font-size: 8pt;'>Fabric</a>
<a href='http://blog.flytron.com/tag/fastpwm' class='tag-link-37' title='1 topic' style='font-size: 8pt;'>FastPWM</a>
<a href='http://blog.flytron.com/tag/fiber' class='tag-link-27' title='1 topic' style='font-size: 8pt;'>Fiber</a>
<a href='http://blog.flytron.com/tag/fl20a' class='tag-link-39' title='1 topic' style='font-size: 8pt;'>FL20A</a>
<a href='http://blog.flytron.com/tag/fpv' class='tag-link-14' title='2 topics' style='font-size: 14.3pt;'>fpv</a>
<a href='http://blog.flytron.com/tag/generator' class='tag-link-21' title='2 topics' style='font-size: 14.3pt;'>generator</a>
<a href='http://blog.flytron.com/tag/glass' class='tag-link-26' title='1 topic' style='font-size: 8pt;'>Glass</a>
<a href='http://blog.flytron.com/tag/glasses' class='tag-link-13' title='1 topic' style='font-size: 8pt;'>glasses</a>
<a href='http://blog.flytron.com/tag/glider' class='tag-link-18' title='1 topic' style='font-size: 8pt;'>glider</a>
<a href='http://blog.flytron.com/tag/history' class='tag-link-34' title='1 topic' style='font-size: 8pt;'>History</a>
<a href='http://blog.flytron.com/tag/hydrogen' class='tag-link-20' title='2 topics' style='font-size: 14.3pt;'>Hydrogen</a>
<a href='http://blog.flytron.com/tag/infrared' class='tag-link-7' title='1 topic' style='font-size: 8pt;'>Infrared</a>
<a href='http://blog.flytron.com/tag/logo' class='tag-link-35' title='1 topic' style='font-size: 8pt;'>logo</a>
<a href='http://blog.flytron.com/tag/mill' class='tag-link-36' title='1 topic' style='font-size: 8pt;'>Mill</a>
<a href='http://blog.flytron.com/tag/modification' class='tag-link-10' title='2 topics' style='font-size: 14.3pt;'>modification</a>
<a href='http://blog.flytron.com/tag/openlrs' class='tag-link-31' title='4 topics' style='font-size: 22pt;'>OpenLRS</a>
<a href='http://blog.flytron.com/tag/photography' class='tag-link-8' title='1 topic' style='font-size: 8pt;'>Photography</a>
<a href='http://blog.flytron.com/tag/printer' class='tag-link-9' title='1 topic' style='font-size: 8pt;'>Printer</a>
<a href='http://blog.flytron.com/tag/rc' class='tag-link-19' title='1 topic' style='font-size: 8pt;'>rc</a>
<a href='http://blog.flytron.com/tag/rf' class='tag-link-32' title='1 topic' style='font-size: 8pt;'>RF</a>
<a href='http://blog.flytron.com/tag/splitter' class='tag-link-33' title='1 topic' style='font-size: 8pt;'>splitter</a>
<a href='http://blog.flytron.com/tag/trimersion' class='tag-link-11' title='1 topic' style='font-size: 8pt;'>Trimersion</a>
<a href='http://blog.flytron.com/tag/video' class='tag-link-12' title='2 topics' style='font-size: 14.3pt;'>video</a>
<a href='http://blog.flytron.com/tag/vintage' class='tag-link-17' title='1 topic' style='font-size: 8pt;'>vintage</a>
<a href='http://blog.flytron.com/tag/water' class='tag-link-23' title='2 topics' style='font-size: 14.3pt;'>water</a>
<a href='http://blog.flytron.com/tag/weather' class='tag-link-25' title='1 topic' style='font-size: 8pt;'>weather</a></div>
</li><li id="subscribe-here" class="widget widget_subscribeHere"><a href="http://blog.flytron.com/feed"><div class="rss-widget">Subscribe by RSS</div></a> <form class="feedemail-form" action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri=flytron', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true">
<div class="feedemail-label">Subscribe by Email:</div>
<input type="text" class="feedemail-input" name="email" value="your email here" onclick="this.focus();this.select();"/>
<input type="hidden" value="flytron" name="uri"/>
<input type="hidden" name="loc" value="en_US"/>
<input type="submit" value="Subscribe" class="feedemail-button"/>
<div><span class="feedemail-footer">Delivered by <a href="http://feedburner.google.com" target="_blank">FeedBurner</a></span></div>
</form></li> </ul>
<!-- end #sidebar -->
</div>
<!-- end #rightcolumn --><div class="clear"></div>
</div>
 
<div id="footer">
<div class="container">
<div class="copyright"><p>&copy;2010 Flytron Projects | Designed by <a href="http://blogdesignstudio.com" target="_blank">Blog Design Studio</a>'s New Blood | Powered by </p><a href="http://wordpress.org/" target="_blank" class="wordpress">ordpress</a>
</div>
 
</div>
<div class="clear"></div>
<!-- end .container -->
</div>
<!-- end #footer -->
</div>
 
</body></html>
/C-OSD/zioArduinoOSD schema proto.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property