From 5249fe7da5107a17ace0627d61d0438d00ab9d9a Mon Sep 17 00:00:00 2001 From: Livox-SDK Date: Thu, 18 Jun 2020 15:27:09 +0800 Subject: [PATCH] feat:add wite/read configuration parameters command --- Livox-SDK-Communication-Protocol.md | 109 +++++++++++++++++++++++++++- images/gps_485.png | Bin 0 -> 8041 bytes images/gps_485_1.png | Bin 0 -> 4633 bytes images/gps_ttl.png | Bin 0 -> 9895 bytes images/gps_ttl_1.png | Bin 0 -> 8453 bytes 5 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 images/gps_485.png create mode 100644 images/gps_485_1.png create mode 100644 images/gps_ttl.png create mode 100644 images/gps_ttl_1.png diff --git a/Livox-SDK-Communication-Protocol.md b/Livox-SDK-Communication-Protocol.md index d0e0819..f433d59 100644 --- a/Livox-SDK-Communication-Protocol.md +++ b/Livox-SDK-Communication-Protocol.md @@ -3,6 +3,7 @@ | **Document Release History** | | | | ---------------------------- | ----------- | ------------------------------------------------------------ | | **Date** | **Release** | **Change Description** | +| 2020/06/10 | v1.2.0 | 1. add write/read configuration parameters commands | | 2019/10/22 | v1.1.1 | 1. Update status code, add time synchronization status (Horizon: v06.05.00.00+, Mid-40/Mid-100: v03.07.00.00+)
2. Change IMU data push frequency | | 2019/9/25 | v1.1.0 | 1. Add Tele-15 / Horizon LiDAR's support | | 2019/7/08 | v1.0.6 | 1. Fix crc32 bits error
2. Add system status code description | @@ -102,6 +103,8 @@ There are three kinds of CMD sets: | | 0x08 | Configure Static/Dynamic IP | | | 0x09 | Get Device IP Information | | | 0x0A | Reboot device | +| | 0x0B | write configuration parameters | +| | 0x0C | read configuration parameters | | 0x01 LiDAR Command Set | 0x00 | Set Mode | | | 0x01 | Write LiDAR Extrinsic Parameters | | | 0x02 | Read LiDAR Extrinsic Parameters | @@ -398,8 +401,33 @@ Hub Status Code consists of 32 bits, which has the following meanings: | Bit7:29 | RSVD | | | Bit30:31 | system_status | 0: Normal
1: Warning
Any of the following situations will trigger warning:
1.1 `temp_status` is 1;
2: Error
Any of the following situations will trigger error:
2.1 `temp_status` is 2;
2.2 `LiDAR_status` is 1;
2.3 `firmware_status` is 1; | -# 4 Control Command Detail -## 4.1 General CMD Set +# 4 Configuration Parameters +## 4.1 Description + +The configuration parameter table is designed to configure the Livox device more easily. It is stored in the non-volatile area of the device. So configuration parameters will not lose after reboot. + +Each configuration has an independent key. The following are all available configuration parameters: + +| Key | Name | Supported Device | Description | +|------|------|------------------|-----------------------| +| 0x00 | Reserved | -- | Invalid key | +| 0x01 | High Sensitivity Function | Tele-15/07.09.0000+ | High Sensitivity Function enable/disable | + +* See [Write Configuration Parameters](#write-configuration-parameters) for writing configuration parameters; +* See [Read Configuration Parameters](#read-configuration-parameters) for reading configuration parameters; + +## 4.2 Value Details + +### 0x01 High Sensitivity Mode + +**Value Length:** 1 +**Supported Device:**
Tele-15/07.09.0000+
+| name | Offset (byte) | Data Type | Description | Default Value | +|---------|---------------|-----------|-----------------------|-----------------------| +| enable | 0 | uint8_t | 0: High Sensitivity Function Disable
1: High Sensitivity Function Enable | 1 | + +# 5 Control Command Detail +## 5.1 General CMD Set ### 0x00 Broadcast Message message @@ -612,8 +640,81 @@ response | | cmd_id | 1 | uint8_t | Command ID: 0x0A | | | ret_code | 2 | uint8_t | Return Code:
0x00: Success
0x01: Fail | +### 0x0B Write Configuration Parameters +**Supported devices/firmware version:**
Livox Hub/08.09.0000+
Horizon/06.11.0000+
Tele-15/07.09.0000+
-## 4.2 LiDAR CMD Set +request + +| CMD | Name | Offset (byte) | Data Type | Description | +|------|---------|---------------|-----------|-----------------------| +| data | cmd_set | 0 | uint8_t | General Command: 0x00 | +| | cmd_id | 1 | uint8_t | Command ID: 0x0B | +| | param_list | 2 | -- | Configuration Parameters in the form of Key-Value pairs. See the following part | + +In 'param_list', each of the configuration parameter has the following format: + +#### Configuration Parameter List Format +| Field | Offset (byte) | Data Type | Description | +|--------|---------------|-----------|-------------| +| key | 0 | uint16_t | Key| +| length | 2 | uint16_t | Length of value | +| value | 4 | -- | The type varies with different keys. For details, see [Value Details](#value-details) | + +response + +| ACK | Name | Offset (byte) | Data Type | Description | +|------|----------|---------------|------------|---------------------| +| data | cmd_set | 0 | uint8_t | General Command: 0x00 | +| | cmd_id | 1 | uint8_t | Command ID: 0x0B | +| | ret_code | 2 | uint8_t | Return Code:
0x00: Success
0x01: Fail, an error occurred while writing a parameter | +| | error_key | 3 | uint16_t | The Key of the first error Configuration Parameter| +| | error_code | 5 | uint8_t | See the following part | + +The meaning of the 'error_code': + +#### Configuration Parameter Error Code + +| Error Code | Description | +| ---------- | --------- - | +| 0 | No Error | +| 1 | The key is not supported| +| 2 | Execution failed| +| 3 | The key cannot be written | +| 4 | Wrong value | +| 5 | Wrong value length | +| 6 | Reading parameter length limit | +| 7 | The number of parameters does not match | + +### 0x0C Read Configuration Parameters +**Supported devices/firmware version:**
Livox Hub/08.09.0000+
Horizon/06.11.0000+
Tele-15/07.09.0000+
+ +request + +| CMD | Name | Offset (byte) | Data Type | Description | +|------|---------|---------------|-----------|-----------------------| +| data | cmd_set | 0 | uint8_t | General Command: 0x00 | +| | cmd_id | 1 | uint8_t | Command ID: 0x0C | +| | param_num | 2 | uint8_t | The number of parameters | +| | key_list | 3 | -- | Keys List to read | + +In 'key_list', each of the key has the following format: + +| Field | Offset (byte) | Data Type | Description | +|--------|---------------|-----------|-------------| +| key | 0 | uint16_t | Key| + +response + +| ACK | Name | Offset (byte) | Data Type | Description | +|------|----------|---------------|------------|---------------------| +| data | cmd_set | 0 | uint8_t | General Command: 0x00 | +| | cmd_id | 1 | uint8_t | Command ID: 0x0C | +| | ret_code | 2 | uint8_t | Return Code:
0x00: Success
0x01: Fail, an error occurred while writing a parameter | +| | error_key | 3 | uint16_t | The Key of the first error Configuration Parameter| +| | error_code | 5 | uint8_t | For details, see [Configuration Parameter Error Code](#configuration-parameter-error-code) | +| | param_list | 6 | -- | Configuration Parameters in the form of Key-Value pairs, see [Configuration Parameter List Format](#configuration-parameter-list-format)| + +## 5.2 LiDAR CMD Set ### 0x00 Set Mode @@ -832,7 +933,7 @@ response | | cmd_id | 1 | uint8_t | Command ID: 0x0A | | | ret_code | 2 | uint8_t | Return Code:
0x00: Success
0x01: Fail | -## 4.3 Hub CMD SET +## 5.3 Hub CMD SET ### 0x00 Query Connected LiDAR Device request diff --git a/images/gps_485.png b/images/gps_485.png new file mode 100644 index 0000000000000000000000000000000000000000..71adf1dfb2a61665596bdac5db0602e69ece051b GIT binary patch literal 8041 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 Lo=T^8e4`ajqGX~R7AoMSt1%s_E5|q zYiNcigrdg2FInFCz0doe^ZxOi_nvdl{d_<7e%Eup_nvbf*;twJ^MUv{I5_ytQ6_dA z97n-y9LIB%gM)KJ{E9DI;0&@eGvX-gmHNXLj(H(05gZ)Uq~m)YTx|K44aUKgy&fJO zG8haxolc=p+}+*N($XR#BAlF@Y;0`eC4)o0lev2WXxHilGb&}B=4#kRet7*-M&lY+g%<6F)?HVlybb|t)g_k9mNZr z|5f^PYMUET=xs}nl11|6!AWy=;3W}QG%9${%+XQqQbG#@r;l5(pV%Gr&4xgJ9wAWu9-G)XP6py$MsFRvk^Wg=|dpb2d% zQ@Ct60r<%)t)2TNrAG3Gdy0wh4?}8{uGyAEWLiZuPT1~qq^=nbsP|zzLL;uyMkVTT zktBq)ZkUbzSpDpv7CE z9@tY#5(60@Mw-&RsWb_DXY3Pbf}glc&ZyJ9dr61}iImxM8_|S3k~PW#-6ZtwGJU&s zVfv$OHa1;)o~(PLV8E#xNJJ^55%JSs%}oLBzk5+50>BkNz$#gGR%uE4IKbja!QtvoQB=}pT0hpEgNb(mp! zDVt8uDuwOntVF-9%TRMRPcsdjK}$f1uLo53nKCo<520X#0KIOtVM~HNCZzFWSO&zW zHj=?JCQ|txQq`F#)SBw*ORxvlkd{(w%^W&xSn>M5UNn7+)iqgUHuC*0knk=195_|V zwcdhR+fE&@RJWwhN8eM+gK!o%O0l;W!6)w?hYclN$87~p8C*N;oD=?(3@H*KH#~9S z%W2~dk1o2vl4iQp=}AIx6HBD-26paghee)Itr=}D=rsbM zf%A6f0B}6xp`cRkFKusMcd~4ztHx~vu;cXoP~g*}D*YU(nG%Sdy&=I$fp8v7FQ%hP2)%|X^YMu6NB9u4F$Uuoc zzy9}N$UvJiHj$O8wDB!k~C9TrBk5U(3V`dyyuJ1JuZk)KY4VR7o*|w4H+Ibo+J7?nxzjj>n<(0(y z8~cG}6QL=xasbM6HP;tMmo#?rq_!N%pt4O1HL`Az0#pzF(-poAOI7U;#jX@N;c+jyb`#E1g!ne46^8b`|OMMR*u5? zDeKD7)GfLAwEmmbf2(r4F90k}%ccij^~4YeSr@b`iCX@e4UWyzOQjYsT@$T?e<;0L zTUb@`&uaK?KqLm;)zYu*3|#YDSfq&doH5_LafLSXE4>4MN5u0E!SfEV^(T)yd^BC^ zI2%v$|1#8q&$uo7ad)i{)1_X0`pFd0=tMANu6E&nnIJ04IwO4(r#2=ZuTl;-6(qg8 zT!ahwXEpMgKJ4_pS}d77I0%H_O&PBr)R8e?9zmRBn7CP4A{BMgSkw zU9Au2H2MdXHt5R(KEQv1-pfjC7D4Js>Aw$cK;N$Tzm1D+1!@py7>=jurq|cYMYE0&v>!DAM z=KMKVB#8q?)Z0ee!}Y_jmE5ktQ8=FkdYS(As9#)SJJ ztzDZdav)k>QizRD3_yw>%d;0TXlrBeKKvtuvWuwu%Sij{_i%|04Kb4M7qqT<&l2L( zr5B2S7F7SBfAGqyEmOlaV!-HAerlVRlS%&2_KWuCN1#rE2Qxdhi$~D952H*|>jn$l z_-;LbN>|+5RrgUJqzt?XcY;QAOgZT9_5QuPb2exlKJwtLZG>1ulH_o*NwZ31>^87j znCtA&a*zpGLov`Ysp2}cSB{Z5GPL~+?>1t_P+(x8ntTt7R?OhmOLrsnHuK|%)tnSn ztKsL?Vs>9U8>y#p1Oc!$Yp_oUdNy83-el|}s81u%3mOpq7&K+OdtM-X#xdH_-ci%6 zG%j4djf*Z&-E_U`=m88o&K*!K9_37U_}C4f%zbaHc3sPC8j<6}1L57xy7VUqnDDB> zyerjc_wEFJO;Qkg7Z04fkYV-YZUN5IcvyQ&i=qzWseALx|6La%)g5jXU^vV(#gcRb zKGG{5NF)ajKSUfCIAdBGS3|J2eB)NO06;mH_L5s+bT&M4)nn&cL_Wv!OU>&pUjQ(ugeI= zK}}!n--1=F57Xv)ifCg7iOs4t-He-WhR@wv!(p&6D4+WOc1JqM7ej9Ucc=VEyqt)` z90^J%MdFkNxIrACM6RYAPE#sTr%H83H`SmYVv4D97_y274$o_kMR(_M`}N&PwcqKi zznRx`LGK`qPV0}=gr4Yr%WVdTPhfg?x)8nRHBHY6nBS64kUkvC*vvcMjqWW;1bhgd z5*;`r|1wPG-X5eB=^LP2wFZsl`*#zme4Bqwyp?`gNLklul{t#L-zw@3Dc zy9xg`W>#WbGnD@0WZGcN-Fyqo#WlnA?dxSot?!nID+Ne}pyJ$>ep2y3CmxsLfg^b0 zN-fGkb5R~iT?6|QVglwoeM?MPuUFrdvdkB3A)Wjr_g!RTMT9#q?yc4SQVd0kf9w^Psu ze8EbkFb<-13240Fh6IT$s|=H^LVa$jgktyRdPl?c30Bo3`9PPjaaGvRADK#je!ln2 z1jDCzT^-zHTR?G(qkRnCsp94FQ(YS)z;iM8h5aSKYM{#dTz8JW`)^x<<^7xB+%{*+ zPa7Z?jSPZnl>S(vmeH)YzZ6*c*}Ux$Qn6)E!Mij@dgD6{AHlqLN!>>`S(@jCPOlkJ z{WZp|d{-TP4cdFss86fhv7smAq_Ud#`J+I(6xw zB!04x7%FsN-nrP!LDyw9sL=!8;*G(>+n=GVJgDwe;YsnZ4;l3_c+@9F1vfpfhSzFi z$Kpx+>am|ZTRqRn);M0AxYay9?GPd{zlOB$Eh+Jh*-GTES+4iNo4fYl)w?7~Waj|1 zo_{%-x>-Sa`}%qy*zk7lFB{oR74Y~tcQ^_bhB)GtXXHX zgjKk+U%zCXHcOn>LRTJH%bE7{n(LOmR9Dihs+erlIYAJ~M$>5*fmh{shC?T}Vw5Ml zo8`Jf={^QukAwhLZ)emD?kp{Z&tMOg>Ih2pEB?g>e%DGljb{Y=NF`wvaw9!~jmK`& zX;TdHO^GVZ^~=Gz(MUTvF73$(rZb3CO2As zwR+2G5}&`hjS#n}5iwSj%<9$nJ>GO|SXaEfE|eO;xVKo5ZHhbfk8V*KefrCOUQ;i# zNbuQAK8!2SGfeF&uavNWHk#2jKCKo_II3f|R)x$xa~)71cOYkOwbceSa%wRP6pHKo<&%fY~o<}}xJXZ*6IZ(qJL ztiVVEdmMINZe4RXMpvA5Fe{bWug0Jt!xzJ4GV9RyHxy#YtoVW!NPu(@BWUV5w9YF>nLT6N^xWg^=56QBL@I z5Q)r1Wip{+;NzZD>TPA1Seqx7;e=OCXs4C^N5!7gp3}kZoUpFfCx^J0S^+oB)xMHi z&eGJY_Y1;q&psh4!z!HcQc@(cGW!;!d!8Y+(^{#_4o_-efPgsom&OOCwzkV-epZkA zPYLc={;t2NJ`(hs8GFa2^wE%HF);GDCx-Jx`b>nn>Uh$fF^b83NHPGq1%L1%Nz zZPLA8|OeeiLmagm50$_L_g>vw9(5yH@&UiB5-6qAc8`a!&j< zZ(+!o8jY>`?v%c&^sSev>?Fc!m>f(>8)i)6{;wuatfMkaAh8`OMj}URz+vN{S|6zs zB(my{f9AzH63|#A<6QkrFWw;o#tqswgYy z;^5%Had2=Q3GlF=IQm^ZSOM-!T_ri3%HaoF*u`yoSq)hnoSJ0f%jb8nYddXqeMRi` z=H^C5MrL|?y0f$M;NalVqerKwr_s^Tp`oFfnVIC|U131O$G5epXgi0s;bbbaYi!RqpQYqN1W38yh7hB?ScqSQAb+xPL6N zd+BQGVa@&bFC5Yz-5%K8gzm~FFL7{a@Bew@4saex+D5A6$91iSGMUl*s;9(xLx z+;_STpwvDR@zCIHe{I`PbGdjcqr%vGXW~AI*TFQRc^p(&7`7Y$b#T&q9_>urP98m1Wx}V+kpQ zFnqYyfrLCV8{4J%%46PNxV0B;!0Y+eB{%bvoxVH z&KD|IaPzIwbg#i$n71r(%`7|zc&`;1L35|Vw6U-`oNQ_^u=e@F%ZCHBAGCY>oP73` zTMIh@Oi!YbG1+{Wi+Ag8ud+J{ovt}QVRGKBpTg8$-OZTnE^%ty>UeE?TwR=9hTuVL zFRu!-sQg^eE5yo3g74)umNUCYwkI1HcGm`+=?{&|4lSV)vsXW}zF&5mD$gMuR;n_# z)8q6wx{c+|q;aTBrtRQ{$Zmh4MIi>`MzEQL8qeyBLKWe~Q!@tQp0oHUG*sNMJBDgfFtI^5ec z1hg(JS`THL8F&0_f^juISpGS3rDMb4v_1XP%d$=)Zt>-Ba_aRSAg>uLJ@^r?T2t!< z*RQFs45{yhSw85i7R07S4keZwlOmibC)GozA-_JnX7Y);wBfaMnEKt7eHA`L%&3Q; z6)G-lcI|aCHq7y>S0PDFpw;K;=emR4H0iRngfARQIdQ3h4H(PDZQ;&Da|hv?HfAY< zI*n6d-m2)tiE`TSxQLzQabZND{BAH~#&ma|^LlZ|&O@?1Mq>*yY0D!@8npafg75ifsl;Ov(Aqp1&Z8|48zRhmKS=)BNBT+q-X0p#3q`vrf;O(xJI`8 z>~^*d5}DFLf~*{p$pm|4ebmB~QF6Es#%YB$p>MM6uq#0p9b_LoVn#o%=abA9$NdA${*1@ib`eT*lG`k1njSxo5chL>r{4A zFL5BlxL#uTKh_@n@5R*Q+UV(^;WginwW$6!1lywUJ?vs?!8UM{YeI_DZf(iB7Xrk5 zuH*sEyA4!}sB&Y)Ke2mj5H>Yvx0*^|=$*eX&r~xR?PsE*G0u~SiEj-$@Fy6v$OG@$ z06s{g0pc8FS@v|he5)M;?Bks@u^k=A#D&-uytucMZSN3_hkY(UEp4PfY`w&ifn-*_ zudB!Os`>CTB$$zviEF3UWUmA17HoN>agiXae!fEAz3EN2Z0b$6_lSmakyiB!f@C7z z*_Z8eTr`Fgwo6utrWnFaW+=-mj=(PnrE4O|?b?_4SIkXxi{%%ajkhEdwm^HCH{~x{ z$_pD^*SN?}T#Rd@Tg}l0K|LxKF=gG1rfVKD@2NMRzZzg@xNV}%O6@T*pe1wqHD?FN zJ6pt^HeBc#nt6vwR7_-ajOcfDb*2sPtPQucZ{XDz1Ix??dI~gyQn?J7M`qsYi2E-O z{o?I=(W9h(=~Wc>N<{)OJ&`1;)nSrauJoE*4P)Y0hI``rY_6Z#Y8WlWK+XlrS zi6TT1BR2h3A+3nkx)3+#cT={e{sYss83xydxV5}t#rV-;e@=;)+hg2`m_nK&*hM{ADJ06O# z&V|?!XTzyR5{GR+PA?1%3-XtaJMmLuSU<#7=2^>Jf2tO1+Y&B6?J=I<$0x)I+qJYJRF|IkrBCTWy)|nrjJ4o$U$X*BSP|jEHo# z?~LQ(Vk~p!fdFUjmX{W-p0%_x#Vy2=d21A|x3o)tZ5p$Mr6ey(Z-JV$yqW~tbD5f^ z*6^LV>puHrX*OKmxi@Aj{*7fL;$}N`$je{iz;`yTA~U&(9Ad$?=_$U6CX&q@m(4UH zXvw|T(kAy~&FjY+^($aW1h9(SON`0OKk6M~>m7pUHbfKuf2qv+WiA+(Uz(MdAx!$po4{0&?2k3aKbCN; z=y+~ucDB(**yGFE4cx$27{-ao#iftW)tVNW82=0jhf5RqMqOV>n~{cVO?#^hM3Ek+ zw-z!CSWXB+GB0)>@o-mr)NVUUfCD^KHs3bWo{Cm*ruGP7Lq3?`E855i$57Ew^RG4iP zqS^OCyYlVK?h=&=OL_16u}MZCdlU&Dlp~EnkYw9hL zT`=R>(+)x%Wo3ms#nKQ})lRrn{nc=s0mqQz(=d96NZPE>h!|;ShG$uI<`*J$3}>Y- z5~APY4{56oxl3j~y2&0J@A3svu4rdh634+!bH{0BRR>!3d=1MhwF3zf!@)i5I|s6{ z@WMR>SnxYS1Ld2m6o)T&VHeNum_>;2Tg2-gUuJ}SbuvBbqYT2|)FyLp-ZNc!hC|uH?-Hkh43b3m z40u}#7xG#zg2%PCGKGxt&$!Hd_GQfmGKKwKGc2^PlA*tU@^0GFEb=tGvlU=@r;qNT7Tg zk-qY|V&bz-UO89zVa_!*xqk>}Oxt(?n(Mc5#c6@UtBB)se_xfb7@*}mn5W=1{MltI1y@IApc z4&LKfWi%ZPkT&M{-4#CnmL^;7)jrEErfi{d@i(dPNas}^v3@c``cV1CJ>Q~clbu)ym)944Tf(46>LWbLJ z>sji#aIhp&79~6eFyyUmG07cVx&fXWE;Y~HX0IZntW)7d%Z4n!$}3;0hldBHxpI;F z2fux*@jEa%ulcPt*=R9nBt9i{4pb)|m(*`c%L~Vts&V?DVL@v315-&x(i)IE#iQ)bvZ{mi`Q^~cY zb%1kTkb>cbol51^Fwx&{1RaG5P_=9BNkc#wJm>4g_H%8h*(++i|Hl2l^74O*i;hZ+ z6p1LQZXb@HoQ$W=xnJfW(YSCi(-e48-DE4mLOXl%jH{d7tZUX!9*RUu-c<}CRj`}y zWe0@A>(aPuS!z^GeH-D*Px(P^ql*J2K?cw)Mn{~7F>^w?s8xf^^wg*{?-aRDu?k9V zUn0|m>J#|SykXszJ<2d1w7VxA_xSD|Qy`HS9%(0cZHU8c;S+$Ok1ru6`qfN-DAlTE zq`0_htA`DdNT?HtZDV2yq}5AzV5QVLQc9_j2pQk@7cwlEXE8OA$WSHBBir?ugQqA3i$9v?dpT zP#xC$#GTxraaY_YKVpobd5PV*gC^(QZv3&P?~b?St{;Auay9?j7(`auXYKZ09{nE{iSI9I*P3v2yuUOj5rB- zBX4o+fu-I-i6)Tv#Vfbi+hal|o^h3Pmeh%_wB;!N0x@ilOnpZp#2%wgYY|Xr$EC)N zPnr8b?wloyH7@E0)`#t)-bJ~b!&}@xxW^k{#l_xs54vA8zLK0!$PiU~k@=iZb4uDQ zky6antfOz2y-d%^%LSD-CN7w?{M4+AIhTjPG!-r)ZfUu;o!tl9FI;?^hUvUEnMi(} zkbBQ^?#quPJ{pgo7{&ctEL8rRX-ulEhgHqf)$2hCpPuN~QS|!kJ2tmJD3=dH4h$7D zK6n*cH7_``9)AA~lde28a-XUl0`I?!XtnqG<;SJ<&c1-Q^!M|^9~EXx{33cuz1$8# zC&kx5>0V>=*f(p<20maI%f(fc(~`6gm9cs##A39lI?6jn|Iu*LJ*`Y6s$?Wv-sof;d<60!DwBHp2;Co>Rxe?Bfv!rQo=t_9 zryC!Xlg;Wkb272_J!VIT4{Jzrz3)}{NFSACowP8Lyb0aSAJcsSOzt{S3_;ibMiZ)= zL1(`M*e$mn{nCR(RK@RZKwIWuAN5*KHcDTRZ5$ULCfgusv-;MLCoRmN^bE-o2-p!W zsde{^7)^O%@I(=U-am$b}|sL>WLt5#Hx zx$0zWF=T`==*56qi(e733%v<*<5UA5?Zu-;OWOoEh#IqZ)?38opKhsBVFE&hxIXJkad{rgIPf#=g;c80 z)0F8@1tgKVDVL`@4f3EX0~qL~Gk?FWR|Je0VuWw6&kYuEf-H+qrKtA1nNLr#O~8)i z4g=u55~^m97tO0qVRFzNcYeIVx~FH6m>erX5i`%}q;P*pi^@k*FoiW#--wcG`gFXf=ArbfzRU!VkDlWDV+Gya*8aK z&#tw$w+uZtjjI|iZ;J^^@eHzbcabO!gVzbFpvb2)?a!V#9nYt~^nR>O*y=$I!!RfR zidMXXbw)&y26OhLG?usIxoN7(LjKZmZ_`_!Rc>~cwRWo@#gAtCGN{=scJvbo>v75_ z2-_0pEO#w*bw$7owlzJZ&=g2)x*OaL& z4|NLvCZ5Z>o$(NUet*bug>C9tN#TBe=*6>VSIHyeJ;D65YZi;4|8(yWnuM3tlVU1H z>v>=vZCM#D&r^WmsGmz~Q_VtHlgSO8918lkqW;f;($3}Xa7JS zlCJodNU(3RKjB$j+Ck$Kw!cbYgY`EC^c%#go7j%nr8{3-Ns%{aV!!O)HiczxK!?TU zP?pvS@UH$;BCeYU^6W=jrYpP+=Fak{f+8c7jY)0%R;cW`RGu$70x!2RG|mE+CD(4I z`}?cr#~ho}FXNo$hY+?m#}8w=Q(V|=cBBmNP=P%(KFL*c{6i=H z#V3`vpRoohRGdA+$i5&4b|Xd;&eKHjLG$uc9KPmrDyfoXPz>r?8W>w=2Z9_VBLBNhF2_0q`oXWl=cZPUq$aE4tX0K zj*9kY4EQAO29>NTmg)CKCkC~eL^d<|SJ*BHS8m0q2AxIdU z$>uHeYbWpGn<};(zx{Ye?LvWPJ#E!E#^>QQVM!mvpkqow_ z#xY=(#lk@7^d%)K@os|05*tL7|Vy|fvZXd$`$T7MJ0|fWN|`% z+2$^KB&#>0Jk2N zI|*dKt5Ed8G}o~FeWzxTQT{O7r#HtzQ}7V*M?x`)_N2rh$&Ay!>*XdQN%{^TZ-POHF^lU{dpNv>;|Bb@Asa zI3p06orMH{B;a5{0G4=19H8;~I%b}54f0addly`=-AY41ZVk2BWXuS_C6AWD)AZ5$ zQ4BXtVJ#lJs&1nT$`R`mRObmgaf~DU5S(OZ*EvZ6&iEt%G7Ez(^(OECO!{sx`REQH zP|6u94LEux|J#3RKRGTYyuH6zU!azQ<43CDFAtN$IOz)>inYi^m)N6J3_V~e?rg0+ zq*C!d@wAfgEjPd(OI?mfl#65e1U%Y$8=0DhFTMcB6%XUKuMJ&@y4=;I&56ZKotb-5 z^x6rcC4zRt*osVCcqLMboTSfL?^>*oaaVW{88mar+co{4fDlC z8iiJJ8b{v4*rfGnW_^!eO(q4f)m6A}-WM>%>DFv`dea&4*=_${X}ep`M;?8PKhtd% zT9<+8j%~6#=767W@~*qB-%1o>Xt)Q^%CUl%Ky3p#dqmy@sIzRgm9DD8y1IiL0aang z^jXkJN`tNqYe8D+?Poi(FW=!6J2P*-Ze*;?OU|yeNlrr6DK_IujP{VR<72!57sL1r zjthdG-n615d9)+DL5zChu@^in4DNX!w;qMTqD^XG9Ho7vDisGQS%Y){r8<{9zgvZ% zpdY$phaPKKgygrdB4^HUptXe0LeCuGa$LzPJF8lETc{Mo^f9_B|DgaN**X|pS@32J z{bpfYiU{1L^h0|u=#xpk=9l^@Jbm`d?E)kjM4zYA6?I?Ga~ys-wkn|6eT+OE6hZw?;3$tOa(e)5@XpH!yi4hXsn zIHKp6zh7`>RiyEHhKUJNv{WAFVqm z;nh&kl^|gSW%#fiq+~;5X*B96V*~)OJQ{stBz|`;O_F*ia4?o0^Q>=99}u|jLw?&{ zL+Qlkm(*FpeXXixDb8mDfbQ*G>?k%pPR7MsVicf zmPkj6H#`zRizm)|@jae#`!rphjPG3Xnf>~#Ulecz6Lrr!+yRFKf=_6_U((fNM>-1PJpC76b^jH@^LVv{xu z%;4{9!_#`y!K)@7)&@iNfeLhoZB5dHo=cvwjaiDIW9Tupp_`pfPU}W%EF&xXEYM~( z6A3lupZBH(yWpnhCcCat^E`S)q-V_%G*N9OHK#pjY5y?AOU%MJpGBaqH8JHLzr>59aq#|j5Fjy#Ddqq)le|1>>2FE4%;H!7p19y} z!t}x5?jELlNLtWe_~%Q8<^Z*2+sn&e!Bh4q_vpEwm=Zw1V|<{4Gn|v=MqK&@wg-{| z97SmN9lQZ*dYwffBgNibk+qYcUmeq9>b}DH!(fuZfKfjZaa*D+5_+-c1JQp~!k6?} zl}D`>hupiIE(eJkMzG%f&qfK>-{-E_IJWhj-8jaYTJG0o&5K7e5`6PHFRU(}_-73j zq|Yj-X@qo>sqBvwrt}q_i$;t7RGibOKgsB_3QU`K5%~|5}mrh|Hngt^bG9vup={qT*S}nM2244ub3; z{ypeBcVaq!uoa5`Ng50T!5i8!205&80l#9cq<;W&;T@@~u62K4V(Wd(7f>vm4GSdd zh7;ogLSwTM2GgKN4ZqJ6-SYWz1U&^nIhWc)6(QD%?-_r>;iC!j26W)pu#10?Dm(6U zIrl_kWOu}!M{O3g08SzS8zS@wA*+BI%(j6u_?}zv4v+-Ee>>rl!%h&yIGTr8Y2nF- z3N=1@hUo%6J9L)a-h#v4z-F`Rn|&qS?A-)An2&e0ML>C^XTm!?ne@E#x4`-L=`d=8 z_E1cmXm@A9d}o4rU}BTEqlSCdW<}Zg>kwJK*+b6G3587vMthm_FP^NyfEywcI)5=2 z9K$$aPh#Wb#oiP2xUtcCkCQ2Z^KBeN_^JRs39B(Po!I}s{12tzEeXbT&sgmU7koF( z!?np3J6F68hfU)rkZ|Gws>tZ*)$f8WSOh?CNfO$yeXsyMoqzCGxD`kMeI5quf?A=D zaRCwiU*S7=Sb%>j3P!-jpYOGm0{;uZm9^X0P9~)VAsBe>q zrMy-%Asj%-EiA?d`adl&HP#~M5PZ5&)HvNxb1im1$p)~L)K^>Xnnk84yL@CU*4%VlANdrdIKSq{8&^%8AVKuU&slhd+D-|*SaxwR5Cd`h%=M3m?GxIN7aJz{ z9jP<`y?ltZ-bd_D?1zuB^Bala0zBLdHP~Ii(Q-7&`1b0;FQsNAc>w;Up7}18KP)K= ziTi%Ugs66=CL8+2JrBu+Qx2~Dq-%qf!ucDf{(~l6%a<(~92FW^x~<;Eg0H3iaPgn% t|G&R)qaw;x49<>H|9-?AIXYMhjidU$=KkUBpFfr1s3>YGRLWVs`VWDNQnvsA literal 0 HcmV?d00001 diff --git a/images/gps_ttl_1.png b/images/gps_ttl_1.png new file mode 100644 index 0000000000000000000000000000000000000000..feea85ea4c86efabc1f2f3fc00a2b856331f74c8 GIT binary patch literal 8453 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